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.h
adi_64.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.h
atomic_32.h
atomic_64.h
auxio.h
auxio_32.h
auxio_64.h
backoff.h
barrier.h
barrier_32.h
barrier_64.h
bbc.h
bitext.h
bitops.h
bitops_32.h
bitops_64.h
btext.h
bug.h
cache.h
cacheflush.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
cachetlb_32.h
cachetype.h Introduce cpu_dcache_is_aliasing() across all architectures 2024-02-22 15:27:19 -08:00
chafsr.h
checksum.h
checksum_32.h
checksum_64.h
chmctrl.h
clock.h
clocksource.h
cmpxchg.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
compat.h
compat_signal.h
contregs.h
cpu_type.h
cpudata.h
cpudata_32.h
cpudata_64.h
current.h
dcr.h
dcu.h
delay.h
delay_32.h
delay_64.h
device.h
dma-mapping.h
dma.h
ebus_dma.h
ecc.h
eeprom.h
elf.h
elf_32.h
elf_64.h
estate.h
extable.h
fbio.h
fhc.h
floppy.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
fpumacro.h
ftrace.h
futex.h
futex_32.h
futex_64.h
hardirq.h
hardirq_32.h
hardirq_64.h
head.h
head_32.h
head_64.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-unit.h
io.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
ioctls.h
iommu-common.h
iommu.h
iommu_32.h
iommu_64.h
irq.h
irq_32.h
irq_64.h
irqflags.h
irqflags_32.h
irqflags_64.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.h
kdebug_32.h
kdebug_64.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.h
leon_amba.h
leon_pci.h
lsu.h
machines.h
mbus.h
mc146818rtc.h
mc146818rtc_32.h
mc146818rtc_64.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.h
mmu_32.h
mmu_64.h
mmu_context.h
mmu_context_32.h
mmu_context_64.h sparc: Fix typos 2024-02-16 16:50:25 +01:00
mmzone.h arch, mm: move definition of node_data to generic code 2024-09-03 21:15:28 -07:00
mxcc.h
nmi.h
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.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
page.h asm-generic: provide generic page_to_phys and phys_to_page implementations 2024-10-28 21:44:28 +00:00
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
parport.h sparc32: Fix parport build with sparc32 2024-03-08 21:21:00 +01:00
parport_64.h Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
pbm.h
pci.h
pcic.h
pcr.h
percpu.h
percpu_32.h
percpu_64.h
perf_event.h
pgalloc.h
pgalloc_32.h
pgalloc_64.h
pgtable.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
pgtsrmmu.h
pil.h
processor.h
processor_32.h
processor_64.h
prom.h
psr.h
ptrace.h
qrwlock.h
qspinlock.h
ross.h
sbi.h
scratchpad.h
seccomp.h
sections.h
setup.h
sfafsr.h
sfp-machine.h
sfp-machine_32.h
sfp-machine_64.h
shmparam.h
shmparam_32.h
shmparam_64.h
sigcontext.h
signal.h
smp.h
smp_32.h
smp_64.h sparc64: Fix number of online CPUs 2024-04-22 15:33:07 +02:00
sparsemem.h
spinlock.h
spinlock_32.h
spinlock_64.h
spinlock_types.h
spitfire.h
stacktrace.h
starfire.h
string.h
string_32.h
string_64.h
sunbpp.h
swift.h
switch_to.h
switch_to_32.h
switch_to_64.h sparc: Fix typos 2024-02-16 16:50:25 +01:00
syscall.h syscall.h: introduce syscall_set_nr() 2025-05-11 17:48:15 -07:00
syscalls.h
termbits.h
thread_info.h
thread_info_32.h
thread_info_64.h
timer.h
timer_32.h
timer_64.h
timex.h
timex_32.h
timex_64.h
tlb.h
tlb_32.h
tlb_64.h mm: pgtable: introduce generic __tlb_remove_table() 2025-01-25 20:22:23 -08:00
tlbflush.h
tlbflush_32.h
tlbflush_64.h
topology.h
topology_32.h
topology_64.h
trap_block.h
traps.h
tsb.h
tsunami.h
ttable.h
turbosparc.h
uaccess.h
uaccess_32.h sparc32: Fix truncated relocation errors when linking large kernels 2024-07-11 15:58:18 +02:00
uaccess_64.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.h
xor_32.h
xor_64.h