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 <linux/sizes.h> 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.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to