From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753521AbbJOOGy (ORCPT ); Thu, 15 Oct 2015 10:06:54 -0400 Received: from foss.arm.com ([217.140.101.70]:35999 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753351AbbJOOGw (ORCPT ); Thu, 15 Oct 2015 10:06:52 -0400 Date: Thu, 15 Oct 2015 15:06:46 +0100 From: Mark Rutland To: "Suzuki K. Poulose" Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, catalin.marinas@arm.com, will.deacon@arm.com, steve.capper@linaro.org, marc.zyngier@arm.com, ard.biesheuvel@linaro.org, christoffer.dall@linaro.org, Jeremy Linton Subject: Re: [PATCHv3 10/11] arm64: Add 16K page size support Message-ID: <20151015140646.GJ8825@leverpostej> References: <1444821634-1689-1-git-send-email-suzuki.poulose@arm.com> <1444821634-1689-11-git-send-email-suzuki.poulose@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1444821634-1689-11-git-send-email-suzuki.poulose@arm.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, > +config ARM64_16K_PAGES > + bool "16KB" > + help > + The system will use 16KB pages support. AArch32 emulation > + requires applications compiled with 16K(or multiple of 16K) > + aligned segments. Nit: missing space before '(' Nit: 'a multiple of' > @@ -503,6 +517,7 @@ config XEN > config FORCE_MAX_ZONEORDER > int > default "14" if (ARM64_64K_PAGES && TRANSPARENT_HUGEPAGE) > + default "12" if (ARM64_16K_PAGES && TRANSPARENT_HUGEPAGE) > default "11" I'm a little lost here. How are these numbers derived? > menuconfig ARMV8_DEPRECATED > @@ -689,9 +704,9 @@ config COMPAT > the user helper functions, VFP support and the ptrace interface are > handled appropriately by the kernel. > > - If you also enabled CONFIG_ARM64_64K_PAGES, please be aware that you > - will only be able to execute AArch32 binaries that were compiled with > - 64k aligned segments. > + If you use a page size other than 4KB(i.e, 16KB or 64KB), please be aware Nit: missing space before '(' please. > diff --git a/arch/arm64/include/asm/fixmap.h b/arch/arm64/include/asm/fixmap.h > index 8b9884c..a294c70 100644 > --- a/arch/arm64/include/asm/fixmap.h > +++ b/arch/arm64/include/asm/fixmap.h > @@ -55,8 +55,10 @@ enum fixed_addresses { > * Temporary boot-time mappings, used by early_ioremap(), > * before ioremap() is functional. > */ > -#ifdef CONFIG_ARM64_64K_PAGES > +#if defined(CONFIG_ARM64_64K_PAGES) > #define NR_FIX_BTMAPS 4 > +#elif defined (CONFIG_ARM64_16K_PAGES) > +#define NR_FIX_BTMAPS 16 > #else > #define NR_FIX_BTMAPS 64 > #endif We could include and simplify this to: #define NR_FIX_BTMAPS (SZ_256K / PAGE_SIZE) Which works for me locally. > diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h > index 5eac6a2..90c7ff2 100644 > --- a/arch/arm64/include/asm/thread_info.h > +++ b/arch/arm64/include/asm/thread_info.h > @@ -25,6 +25,8 @@ > > #ifdef CONFIG_ARM64_4K_PAGES > #define THREAD_SIZE_ORDER 2 > +#elif defined(CONFIG_ARM64_16K_PAGES) > +#define THREAD_SIZE_ORDER 0 > #endif > #define THREAD_SIZE 16384 The above looks correct. As an open/general question, why do both THREAD_SIZE_ORDER and THREAD_SIZE exist? One really should be defined in terms of the other. As far as I can tell,the only user of THREAD_SIZE_ORDER outside of arch code is fork.c, which could calculate it as: ilog2(DIV_ROUND_UP(THREAD_SIZE, PAGE_SIZE)) Though I suspect we can't do that in a macro here for fear of a fragile build, so that's something for another time. > diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S > index b6aa9e0..2ed57a8 100644 > --- a/arch/arm64/kernel/head.S > +++ b/arch/arm64/kernel/head.S > @@ -624,7 +624,12 @@ ENDPROC(__secondary_switched) > #define id_aa64mmfr0_tgran_shift ID_AA64MMFR0_TGRAN64_SHIFT > #define id_aa64mmfr0_tgran_on ID_AA64MMFR0_TGRAN64_ON > > -#else > +#elif defined(CONFIG_ARM64_16K_PAGES) > + > +#define id_aa64mmfr0_tgran_shift ID_AA64MMFR0_TGRAN16_SHIFT > +#define id_aa64mmfr0_tgran_on ID_AA64MMFR0_TGRAN16_ON > + > +#elif defined(CONFIG_ARM64_4K_PAGES) > > #define id_aa64mmfr0_tgran_shift ID_AA64MMFR0_TGRAN4_SHIFT > #define id_aa64mmfr0_tgran_on ID_AA64MMFR0_TGRAN4_ON I assume you'll s/ON/SUPPORTED/ per comments in another thread. Otherwise this looks fine to me. Thanks, Mark.