Re: [RFC PATCH 4/6] powerpc/64s: Make hash MMU code build configurable

2021-08-30 Thread Christophe Leroy




Le 30/08/2021 à 08:55, Nicholas Piggin a écrit :

Excerpts from Christophe Leroy's message of August 28, 2021 7:59 pm:



Le 27/08/2021 à 18:34, Nicholas Piggin a écrit :

Introduce a new option CONFIG_PPC_64S_HASH_MMU which allows the 64s hash
MMU code to be compiled out if radix is selected and the minimum
supported CPU type is POWER9 or higher, and KVM is not selected.

This saves 128kB kernel image size (90kB text) on powernv_defconfig
minus KVM, 350kB on pseries_defconfig minus KVM, 40kB on a tiny config.

Signed-off-by: Nicholas Piggin 
---
   arch/powerpc/Kconfig  |  1 +
   arch/powerpc/include/asm/book3s/64/mmu.h  | 22 +-
   .../include/asm/book3s/64/tlbflush-hash.h |  7 ++
   arch/powerpc/include/asm/book3s/pgtable.h |  4 ++
   arch/powerpc/include/asm/mmu.h| 38 +--
   arch/powerpc/include/asm/mmu_context.h|  2 +
   arch/powerpc/include/asm/paca.h   |  8 +++
   arch/powerpc/kernel/asm-offsets.c |  2 +
   arch/powerpc/kernel/dt_cpu_ftrs.c | 10 ++-
   arch/powerpc/kernel/entry_64.S|  4 +-
   arch/powerpc/kernel/exceptions-64s.S  | 16 +
   arch/powerpc/kernel/mce.c |  2 +-
   arch/powerpc/kernel/mce_power.c   | 10 ++-
   arch/powerpc/kernel/paca.c| 18 ++---
   arch/powerpc/kernel/process.c | 13 ++--
   arch/powerpc/kernel/prom.c|  2 +
   arch/powerpc/kernel/setup_64.c|  4 ++
   arch/powerpc/kexec/core_64.c  |  4 +-
   arch/powerpc/kexec/ranges.c   |  4 ++
   arch/powerpc/kvm/Kconfig  |  1 +
   arch/powerpc/mm/book3s64/Makefile | 17 +++--
   arch/powerpc/mm/book3s64/hash_pgtable.c   |  1 -
   arch/powerpc/mm/book3s64/hash_utils.c | 10 ---
   .../{hash_hugetlbpage.c => hugetlbpage.c} |  6 ++
   arch/powerpc/mm/book3s64/mmu_context.c| 16 +
   arch/powerpc/mm/book3s64/pgtable.c| 22 +-
   arch/powerpc/mm/book3s64/radix_pgtable.c  |  4 ++
   arch/powerpc/mm/book3s64/slb.c| 16 -
   arch/powerpc/mm/copro_fault.c |  2 +
   arch/powerpc/mm/fault.c   | 17 +
   arch/powerpc/mm/pgtable.c | 10 ++-
   arch/powerpc/platforms/Kconfig.cputype| 20 +-
   arch/powerpc/platforms/cell/Kconfig   |  1 +
   arch/powerpc/platforms/maple/Kconfig  |  1 +
   arch/powerpc/platforms/microwatt/Kconfig  |  2 +-
   arch/powerpc/platforms/pasemi/Kconfig |  1 +
   arch/powerpc/platforms/powermac/Kconfig   |  1 +
   arch/powerpc/platforms/powernv/Kconfig|  2 +-
   arch/powerpc/platforms/powernv/idle.c |  2 +
   arch/powerpc/platforms/powernv/setup.c|  2 +
   arch/powerpc/platforms/pseries/lpar.c | 68 ++-
   arch/powerpc/platforms/pseries/lparcfg.c  |  2 +-
   arch/powerpc/platforms/pseries/mobility.c |  6 ++
   arch/powerpc/platforms/pseries/ras.c  |  4 ++
   arch/powerpc/platforms/pseries/reconfig.c |  2 +
   arch/powerpc/platforms/pseries/setup.c|  6 +-
   arch/powerpc/xmon/xmon.c  |  8 ++-
   47 files changed, 310 insertions(+), 111 deletions(-)
   rename arch/powerpc/mm/book3s64/{hash_hugetlbpage.c => hugetlbpage.c} (95%)


Whaou ! Huge patch.

Several places you should be able to use IS_ENABLED() or simply radix_enabled() 
instead of #ifdefs
and rely on GCC to opt out stuff when radix_enabled() folds into 'true'.


A lot of it couldn't be done because of data structures but I'm sure I
missed a lot. I will go over it again.


I may do more detailed comments later when I have time.


Very much appreciated, but let me send out another version before you
get the fine toothed comb out so I don't waste too much of your time.


One thing that would probably help reduce the size of the patch and help focus on the real changes 
would be to put pure code moves in a previous patch I think.



If there are no objections to the idea from a high level.


I think the idea is good, I always wondered why we kept HASH and RADIX at the 
same time.

I did similar thing on book3s/32 when I separated 603 and 604+ so that you could build one or the 
other or both.


Christophe


Re: [RFC PATCH 4/6] powerpc/64s: Make hash MMU code build configurable

2021-08-30 Thread Nicholas Piggin
Excerpts from Christophe Leroy's message of August 28, 2021 7:59 pm:
> 
> 
> Le 27/08/2021 à 18:34, Nicholas Piggin a écrit :
>> Introduce a new option CONFIG_PPC_64S_HASH_MMU which allows the 64s hash
>> MMU code to be compiled out if radix is selected and the minimum
>> supported CPU type is POWER9 or higher, and KVM is not selected.
>> 
>> This saves 128kB kernel image size (90kB text) on powernv_defconfig
>> minus KVM, 350kB on pseries_defconfig minus KVM, 40kB on a tiny config.
>> 
>> Signed-off-by: Nicholas Piggin 
>> ---
>>   arch/powerpc/Kconfig  |  1 +
>>   arch/powerpc/include/asm/book3s/64/mmu.h  | 22 +-
>>   .../include/asm/book3s/64/tlbflush-hash.h |  7 ++
>>   arch/powerpc/include/asm/book3s/pgtable.h |  4 ++
>>   arch/powerpc/include/asm/mmu.h| 38 +--
>>   arch/powerpc/include/asm/mmu_context.h|  2 +
>>   arch/powerpc/include/asm/paca.h   |  8 +++
>>   arch/powerpc/kernel/asm-offsets.c |  2 +
>>   arch/powerpc/kernel/dt_cpu_ftrs.c | 10 ++-
>>   arch/powerpc/kernel/entry_64.S|  4 +-
>>   arch/powerpc/kernel/exceptions-64s.S  | 16 +
>>   arch/powerpc/kernel/mce.c |  2 +-
>>   arch/powerpc/kernel/mce_power.c   | 10 ++-
>>   arch/powerpc/kernel/paca.c| 18 ++---
>>   arch/powerpc/kernel/process.c | 13 ++--
>>   arch/powerpc/kernel/prom.c|  2 +
>>   arch/powerpc/kernel/setup_64.c|  4 ++
>>   arch/powerpc/kexec/core_64.c  |  4 +-
>>   arch/powerpc/kexec/ranges.c   |  4 ++
>>   arch/powerpc/kvm/Kconfig  |  1 +
>>   arch/powerpc/mm/book3s64/Makefile | 17 +++--
>>   arch/powerpc/mm/book3s64/hash_pgtable.c   |  1 -
>>   arch/powerpc/mm/book3s64/hash_utils.c | 10 ---
>>   .../{hash_hugetlbpage.c => hugetlbpage.c} |  6 ++
>>   arch/powerpc/mm/book3s64/mmu_context.c| 16 +
>>   arch/powerpc/mm/book3s64/pgtable.c| 22 +-
>>   arch/powerpc/mm/book3s64/radix_pgtable.c  |  4 ++
>>   arch/powerpc/mm/book3s64/slb.c| 16 -
>>   arch/powerpc/mm/copro_fault.c |  2 +
>>   arch/powerpc/mm/fault.c   | 17 +
>>   arch/powerpc/mm/pgtable.c | 10 ++-
>>   arch/powerpc/platforms/Kconfig.cputype| 20 +-
>>   arch/powerpc/platforms/cell/Kconfig   |  1 +
>>   arch/powerpc/platforms/maple/Kconfig  |  1 +
>>   arch/powerpc/platforms/microwatt/Kconfig  |  2 +-
>>   arch/powerpc/platforms/pasemi/Kconfig |  1 +
>>   arch/powerpc/platforms/powermac/Kconfig   |  1 +
>>   arch/powerpc/platforms/powernv/Kconfig|  2 +-
>>   arch/powerpc/platforms/powernv/idle.c |  2 +
>>   arch/powerpc/platforms/powernv/setup.c|  2 +
>>   arch/powerpc/platforms/pseries/lpar.c | 68 ++-
>>   arch/powerpc/platforms/pseries/lparcfg.c  |  2 +-
>>   arch/powerpc/platforms/pseries/mobility.c |  6 ++
>>   arch/powerpc/platforms/pseries/ras.c  |  4 ++
>>   arch/powerpc/platforms/pseries/reconfig.c |  2 +
>>   arch/powerpc/platforms/pseries/setup.c|  6 +-
>>   arch/powerpc/xmon/xmon.c  |  8 ++-
>>   47 files changed, 310 insertions(+), 111 deletions(-)
>>   rename arch/powerpc/mm/book3s64/{hash_hugetlbpage.c => hugetlbpage.c} (95%)
> 
> Whaou ! Huge patch.
> 
> Several places you should be able to use IS_ENABLED() or simply 
> radix_enabled() instead of #ifdefs 
> and rely on GCC to opt out stuff when radix_enabled() folds into 'true'.

A lot of it couldn't be done because of data structures but I'm sure I 
missed a lot. I will go over it again.

> I may do more detailed comments later when I have time.

Very much appreciated, but let me send out another version before you
get the fine toothed comb out so I don't waste too much of your time.
If there are no objections to the idea from a high level.

Thanks,
Nick


Re: [RFC PATCH 4/6] powerpc/64s: Make hash MMU code build configurable

2021-08-30 Thread Nicholas Piggin
Excerpts from Christophe Leroy's message of August 28, 2021 7:34 pm:
> 
> 
> Le 27/08/2021 à 18:34, Nicholas Piggin a écrit :
>> Introduce a new option CONFIG_PPC_64S_HASH_MMU which allows the 64s hash
>> MMU code to be compiled out if radix is selected and the minimum
>> supported CPU type is POWER9 or higher, and KVM is not selected.
>> 
>> This saves 128kB kernel image size (90kB text) on powernv_defconfig
>> minus KVM, 350kB on pseries_defconfig minus KVM, 40kB on a tiny config.
>> 
>> Signed-off-by: Nicholas Piggin 
>> ---
> 
> ...
> 
>> @@ -324,6 +330,7 @@ static inline void assert_pte_locked(struct mm_struct 
>> *mm, unsigned long addr)
>>   }
>>   #endif /* !CONFIG_DEBUG_VM */
>>   
>> +#if defined(CONFIG_PPC_RADIX_MMU) && defined(CONFIG_PPC_64S_HASH_MMU)
>>   static inline bool radix_enabled(void)
>>   {
>>  return mmu_has_feature(MMU_FTR_TYPE_RADIX);
>> @@ -333,6 +340,27 @@ static inline bool early_radix_enabled(void)
>>   {
>>  return early_mmu_has_feature(MMU_FTR_TYPE_RADIX);
>>   }
>> +#elif defined(CONFIG_PPC_64S_HASH_MMU)
>> +static inline bool radix_enabled(void)
>> +{
>> +return false;
>> +}
>> +
>> +static inline bool early_radix_enabled(void)
>> +{
>> +return false;
>> +}
>> +#else
>> +static inline bool radix_enabled(void)
>> +{
>> +return true;
>> +}
>> +
>> +static inline bool early_radix_enabled(void)
>> +{
>> +return true;
>> +}
>> +#endif
> 
> You don't need something that complex. You don't need to change that at all 
> indeed, just have to 
> ensure that when CONFIG_PPC_64S_HASH_MMU is not selected you have 
> MMU_FTR_TYPE_RADIX included in 
> MMU_FTRS_ALWAYS and voila.

Yeah I had that as a later patch that fixes up the MMU ftrs for 64s 
which does that, I think was required before some of your patches were 
upstreamed.

But looks like it is now trivial so I should just pull that in here.

Thanks,
Nick


Re: [RFC PATCH 4/6] powerpc/64s: Make hash MMU code build configurable

2021-08-28 Thread Christophe Leroy




Le 27/08/2021 à 18:34, Nicholas Piggin a écrit :

Introduce a new option CONFIG_PPC_64S_HASH_MMU which allows the 64s hash
MMU code to be compiled out if radix is selected and the minimum
supported CPU type is POWER9 or higher, and KVM is not selected.

This saves 128kB kernel image size (90kB text) on powernv_defconfig
minus KVM, 350kB on pseries_defconfig minus KVM, 40kB on a tiny config.

Signed-off-by: Nicholas Piggin 
---
  arch/powerpc/Kconfig  |  1 +
  arch/powerpc/include/asm/book3s/64/mmu.h  | 22 +-
  .../include/asm/book3s/64/tlbflush-hash.h |  7 ++
  arch/powerpc/include/asm/book3s/pgtable.h |  4 ++
  arch/powerpc/include/asm/mmu.h| 38 +--
  arch/powerpc/include/asm/mmu_context.h|  2 +
  arch/powerpc/include/asm/paca.h   |  8 +++
  arch/powerpc/kernel/asm-offsets.c |  2 +
  arch/powerpc/kernel/dt_cpu_ftrs.c | 10 ++-
  arch/powerpc/kernel/entry_64.S|  4 +-
  arch/powerpc/kernel/exceptions-64s.S  | 16 +
  arch/powerpc/kernel/mce.c |  2 +-
  arch/powerpc/kernel/mce_power.c   | 10 ++-
  arch/powerpc/kernel/paca.c| 18 ++---
  arch/powerpc/kernel/process.c | 13 ++--
  arch/powerpc/kernel/prom.c|  2 +
  arch/powerpc/kernel/setup_64.c|  4 ++
  arch/powerpc/kexec/core_64.c  |  4 +-
  arch/powerpc/kexec/ranges.c   |  4 ++
  arch/powerpc/kvm/Kconfig  |  1 +
  arch/powerpc/mm/book3s64/Makefile | 17 +++--
  arch/powerpc/mm/book3s64/hash_pgtable.c   |  1 -
  arch/powerpc/mm/book3s64/hash_utils.c | 10 ---
  .../{hash_hugetlbpage.c => hugetlbpage.c} |  6 ++
  arch/powerpc/mm/book3s64/mmu_context.c| 16 +
  arch/powerpc/mm/book3s64/pgtable.c| 22 +-
  arch/powerpc/mm/book3s64/radix_pgtable.c  |  4 ++
  arch/powerpc/mm/book3s64/slb.c| 16 -
  arch/powerpc/mm/copro_fault.c |  2 +
  arch/powerpc/mm/fault.c   | 17 +
  arch/powerpc/mm/pgtable.c | 10 ++-
  arch/powerpc/platforms/Kconfig.cputype| 20 +-
  arch/powerpc/platforms/cell/Kconfig   |  1 +
  arch/powerpc/platforms/maple/Kconfig  |  1 +
  arch/powerpc/platforms/microwatt/Kconfig  |  2 +-
  arch/powerpc/platforms/pasemi/Kconfig |  1 +
  arch/powerpc/platforms/powermac/Kconfig   |  1 +
  arch/powerpc/platforms/powernv/Kconfig|  2 +-
  arch/powerpc/platforms/powernv/idle.c |  2 +
  arch/powerpc/platforms/powernv/setup.c|  2 +
  arch/powerpc/platforms/pseries/lpar.c | 68 ++-
  arch/powerpc/platforms/pseries/lparcfg.c  |  2 +-
  arch/powerpc/platforms/pseries/mobility.c |  6 ++
  arch/powerpc/platforms/pseries/ras.c  |  4 ++
  arch/powerpc/platforms/pseries/reconfig.c |  2 +
  arch/powerpc/platforms/pseries/setup.c|  6 +-
  arch/powerpc/xmon/xmon.c  |  8 ++-
  47 files changed, 310 insertions(+), 111 deletions(-)
  rename arch/powerpc/mm/book3s64/{hash_hugetlbpage.c => hugetlbpage.c} (95%)


Whaou ! Huge patch.

Several places you should be able to use IS_ENABLED() or simply radix_enabled() instead of #ifdefs 
and rely on GCC to opt out stuff when radix_enabled() folds into 'true'.


I may do more detailed comments later when I have time.

Christophe


Re: [RFC PATCH 4/6] powerpc/64s: Make hash MMU code build configurable

2021-08-28 Thread Christophe Leroy




Le 27/08/2021 à 18:34, Nicholas Piggin a écrit :

Introduce a new option CONFIG_PPC_64S_HASH_MMU which allows the 64s hash
MMU code to be compiled out if radix is selected and the minimum
supported CPU type is POWER9 or higher, and KVM is not selected.

This saves 128kB kernel image size (90kB text) on powernv_defconfig
minus KVM, 350kB on pseries_defconfig minus KVM, 40kB on a tiny config.

Signed-off-by: Nicholas Piggin 
---


...


@@ -324,6 +330,7 @@ static inline void assert_pte_locked(struct mm_struct *mm, 
unsigned long addr)
  }
  #endif /* !CONFIG_DEBUG_VM */
  
+#if defined(CONFIG_PPC_RADIX_MMU) && defined(CONFIG_PPC_64S_HASH_MMU)

  static inline bool radix_enabled(void)
  {
return mmu_has_feature(MMU_FTR_TYPE_RADIX);
@@ -333,6 +340,27 @@ static inline bool early_radix_enabled(void)
  {
return early_mmu_has_feature(MMU_FTR_TYPE_RADIX);
  }
+#elif defined(CONFIG_PPC_64S_HASH_MMU)
+static inline bool radix_enabled(void)
+{
+   return false;
+}
+
+static inline bool early_radix_enabled(void)
+{
+   return false;
+}
+#else
+static inline bool radix_enabled(void)
+{
+   return true;
+}
+
+static inline bool early_radix_enabled(void)
+{
+   return true;
+}
+#endif


You don't need something that complex. You don't need to change that at all indeed, just have to 
ensure that when CONFIG_PPC_64S_HASH_MMU is not selected you have MMU_FTR_TYPE_RADIX included in 
MMU_FTRS_ALWAYS and voila.


  
  #ifdef CONFIG_STRICT_KERNEL_RWX

  static inline bool strict_kernel_rwx_enabled(void)


[RFC PATCH 4/6] powerpc/64s: Make hash MMU code build configurable

2021-08-27 Thread Nicholas Piggin
Introduce a new option CONFIG_PPC_64S_HASH_MMU which allows the 64s hash
MMU code to be compiled out if radix is selected and the minimum
supported CPU type is POWER9 or higher, and KVM is not selected.

This saves 128kB kernel image size (90kB text) on powernv_defconfig
minus KVM, 350kB on pseries_defconfig minus KVM, 40kB on a tiny config.

Signed-off-by: Nicholas Piggin 
---
 arch/powerpc/Kconfig  |  1 +
 arch/powerpc/include/asm/book3s/64/mmu.h  | 22 +-
 .../include/asm/book3s/64/tlbflush-hash.h |  7 ++
 arch/powerpc/include/asm/book3s/pgtable.h |  4 ++
 arch/powerpc/include/asm/mmu.h| 38 +--
 arch/powerpc/include/asm/mmu_context.h|  2 +
 arch/powerpc/include/asm/paca.h   |  8 +++
 arch/powerpc/kernel/asm-offsets.c |  2 +
 arch/powerpc/kernel/dt_cpu_ftrs.c | 10 ++-
 arch/powerpc/kernel/entry_64.S|  4 +-
 arch/powerpc/kernel/exceptions-64s.S  | 16 +
 arch/powerpc/kernel/mce.c |  2 +-
 arch/powerpc/kernel/mce_power.c   | 10 ++-
 arch/powerpc/kernel/paca.c| 18 ++---
 arch/powerpc/kernel/process.c | 13 ++--
 arch/powerpc/kernel/prom.c|  2 +
 arch/powerpc/kernel/setup_64.c|  4 ++
 arch/powerpc/kexec/core_64.c  |  4 +-
 arch/powerpc/kexec/ranges.c   |  4 ++
 arch/powerpc/kvm/Kconfig  |  1 +
 arch/powerpc/mm/book3s64/Makefile | 17 +++--
 arch/powerpc/mm/book3s64/hash_pgtable.c   |  1 -
 arch/powerpc/mm/book3s64/hash_utils.c | 10 ---
 .../{hash_hugetlbpage.c => hugetlbpage.c} |  6 ++
 arch/powerpc/mm/book3s64/mmu_context.c| 16 +
 arch/powerpc/mm/book3s64/pgtable.c| 22 +-
 arch/powerpc/mm/book3s64/radix_pgtable.c  |  4 ++
 arch/powerpc/mm/book3s64/slb.c| 16 -
 arch/powerpc/mm/copro_fault.c |  2 +
 arch/powerpc/mm/fault.c   | 17 +
 arch/powerpc/mm/pgtable.c | 10 ++-
 arch/powerpc/platforms/Kconfig.cputype| 20 +-
 arch/powerpc/platforms/cell/Kconfig   |  1 +
 arch/powerpc/platforms/maple/Kconfig  |  1 +
 arch/powerpc/platforms/microwatt/Kconfig  |  2 +-
 arch/powerpc/platforms/pasemi/Kconfig |  1 +
 arch/powerpc/platforms/powermac/Kconfig   |  1 +
 arch/powerpc/platforms/powernv/Kconfig|  2 +-
 arch/powerpc/platforms/powernv/idle.c |  2 +
 arch/powerpc/platforms/powernv/setup.c|  2 +
 arch/powerpc/platforms/pseries/lpar.c | 68 ++-
 arch/powerpc/platforms/pseries/lparcfg.c  |  2 +-
 arch/powerpc/platforms/pseries/mobility.c |  6 ++
 arch/powerpc/platforms/pseries/ras.c  |  4 ++
 arch/powerpc/platforms/pseries/reconfig.c |  2 +
 arch/powerpc/platforms/pseries/setup.c|  6 +-
 arch/powerpc/xmon/xmon.c  |  8 ++-
 47 files changed, 310 insertions(+), 111 deletions(-)
 rename arch/powerpc/mm/book3s64/{hash_hugetlbpage.c => hugetlbpage.c} (95%)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index d01e3401581d..db4e0efd229b 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -940,6 +940,7 @@ config PPC_MEM_KEYS
prompt "PowerPC Memory Protection Keys"
def_bool y
depends on PPC_BOOK3S_64
+   depends on PPC_64S_HASH_MMU
select ARCH_USES_HIGH_VMA_FLAGS
select ARCH_HAS_PKEYS
help
diff --git a/arch/powerpc/include/asm/book3s/64/mmu.h 
b/arch/powerpc/include/asm/book3s/64/mmu.h
index c02f42d1031e..857dc88b0043 100644
--- a/arch/powerpc/include/asm/book3s/64/mmu.h
+++ b/arch/powerpc/include/asm/book3s/64/mmu.h
@@ -98,7 +98,9 @@ typedef struct {
 * from EA and new context ids to build the new VAs.
 */
mm_context_id_t id;
+#ifdef CONFIG_PPC_64S_HASH_MMU
mm_context_id_t extended_id[TASK_SIZE_USER64/TASK_CONTEXT_SIZE];
+#endif
};
 
/* Number of bits in the mm_cpumask */
@@ -110,7 +112,9 @@ typedef struct {
/* Number of user space windows opened in process mm_context */
atomic_t vas_windows;
 
+#ifdef CONFIG_PPC_64S_HASH_MMU
struct hash_mm_context *hash_context;
+#endif
 
void __user *vdso;
/*
@@ -133,6 +137,7 @@ typedef struct {
 #endif
 } mm_context_t;
 
+#ifdef CONFIG_PPC_64S_HASH_MMU
 static inline u16 mm_ctx_user_psize(mm_context_t *ctx)
 {
return ctx->hash_context->user_psize;
@@ -187,11 +192,22 @@ static inline struct subpage_prot_table 
*mm_ctx_subpage_prot(mm_context_t *ctx)
 }
 #endif
 
+#endif
+
 /*
  * The current system page and segment sizes
  */
-extern int mmu_linear_psize;
+#if defined(CONFIG_PPC_RADIX_MMU) && !defined(CONFIG_PPC_64S_HASH_MMU)
+#ifdef CONFIG_PPC_64K_PAGES
+#define mmu_virtual_psize MMU_PAGE_64K
+#else
+#define mmu_virtual_psize MMU_PAGE_4K