[PATCH 0/6] arm64: distinguish HW PTE pointers from SW PTE value pointers

Muhammad Usama Anjum posted 6 patches 1 week, 3 days ago
There is a newer version of this series
arch/arm64/Kconfig                |   1 +
arch/arm64/include/asm/hugetlb.h  |  19 ++---
arch/arm64/include/asm/pgalloc.h  |   2 +-
arch/arm64/include/asm/pgtable.h  | 157 ++++++++++++++++++++------------------
arch/arm64/include/asm/vmalloc.h  |   2 +-
arch/arm64/kernel/efi.c           |   3 +-
arch/arm64/kernel/pi/map_kernel.c |   4 +-
arch/arm64/kernel/pi/map_range.c  |  20 +++--
arch/arm64/kernel/pi/pi.h         |   3 +-
arch/arm64/mm/contpte.c           |  49 ++++++------
arch/arm64/mm/fault.c             |  11 +--
arch/arm64/mm/fixmap.c            |   8 +-
arch/arm64/mm/hugetlbpage.c       |  48 ++++++------
arch/arm64/mm/kasan_init.c        |   4 +-
arch/arm64/mm/mmu.c               |  46 ++++++-----
arch/arm64/mm/pageattr.c          |   4 +-
arch/arm64/mm/trans_pgd.c         |   4 +-
include/linux/pgtable_types.h     |   6 ++
18 files changed, 215 insertions(+), 176 deletions(-)
[PATCH 0/6] arm64: distinguish HW PTE pointers from SW PTE value pointers
Posted by Muhammad Usama Anjum 1 week, 3 days ago
Hi,

The generic series introduces hw_pte_t for HW PTEs, while SW PTE values
use pte_t. This series enables the distinct type on arm64 so the
compiler can distinguish HW PTE pointers (hw_pte_t *) from SW PTE value
pointers (pte_t *).

The conversion updates HW PTE pointers and accessors, including atomic
updates, fixmap, and early page-table construction, before selecting
ARCH_HAS_HW_PTE_T. Higher-level entry types remain out of scope, and
shared helpers retain explicit casts.

The linked generic series is a prerequisite. Its cover contains the
Coccinelle script used for most pointer conversions; the remaining sites
were converted by hand.

Link: https://lore.kernel.org/all/20260903103002.1091859-1-usama.anjum@arm.com/
Signed-off-by: Muhammad Usama Anjum <usama.anjum@arm.com>
---
Muhammad Usama Anjum (6):
      arm64: use hw_pte_t for HW PTE pointers
      arm64: use hw_pte_val for HW PTE atomics
      arm64: convert between HW PTEs and SW PTE values
      arm64: use hw_pte_t for fixmap HW PTEs
      arm64: use HW PTE accessors in early map_range()
      arm64: enable a distinct type for HW PTEs

 arch/arm64/Kconfig                |   1 +
 arch/arm64/include/asm/hugetlb.h  |  19 ++---
 arch/arm64/include/asm/pgalloc.h  |   2 +-
 arch/arm64/include/asm/pgtable.h  | 157 ++++++++++++++++++++------------------
 arch/arm64/include/asm/vmalloc.h  |   2 +-
 arch/arm64/kernel/efi.c           |   3 +-
 arch/arm64/kernel/pi/map_kernel.c |   4 +-
 arch/arm64/kernel/pi/map_range.c  |  20 +++--
 arch/arm64/kernel/pi/pi.h         |   3 +-
 arch/arm64/mm/contpte.c           |  49 ++++++------
 arch/arm64/mm/fault.c             |  11 +--
 arch/arm64/mm/fixmap.c            |   8 +-
 arch/arm64/mm/hugetlbpage.c       |  48 ++++++------
 arch/arm64/mm/kasan_init.c        |   4 +-
 arch/arm64/mm/mmu.c               |  46 ++++++-----
 arch/arm64/mm/pageattr.c          |   4 +-
 arch/arm64/mm/trans_pgd.c         |   4 +-
 include/linux/pgtable_types.h     |   6 ++
 18 files changed, 215 insertions(+), 176 deletions(-)
---
base-commit: ead700ca770c82167af32622cf8b68c9f87c3c7c
change-id: 20260911-pte0_arm-f1b7df7c0b51
prerequisite-message-id: 20260903103002.1091859-1-usama.anjum@arm.com
prerequisite-patch-id: 0114fcc6ab0dbb739b5bb6fc0fe6b1c8f1fa37a1
prerequisite-patch-id: 09fcf65970074620dd3a9cce6850b901beb01db8
prerequisite-patch-id: 9b2fdab97c99effabb85526fa7f141c933b3aa23
prerequisite-patch-id: 1aa309a26d98a1e93a54742705a03567ee93be71
prerequisite-patch-id: ebe32f52c95ad0542982f0b37798d209595e25e1
prerequisite-patch-id: a60d249f52d092524176851b2570d7245bb24434
prerequisite-patch-id: 81ebd1378e25d40a1771b53973abcc4defa87535
prerequisite-patch-id: d982f2b00c5eddb2459f69008a73e4f4ae4d8299

Best regards,
--  
Usama
Re: [PATCH 0/6] arm64: distinguish HW PTE pointers from SW PTE value pointers
Posted by Ryan Roberts 3 days, 23 hours ago
On 14/09/2026 14:51, Muhammad Usama Anjum wrote:
> Hi,
> 
> The generic series introduces hw_pte_t for HW PTEs, while SW PTE values
> use pte_t. This series enables the distinct type on arm64 so the
> compiler can distinguish HW PTE pointers (hw_pte_t *) from SW PTE value
> pointers (pte_t *).
> 
> The conversion updates HW PTE pointers and accessors, including atomic
> updates, fixmap, and early page-table construction, before selecting
> ARCH_HAS_HW_PTE_T. Higher-level entry types remain out of scope, and
> shared helpers retain explicit casts.
> 
> The linked generic series is a prerequisite. Its cover contains the
> Coccinelle script used for most pointer conversions; the remaining sites
> were converted by hand.
> 
> Link: https://lore.kernel.org/all/20260903103002.1091859-1-usama.anjum@arm.com/
> Signed-off-by: Muhammad Usama Anjum <usama.anjum@arm.com>

I've been through this as best I can and provided some minor comments. This all
looks ok over all. But given the number of small changes, it would probably be
wise to go big on testing; what level of testing has been performed? I'd suggest
mm selftests (with all the magic to make all the tests actually run) at minimum
and all the fastpath benchmarks as a stress test.

I think it's quite ugly (and adds a bit to the cognitive load) to have this
intermediate state where only ptes are converted. But I understand the need to
do this incrementally. Hopefully you can follow up with the other levels soon :)

Thanks,
Ryan


> ---
> Muhammad Usama Anjum (6):
>       arm64: use hw_pte_t for HW PTE pointers
>       arm64: use hw_pte_val for HW PTE atomics
>       arm64: convert between HW PTEs and SW PTE values
>       arm64: use hw_pte_t for fixmap HW PTEs
>       arm64: use HW PTE accessors in early map_range()
>       arm64: enable a distinct type for HW PTEs
> 
>  arch/arm64/Kconfig                |   1 +
>  arch/arm64/include/asm/hugetlb.h  |  19 ++---
>  arch/arm64/include/asm/pgalloc.h  |   2 +-
>  arch/arm64/include/asm/pgtable.h  | 157 ++++++++++++++++++++------------------
>  arch/arm64/include/asm/vmalloc.h  |   2 +-
>  arch/arm64/kernel/efi.c           |   3 +-
>  arch/arm64/kernel/pi/map_kernel.c |   4 +-
>  arch/arm64/kernel/pi/map_range.c  |  20 +++--
>  arch/arm64/kernel/pi/pi.h         |   3 +-
>  arch/arm64/mm/contpte.c           |  49 ++++++------
>  arch/arm64/mm/fault.c             |  11 +--
>  arch/arm64/mm/fixmap.c            |   8 +-
>  arch/arm64/mm/hugetlbpage.c       |  48 ++++++------
>  arch/arm64/mm/kasan_init.c        |   4 +-
>  arch/arm64/mm/mmu.c               |  46 ++++++-----
>  arch/arm64/mm/pageattr.c          |   4 +-
>  arch/arm64/mm/trans_pgd.c         |   4 +-
>  include/linux/pgtable_types.h     |   6 ++
>  18 files changed, 215 insertions(+), 176 deletions(-)
> ---
> base-commit: ead700ca770c82167af32622cf8b68c9f87c3c7c
> change-id: 20260911-pte0_arm-f1b7df7c0b51
> prerequisite-message-id: 20260903103002.1091859-1-usama.anjum@arm.com
> prerequisite-patch-id: 0114fcc6ab0dbb739b5bb6fc0fe6b1c8f1fa37a1
> prerequisite-patch-id: 09fcf65970074620dd3a9cce6850b901beb01db8
> prerequisite-patch-id: 9b2fdab97c99effabb85526fa7f141c933b3aa23
> prerequisite-patch-id: 1aa309a26d98a1e93a54742705a03567ee93be71
> prerequisite-patch-id: ebe32f52c95ad0542982f0b37798d209595e25e1
> prerequisite-patch-id: a60d249f52d092524176851b2570d7245bb24434
> prerequisite-patch-id: 81ebd1378e25d40a1771b53973abcc4defa87535
> prerequisite-patch-id: d982f2b00c5eddb2459f69008a73e4f4ae4d8299
> 
> Best regards,
> --  
> Usama
>
Re: [PATCH 0/6] arm64: distinguish HW PTE pointers from SW PTE value pointers
Posted by Muhammad Usama Anjum 3 days, 23 hours ago
On 21/09/2026 10:51 am, Ryan Roberts wrote:
> On 14/09/2026 14:51, Muhammad Usama Anjum wrote:
>> Hi,
>>
>> The generic series introduces hw_pte_t for HW PTEs, while SW PTE values
>> use pte_t. This series enables the distinct type on arm64 so the
>> compiler can distinguish HW PTE pointers (hw_pte_t *) from SW PTE value
>> pointers (pte_t *).
>>
>> The conversion updates HW PTE pointers and accessors, including atomic
>> updates, fixmap, and early page-table construction, before selecting
>> ARCH_HAS_HW_PTE_T. Higher-level entry types remain out of scope, and
>> shared helpers retain explicit casts.
>>
>> The linked generic series is a prerequisite. Its cover contains the
>> Coccinelle script used for most pointer conversions; the remaining sites
>> were converted by hand.
>>
>> Link: https://lore.kernel.org/all/20260903103002.1091859-1-usama.anjum@arm.com/
>> Signed-off-by: Muhammad Usama Anjum <usama.anjum@arm.com>
> 
> I've been through this as best I can and provided some minor comments. This all
> looks ok over all. But given the number of small changes, it would probably be
> wise to go big on testing; what level of testing has been performed? I'd suggest
> mm selftests (with all the magic to make all the tests actually run) at minimum
> and all the fastpath benchmarks as a stress test.

Sorry, it wasn't mentioned in cover letter. But mm selftests were run. I'll run
fastpath benchmarks as well and mention clearly.

> 
> I think it's quite ugly (and adds a bit to the cognitive load) to have this
> intermediate state where only ptes are converted. But I understand the need to
> do this incrementally. Hopefully you can follow up with the other levels soon :)

Yeah, I would have loved to do everything all at once. But it would have 10 times
more complex. I'll proceed to PMD after this series which would have most complex
conversions. Converting other PXX would be straight forward after that.

...

-- 
Thanks,
Usama