linux/arch/sparc/include/asm
Anthony Yznaga d0813985a2 sparc64: remove hugetlb_free_pgd_range()
Patch series "drop hugetlb_free_pgd_range()".

For all architectures that support hugetlb except for sparc,
hugetlb_free_pgd_range() just calls free_pgd_range().  It turns out the
sparc implementation is essentially identical to free_pgd_range() and can
be removed.  Remove it and update free_pgtables() to treat hugetlb VMAs
the same as others.


This patch (of 3):

The sparc implementation of hugetlb_free_pgd_range() is identical to
free_pgd_range() with the exception of checking for and skipping possible
leaf entries at the PUD and PMD levels.

These checks are unnecessary because any huge pages have been freed and
their PTEs cleared by the time page tables needed to map them are freed. 
While some huge page sizes do populate the page table with multiple PTEs,
they are correctly cleared by huge_ptep_get_and_clear().

To verify this, libhugetlbfs tests were run for 64K, 8M, and 256M page
sizes with an instrumented kernel on a qemu guest modified to support the
256M page size.  The same tests were used to verify no regressions after
applying this patch and were also run on x86 for both 2M and 1G page
sizes.

Link: https://lkml.kernel.org/r/20250716012611.10369-1-anthony.yznaga@oracle.com
Link: https://lkml.kernel.org/r/20250716012611.10369-2-anthony.yznaga@oracle.com
Signed-off-by: Anthony Yznaga <anthony.yznaga@oracle.com>
Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Acked-by: Oscar Salvador <osalvador@suse.de>
Cc: Alexander Gordeev <agordeev@linux.ibm.com>
Cc: Alexandre Ghiti <alexghiti@rivosinc.com>
Cc: Andreas Larsson <andreas@gaisler.com>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: David Hildenbrand <david@redhat.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2025-07-24 19:12:31 -07:00
..
adi_64.h
adi.h
apb.h
asm-offsets.h
asm-prototypes.h sparc32: Fix version generation failed warnings 2024-04-22 16:32:41 +02:00
asm.h
asmmacro.h
atomic_32.h locking/atomic: sparc: add preprocessor symbols 2023-06-05 09:57:17 +02:00
atomic_64.h locking/atomic: sparc: add preprocessor symbols 2023-06-05 09:57:17 +02:00
atomic.h
auxio_32.h
auxio_64.h
auxio.h
backoff.h
barrier_32.h
barrier_64.h
barrier.h
bbc.h
bitext.h
bitops_32.h bitops: wrap non-atomic bitops with a transparent macro 2022-06-30 19:52:41 -07:00
bitops_64.h
bitops.h
btext.h
bug.h
cache.h
cacheflush_32.h mm: Introduce flush_cache_vmap_early() 2023-12-14 00:23:17 -08:00
cacheflush_64.h mm: Introduce flush_cache_vmap_early() 2023-12-14 00:23:17 -08:00
cacheflush.h
cachetlb_32.h
cachetype.h Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
chafsr.h
checksum_32.h
checksum_64.h
checksum.h
chmctrl.h
clock.h
clocksource.h
cmpxchg_32.h sparc32: add __cmpxchg_u{8,16}() and teach __cmpxchg() to handle those sizes 2024-04-09 22:06:00 -07:00
cmpxchg_64.h sparc: mark __arch_xchg() as __always_inline 2023-07-13 09:54:32 -07:00
cmpxchg.h
compat_signal.h
compat.h
contregs.h
cpu_type.h
cpudata_32.h
cpudata_64.h
cpudata.h
current.h
dcr.h
dcu.h
delay_32.h
delay_64.h
delay.h
device.h
dma-mapping.h dma-mapping: no need to pass a bus_type into get_arch_dma_ops() 2023-02-15 12:35:20 +01:00
dma.h PCI: Move isa_dma_bridge_buggy out of asm/dma.h 2022-07-22 17:24:47 -05:00
ebus_dma.h
ecc.h
eeprom.h
elf_32.h
elf_64.h
elf.h
estate.h
extable.h
fbio.h
fhc.h
floppy_32.h sparc: Explicitly include correct DT includes 2023-08-28 13:30:57 -05:00
floppy_64.h sparc64: Fix prototype warnings for floppy_64.h 2024-07-11 15:58:28 +02:00
floppy.h
fpumacro.h
ftrace.h
futex_32.h
futex_64.h
futex.h
hardirq_32.h
hardirq_64.h
hardirq.h
head_32.h
head_64.h
head.h
hibernate.h
highmem.h
hugetlb.h sparc64: remove hugetlb_free_pgd_range() 2025-07-24 19:12:31 -07:00
hvtramp.h sparc: Replace one-element array with flexible array member 2024-11-16 09:54:12 +01:00
hw_irq.h
hypervisor.h sparc: Fix typos 2024-02-16 16:50:25 +01:00
idprom.h
intr_queue.h
io_32.h
io_64.h asm/io: remove unnecessary xlate_dev_mem_ptr() and unxlate_dev_mem_ptr() 2023-11-23 10:37:40 +01:00
io-unit.h
io.h sparc: Fix the generic IO helpers 2022-09-08 16:49:14 +02:00
ioctls.h
iommu_32.h
iommu_64.h
iommu-common.h
iommu.h
irq_32.h init: consolidate prototypes in linux/init.h 2023-06-09 17:44:16 -07:00
irq_64.h nmi_backtrace: allow excluding an arbitrary CPU 2023-08-18 10:19:00 -07:00
irq.h
irqflags_32.h
irqflags_64.h
irqflags.h
jump_label.h work around gcc bugs with 'asm goto' with outputs 2024-02-09 15:57:48 -08:00
Kbuild asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
kdebug_32.h
kdebug_64.h
kdebug.h
kgdb.h
kprobes.h kprobes: unify kprobes_exceptions_nofify() prototypes 2023-11-10 19:59:05 +09:00
ldc.h sparc: Fix typos 2024-02-16 16:50:25 +01:00
leon_amba.h
leon_pci.h
leon.h
lsu.h
machines.h
mbus.h
mc146818rtc_32.h
mc146818rtc_64.h
mc146818rtc.h
mdesc.h
memctrl.h
mman.h mm: update architecture and driver code to use vm_flags_t 2025-07-09 22:42:14 -07:00
mmu_32.h
mmu_64.h
mmu_context_32.h
mmu_context_64.h sparc: Fix typos 2024-02-16 16:50:25 +01:00
mmu_context.h
mmu.h
mmzone.h arch, mm: move definition of node_data to generic code 2024-09-03 21:15:28 -07:00
mxcc.h
nmi.h watchdog/hardlockup: declare arch_touch_nmi_watchdog() only in linux/nmi.h 2023-06-19 16:25:29 -07:00
ns87303.h
obio.h
opcodes.h crypto: sparc - move opcodes.h into asm directory 2025-05-05 18:20:43 +08:00
openprom.h
oplib_32.h
oplib_64.h sparc64: Fix incorrect function signature and add prototype for prom_cif_init 2024-07-11 15:58:28 +02:00
oplib.h
page_32.h vdso: Introduce vdso/page.h 2024-10-16 00:13:04 +02:00
page_64.h vdso: Introduce vdso/page.h 2024-10-16 00:13:04 +02:00
page.h asm-generic: provide generic page_to_phys and phys_to_page implementations 2024-10-28 21:44:28 +00:00
parport_64.h Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
parport.h sparc32: Fix parport build with sparc32 2024-03-08 21:21:00 +01:00
pbm.h
pci.h Merge branch 'pci/header-cleanup-immutable' 2022-08-04 11:46:53 -05:00
pcic.h
pcr.h
percpu_32.h
percpu_64.h
percpu.h
perf_event.h
pgalloc_32.h
pgalloc_64.h sparc: add pte_free_defer() for pte_t *pgtable_t 2023-08-18 10:12:24 -07:00
pgalloc.h
pgtable_32.h mm: pgtable: fix pte_swp_exclusive 2025-06-11 14:52:08 -07:00
pgtable_64.h mm: pgtable: fix pte_swp_exclusive 2025-06-11 14:52:08 -07:00
pgtable.h
pgtsrmmu.h sparc/mm: support __HAVE_ARCH_PTE_SWP_EXCLUSIVE on 32bit 2023-02-02 22:33:10 -08:00
pil.h
processor_32.h kernel: exit: cleanup release_thread() 2022-09-11 21:55:07 -07:00
processor_64.h locking: remove spin_lock_prefetch 2023-08-12 09:18:47 -07:00
processor.h
prom.h of: Make devtree_lock declaration private 2023-04-10 18:32:31 -05:00
psr.h
ptrace.h
qrwlock.h
qspinlock.h
ross.h
sbi.h
scratchpad.h
seccomp.h
sections.h
setup.h
sfafsr.h
sfp-machine_32.h
sfp-machine_64.h
sfp-machine.h
shmparam_32.h
shmparam_64.h
shmparam.h
sigcontext.h
signal.h
smp_32.h sparc: Unbreak the build 2022-09-29 19:21:10 -07:00
smp_64.h sparc64: Fix number of online CPUs 2024-04-22 15:33:07 +02:00
smp.h
sparsemem.h
spinlock_32.h
spinlock_64.h
spinlock_types.h
spinlock.h
spitfire.h
stacktrace.h
starfire.h
string_32.h
string_64.h
string.h
sunbpp.h
swift.h
switch_to_32.h
switch_to_64.h sparc: Fix typos 2024-02-16 16:50:25 +01:00
switch_to.h
syscall.h syscall.h: introduce syscall_set_nr() 2025-05-11 17:48:15 -07:00
syscalls.h
termbits.h
thread_info_32.h
thread_info_64.h
thread_info.h
timer_32.h
timer_64.h init: consolidate prototypes in linux/init.h 2023-06-09 17:44:16 -07:00
timer.h
timex_32.h
timex_64.h
timex.h
tlb_32.h
tlb_64.h mm: pgtable: introduce generic __tlb_remove_table() 2025-01-25 20:22:23 -08:00
tlb.h
tlbflush_32.h
tlbflush_64.h
tlbflush.h
topology_32.h
topology_64.h
topology.h
trap_block.h
traps.h
tsb.h
tsunami.h
ttable.h
turbosparc.h
uaccess_32.h sparc32: Fix truncated relocation errors when linking large kernels 2024-07-11 15:58:18 +02:00
uaccess_64.h mm: Introduce untagged_addr_remote() 2023-03-16 13:08:39 -07:00
uaccess.h
unistd.h clone3: drop __ARCH_WANT_SYS_CLONE3 macro 2024-07-10 14:23:38 +02:00
upa.h
uprobes.h
user.h
vaddrs.h
vdso.h
video.h arch: Rename fbdev header and source files 2024-05-03 17:07:50 +02:00
viking.h
vio.h driver core: have match() callback in struct bus_type take a const * 2024-07-03 15:16:54 +02:00
visasm.h
vmalloc.h
vvar.h
winmacro.h
xor_32.h
xor_64.h
xor.h