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 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 482 2019-06-19 17:09:52 +02:00
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 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
auxio.h
auxio_32.h
auxio_64.h
backoff.h SPARC: backoff.h: delete a duplicated word 2020-07-21 18:22:02 -07:00
barrier.h
barrier_32.h
barrier_64.h
bbc.h
bitext.h
bitops.h
bitops_32.h bitops: wrap non-atomic bitops with a transparent macro 2022-06-30 19:52:41 -07:00
bitops_64.h include: move find.h from asm_generic to linux 2022-01-15 08:47:31 -08:00
btext.h
bug.h
cache.h treewide: Convert macro and uses of __section(foo) to __section("foo") 2020-10-25 14:51:49 -07:00
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 sparc64: propagate the calling convention changes down to __csum_partial_copy_...() 2020-08-20 15:45:21 -04:00
checksum_32.h sparc64: propagate the calling convention changes down to __csum_partial_copy_...() 2020-08-20 15:45:21 -04:00
checksum_64.h sparc64: propagate the calling convention changes down to __csum_partial_copy_...() 2020-08-20 15:45:21 -04:00
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 sparc: mark __arch_xchg() as __always_inline 2023-07-13 09:54:32 -07:00
compat.h asm-generic: compat: Cleanup duplicate definitions 2022-04-26 13:35:54 -07:00
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 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 428 2019-06-05 17:37:16 +02:00
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.h
elf_32.h
elf_64.h sparc32: switch to generic extables 2021-01-03 20:05:18 -05:00
estate.h
extable.h sparc32: switch to generic extables 2021-01-03 20:05:18 -05:00
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 tracing: Fix various typos in comments 2021-03-23 14:08:18 -04:00
futex.h
futex_32.h
futex_64.h [parisc, s390, sparc64] no need for access_ok() in futex handling 2020-03-27 23:58:52 -04:00
hardirq.h
hardirq_32.h
hardirq_64.h
head.h
head_32.h
head_64.h
hibernate.h
highmem.h sparc/mm/highmem: flush cache and TLB 2021-01-24 10:34:52 -08:00
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 mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
io.h sparc: Fix the generic IO helpers 2022-09-08 16:49:14 +02:00
io_32.h sparc32: Move ioremap/iounmap declaration before asm-generic/io.h include 2020-10-05 09:44:41 +01:00
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 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
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 DMA mapping updates for Linux 4.21 2018-12-28 14:12:21 -08:00
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 sparc: use asm-generic/mmu_context.h for no-op implementations 2020-10-27 16:02:38 +01:00
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 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.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 Merge branch 'pci/header-cleanup-immutable' 2022-08-04 11:46:53 -05:00
pcic.h
pcr.h
percpu.h
percpu_32.h
percpu_64.h sparc64: Fix asm/percpu.h build error 2020-07-10 12:00:01 +02:00
perf_event.h
pgalloc.h
pgalloc_32.h mm/thp: define default pmd_pgtable() 2021-07-01 11:06:03 -07:00
pgalloc_64.h sparc: add pte_free_defer() for pte_t *pgtable_t 2023-08-18 10:12:24 -07:00
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 sparc/mm: support __HAVE_ARCH_PTE_SWP_EXCLUSIVE on 32bit 2023-02-02 22:33:10 -08:00
pil.h
processor.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
prom.h of: Make devtree_lock declaration private 2023-04-10 18:32:31 -05:00
psr.h
ptrace.h ptrace: Remove the unnecessary arguments from arch_ptrace_stop 2021-10-06 11:27:41 -05:00
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 sparc: remove SA_STATIC_ALLOC macro definition 2020-09-14 17:04:49 -07:00
smp.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
sparsemem.h sparc: drop unused MAX_PHYSADDR_BITS 2020-08-12 10:57:57 -07:00
spinlock.h
spinlock_32.h
spinlock_64.h locking/arch: Move qrwlock.h include after qspinlock.h 2021-02-11 07:59:54 -05:00
spinlock_types.h
spitfire.h
stacktrace.h
starfire.h
string.h sparc: revive __HAVE_ARCH_STRLEN for 32bit sparc 2020-03-25 10:19:43 +09:00
string_32.h
string_64.h sparc: revive __HAVE_ARCH_STRLEN for 32bit sparc 2020-03-25 10:19:43 +09:00
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 sparc64: enable HAVE_COPY_THREAD_TLS 2020-06-23 10:49:54 +02:00
termbits.h
thread_info.h
thread_info_32.h sparc: add support for TIF_NOTIFY_SIGNAL 2020-12-12 09:17:38 -07:00
thread_info_64.h sparc64: remove CONFIG_SET_FS support 2022-02-25 09:36:06 +01:00
timer.h
timer_32.h
timer_64.h init: consolidate prototypes in linux/init.h 2023-06-09 17:44:16 -07:00
timex.h
timex_32.h sparc: use fallback for random_get_entropy() instead of zero 2022-05-13 23:59:23 +02:00
timex_64.h
tlb.h
tlb_32.h arch/tlb: Clean up simple architectures 2019-04-03 10:32:54 +02:00
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 sparc64: Fix asm/percpu.h build error 2020-07-10 12:00:01 +02:00
traps.h
tsb.h
tsunami.h
ttable.h
turbosparc.h
uaccess.h uaccess: generalize access_ok() 2022-02-25 09:36:05 +01:00
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
unistd.h clone3: drop __ARCH_WANT_SYS_CLONE3 macro 2024-07-10 14:23:38 +02:00
upa.h
uprobes.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13 2019-05-21 11:28:45 +02:00
user.h
vaddrs.h sparc/mm/highmem: Switch to generic kmap atomic 2020-11-06 23:14:57 +01:00
vdso.h
video.h arch: Rename fbdev header and source files 2024-05-03 17:07:50 +02:00
viking.h sparc32: mm: Restructure sparc32 MMU page-table layout 2020-05-13 15:32:00 -07:00
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 mm/vmalloc: Add empty <asm/vmalloc.h> headers and use them from <linux/vmalloc.h> 2019-12-10 10:12:55 +01:00
vvar.h locking/seqlock, headers: Untangle the spaghetti monster 2020-08-06 16:13:13 +02:00
winmacro.h
xor.h
xor_32.h lib/xor: make xor prototypes more friendly to compiler vectorization 2022-02-11 20:39:39 +11:00
xor_64.h lib/xor: make xor prototypes more friendly to compiler vectorization 2022-02-11 20:39:39 +11:00