From patchwork Tue Feb 25 11:38:52 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Capper X-Patchwork-Id: 3715741 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 6F7FF9F2ED for ; Tue, 25 Feb 2014 11:39:42 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 9F261201C7 for ; Tue, 25 Feb 2014 11:39:41 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 656A8201D3 for ; Tue, 25 Feb 2014 11:39:40 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1WIGMF-0003tP-L7; Tue, 25 Feb 2014 11:39:31 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1WIGMC-0006oz-W5; Tue, 25 Feb 2014 11:39:29 +0000 Received: from mail-wi0-f178.google.com ([209.85.212.178]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1WIGM9-0006nO-R2 for linux-arm-kernel@lists.infradead.org; Tue, 25 Feb 2014 11:39:26 +0000 Received: by mail-wi0-f178.google.com with SMTP id cc10so555129wib.5 for ; Tue, 25 Feb 2014 03:39:03 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=NDRrffciiBdqCj8gUjr8fTh0n1Tz0XBEFzwjjYPvBPE=; b=a+Ietj8LmLhk40N25UhZxIquKWDuYEdhzmY/w7zDxkGRm0vmxiKOf9xqohwv1up4JV VZ0g9R5fLAgs3l/8MSzjfFf84UxO+4gWlkUf8tDrCotSjGqWfQb8zVOrXqydmqashcAi cSrKlHpOHZjS3RnaZFpqhO6MS/A3+EZ0Fe4MTDAJna3OBerLjt8K1HZGOxXPSk+xe4LH hKBCyhy+/+MfgQLgIcw76tObYJfTbUbAOHlXIULWeINhXquIZUeet9i52FmKaUx3uhGc PbKC3k3Ff5s6AwiDk2hTUhGMwPMunv3DeYPK4z/CX3Pais9iLzpGe9JHKUkTEicBWe/f zBLw== X-Gm-Message-State: ALoCoQnwD26WEbul4mkTFE05TvrLagDoh5UF3jTOCxivVeUq2ZAT0veKIpEHZC9EVS9dpaUJ09CX X-Received: by 10.180.205.204 with SMTP id li12mr2444770wic.34.1393328343153; Tue, 25 Feb 2014 03:39:03 -0800 (PST) Received: from marmot.wormnet.eu (marmot.wormnet.eu. [188.246.204.87]) by mx.google.com with ESMTPSA id pm2sm33866921wic.0.2014.02.25.03.39.02 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Feb 2014 03:39:02 -0800 (PST) From: Steve Capper To: linux-arm-kernel@lists.infradead.org, linux@arm.linux.org.uk Subject: [PATCH V2 1/3] arm: mm: Double logical invert for pte accessors Date: Tue, 25 Feb 2014 11:38:52 +0000 Message-Id: <1393328334-27285-2-git-send-email-steve.capper@linaro.org> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1393328334-27285-1-git-send-email-steve.capper@linaro.org> References: <1393328334-27285-1-git-send-email-steve.capper@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140225_063925_965000_33C76D29 X-CRM114-Status: UNSURE ( 9.71 ) X-CRM114-Notice: Please train this message. X-Spam-Score: -2.6 (--) Cc: lauraa@codeaurora.org, catalin.marinas@arm.com, will.deacon@arm.com, keescook@chromium.org, Steve Capper X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Long descriptors on ARM are 64 bits, and some pte functions such as pte_dirty return a bitwise-and of a flag with the pte value. If the flag to be tested resides in the upper 32 bits of the pte, then we run into the danger of the result being dropped if downcast. For example: gather_stats(page, md, pte_dirty(*pte), 1); where pte_dirty(*pte) is downcast to an int. Functions such as huge_pte_write also perform a downcast to unsigned long (which is 32 bits). This patch adds a double logical invert to all the pte_ accessors to ensure predictable downcasting. Signed-off-by: Steve Capper Acked-by: Catalin Marinas Acked-by: Catalin Marinas --- Changes in V2: drop the pte_isset macro, just add the !! --- arch/arm/include/asm/pgtable.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index 7d59b52..02ee408 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -215,10 +215,10 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd) #define pte_clear(mm,addr,ptep) set_pte_ext(ptep, __pte(0), 0) #define pte_none(pte) (!pte_val(pte)) -#define pte_present(pte) (pte_val(pte) & L_PTE_PRESENT) +#define pte_present(pte) (!!(pte_val(pte) & L_PTE_PRESENT)) #define pte_write(pte) (!(pte_val(pte) & L_PTE_RDONLY)) -#define pte_dirty(pte) (pte_val(pte) & L_PTE_DIRTY) -#define pte_young(pte) (pte_val(pte) & L_PTE_YOUNG) +#define pte_dirty(pte) (!!(pte_val(pte) & L_PTE_DIRTY)) +#define pte_young(pte) (!!(pte_val(pte) & L_PTE_YOUNG)) #define pte_exec(pte) (!(pte_val(pte) & L_PTE_XN)) #define pte_special(pte) (0)