Skip to content

Enable huge-vmalloc permission change

Dev Jain linux-arm-kernel linux-mm lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest3 patches 25 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/3mm: Allow pagewalk without locksinclude/linux/pagewalk.h mm/pagewalk.c+10 -46 replies
2/3arm64: pageattr: Use walk_page_range_novma() to change memory permissionsarch/arm64/mm/pageattr.c+64 -59 replies
3/3mm/pagewalk: Add pre/post_pte_table callback for lazy MMU on arm64arch/arm64/mm/pageattr.c include/linux/pagewalk.h mm/pagewalk.c+20 -03 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH 0/3] Enable huge-vmalloc permission change

This series paves the path to enable huge mappings in vmalloc space by default on arm64. For this we must ensure that we can handle any permission games on vmalloc space. Currently, __change_memory_common() uses apply_to_page_range() which does not support changing permissions for leaf mappings. We attempt to move away from this by using walk_page_range_novma(), similar to what riscv does right now; however, it is the responsibility of the caller to ensure that we do not pass a range, or split the range covering a partial leaf mapping.

This series is tied with Yang Shi's attempt [1] at using huge mappings in the linear mapping in case the system supports BBML2, in which case we will be able to split the linear mapping if needed without break-before-make. Thus, Yang's series, IIUC, will be one such user of my series; suppose we are changing permissions on a range of the linear map backed by PMD-hugepages, then the sequence of operations should look like the following:

split_range(start, (start + HPAGE_PMD_SIZE) & ~HPAGE_PMD_MASK); split_range(end & ~HPAGE_PMD_MASK, end); __change_memory_common(start, end);

However, this series can be used independently of Yang's; since currently permission games are being played only on pte mappings (due to apply_to_page_range not supporting otherwise), this series provides the mechanism for enabling huge mappings for various kernel mappings like linear map and vmalloc.

[1] https://lore.kernel.org/all/[email protected]/

Dev Jain (3):
mm: Allow pagewalk without locks
arm64: pageattr: Use walk_page_range_novma() to change memory
permissions
mm/pagewalk: Add pre/post_pte_table callback for lazy MMU on arm64

 arch/arm64/mm/pageattr.c | 81 +++++++++++++++++++++++++++++++++++++---
 include/linux/pagewalk.h |  4 ++
 mm/pagewalk.c            | 18 +++++++--
 3 files changed, 94 insertions(+), 9 deletions(-)
Signature · 1 line
2.30.2