From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756305AbcIGU57 (ORCPT ); Wed, 7 Sep 2016 16:57:59 -0400 Received: from mail.kmu-office.ch ([178.209.48.109]:41940 "EHLO mail.kmu-office.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751304AbcIGU5u (ORCPT ); Wed, 7 Sep 2016 16:57:50 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Date: Wed, 07 Sep 2016 13:52:30 -0700 From: Stefan Agner To: linux@armlinux.org.uk Cc: ard.biesheuvel@linaro.org, matt@codeblueprint.co.uk, kirill.shutemov@linux.intel.com, l.stach@pengutronix.de, arnd@arndb.de, nicolas.pitre@linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2] ARM: LPAE: initialize cache policy correctly In-Reply-To: <20160905180003.30638-1-stefan@agner.ch> References: <20160905180003.30638-1-stefan@agner.ch> Message-ID: <4ee97b594d1d3bc8fa9a3df915d96b2c@agner.ch> User-Agent: Roundcube Webmail/1.1.3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2016-09-05 11:00, Stefan Agner wrote: > The cachepolicy variable gets initialized using a masked pmd > value. So far, the pmd has been masked with flags valid for the > 2-page table format, but the 3-page table format requires a > different mask. On LPAE, this lead to a wrong assumption of what > initial cache policy has been used. Later a check forces the > cache policy to writealloc and prints the following warning: > Forcing write-allocate cache policy for SMP > > This patch introduces a new definition PMD_SECT_CACHE_MASK for > both page table formats which masks in all cache flags in both > cases. Submitted the patch to your tracking system (Patch #8612/1). -- Stefan > > Signed-off-by: Stefan Agner > --- > Changes since v1: > - Introduce new definition PMD_SECT_CACHE_MASK > > arch/arm/include/asm/pgtable-2level-hwdef.h | 1 + > arch/arm/include/asm/pgtable-3level-hwdef.h | 1 + > arch/arm/mm/mmu.c | 2 +- > 3 files changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/arm/include/asm/pgtable-2level-hwdef.h > b/arch/arm/include/asm/pgtable-2level-hwdef.h > index d0131ee..3f82e9d 100644 > --- a/arch/arm/include/asm/pgtable-2level-hwdef.h > +++ b/arch/arm/include/asm/pgtable-2level-hwdef.h > @@ -47,6 +47,7 @@ > #define PMD_SECT_WB (PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE) > #define PMD_SECT_MINICACHE (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE) > #define PMD_SECT_WBWA (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | > PMD_SECT_BUFFERABLE) > +#define PMD_SECT_CACHE_MASK (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | > PMD_SECT_BUFFERABLE) > #define PMD_SECT_NONSHARED_DEV (PMD_SECT_TEX(2)) > > /* > diff --git a/arch/arm/include/asm/pgtable-3level-hwdef.h > b/arch/arm/include/asm/pgtable-3level-hwdef.h > index f8f1cff..4cd664a 100644 > --- a/arch/arm/include/asm/pgtable-3level-hwdef.h > +++ b/arch/arm/include/asm/pgtable-3level-hwdef.h > @@ -62,6 +62,7 @@ > #define PMD_SECT_WT (_AT(pmdval_t, 2) << 2) /* normal inner write-through */ > #define PMD_SECT_WB (_AT(pmdval_t, 3) << 2) /* normal inner write-back */ > #define PMD_SECT_WBWA (_AT(pmdval_t, 7) << 2) /* normal inner write-alloc */ > +#define PMD_SECT_CACHE_MASK (_AT(pmdval_t, 7) << 2) > > /* > * + Level 3 descriptor (PTE) > diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c > index 724d6be..4001dd1 100644 > --- a/arch/arm/mm/mmu.c > +++ b/arch/arm/mm/mmu.c > @@ -137,7 +137,7 @@ void __init init_default_cache_policy(unsigned long pmd) > > initial_pmd_value = pmd; > > - pmd &= PMD_SECT_TEX(1) | PMD_SECT_BUFFERABLE | PMD_SECT_CACHEABLE; > + pmd &= PMD_SECT_CACHE_MASK; > > for (i = 0; i < ARRAY_SIZE(cache_policies); i++) > if (cache_policies[i].pmd == pmd) {