linux_dsm_epyc7002/arch/sparc/kernel
Tejun Heo 74d46d6b2d percpu, sparc64: fix sparse possible cpu map handling
percpu code has been assuming num_possible_cpus() == nr_cpu_ids which
is incorrect if cpu_possible_map contains holes.  This causes percpu
code to access beyond allocated memories and vmalloc areas.  On a
sparc64 machine with cpus 0 and 2 (u60), this triggers the following
warning or fails boot.

 WARNING: at /devel/tj/os/work/mm/vmalloc.c:106 vmap_page_range_noflush+0x1f0/0x240()
 Modules linked in:
 Call Trace:
  [00000000004b17d0] vmap_page_range_noflush+0x1f0/0x240
  [00000000004b1840] map_vm_area+0x20/0x60
  [00000000004b1950] __vmalloc_area_node+0xd0/0x160
  [0000000000593434] deflate_init+0x14/0xe0
  [0000000000583b94] __crypto_alloc_tfm+0xd4/0x1e0
  [00000000005844f0] crypto_alloc_base+0x50/0xa0
  [000000000058b898] alg_test_comp+0x18/0x80
  [000000000058dad4] alg_test+0x54/0x180
  [000000000058af00] cryptomgr_test+0x40/0x60
  [0000000000473098] kthread+0x58/0x80
  [000000000042b590] kernel_thread+0x30/0x60
  [0000000000472fd0] kthreadd+0xf0/0x160
 ---[ end trace 429b268a213317ba ]---

This patch fixes generic percpu functions and sparc64
setup_per_cpu_areas() so that they handle sparse cpu_possible_map
properly.

Please note that on x86, cpu_possible_map() doesn't contain holes and
thus num_possible_cpus() == nr_cpu_ids and this patch doesn't cause
any behavior difference.

Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: David S. Miller <davem@davemloft.net>
Cc: Ingo Molnar <mingo@elte.hu>
2009-08-14 13:20:53 +09:00
..
.gitignore
apc.c
asm-offsets.c
audit.c
auxio_32.c
auxio_64.c
central.c
cherrs.S
chmc.c
compat_audit.c
cpu.c
cpumap.c sparc64: fix and optimize irq distribution 2009-06-16 04:56:28 -07:00
cpumap.h sparc64: fix and optimize irq distribution 2009-06-16 04:56:28 -07:00
devices.c
dma.c sparc: remove dma-mapping_{32|64}.h 2009-06-16 04:56:47 -07:00
dma.h
ds.c sparc64: Defer cpu_data() setup until end of per-cpu data initialization. 2009-06-16 04:56:22 -07:00
dtlb_miss.S
dtlb_prot.S
ebus.c
entry.h
entry.S
etrap_32.S
etrap_64.S
fpu_traps.S
ftrace.c sparc64: Add proper dynamic ftrace support. 2009-06-16 04:56:53 -07:00
getsetcc.S
head_32.S sparc: cleanup references to deprecated .text.init* sections. 2009-04-27 19:51:58 -07:00
head_64.S sparc64: Store per-cpu offset in trap_block[] 2009-06-16 04:56:11 -07:00
helpers.S
hvapi.c
hvcalls.S
hvtramp.S
idprom.c
init_task.c mm: consolidate init_mm definition 2009-06-16 19:47:28 -07:00
iommu_common.h
iommu.c sparc: use dma_map_page instead of dma_map_single 2009-06-16 04:56:45 -07:00
ioport.c
irq_32.c cpumask: remove references to struct irqaction's mask field. 2009-03-30 22:05:14 +10:30
irq_64.c sparc64: Don't use alloc_bootmem() in init_IRQ() code paths. 2009-06-25 19:00:47 -07:00
irq.h
itlb_miss.S
ivec.S
kernel.h
kgdb_32.c
kgdb_64.c sparc64: Reschedule KGDB capture to a software interrupt. 2009-03-18 23:51:57 -07:00
kprobes.c
kstack.h
ktlb.S
ldc.c sparc: remove some pointless conditionals before kfree() 2009-04-15 03:04:56 -07:00
led.c proc 2/2: remove struct proc_dir_entry::owner 2009-03-31 01:14:44 +04:00
Makefile sparc: move of_device common code to of_device_common 2009-06-16 04:56:49 -07:00
mdesc.c sparc64: Defer cpu_data() setup until end of per-cpu data initialization. 2009-06-16 04:56:22 -07:00
misctrap.S
module.c module: cleanup FIXME comments about trimming exception table entries. 2009-06-12 21:47:05 +09:30
muldiv.c
nmi.c sparc64: Fix reset hangs on Niagara systems. 2009-03-29 15:40:33 -07:00
of_device_32.c sparc: move of_device common code to of_device_common 2009-06-16 04:56:49 -07:00
of_device_64.c sparc: move of_device common code to of_device_common 2009-06-16 04:56:49 -07:00
of_device_common.c sparc: move of_device common code to of_device_common 2009-06-16 04:56:49 -07:00
of_device_common.h sparc: move of_device common code to of_device_common 2009-06-16 04:56:49 -07:00
pci_common.c sparc64: Fix crash with /proc/iomem 2009-03-18 23:53:16 -07:00
pci_fire.c sparc64: Fix section mismatch warnings in PCI controller drivers. 2009-04-08 03:28:15 -07:00
pci_impl.h
pci_msi.c
pci_psycho.c sparc64: Fix section mismatch warnings in PCI controller drivers. 2009-04-08 03:28:15 -07:00
pci_sabre.c sparc64: Fix section mismatch warnings in PCI controller drivers. 2009-04-08 03:28:15 -07:00
pci_schizo.c
pci_sun4v_asm.S
pci_sun4v.c sparc: use dma_map_page instead of dma_map_single 2009-06-16 04:56:45 -07:00
pci_sun4v.h
pci.c Delete pcibios_select_root 2009-06-17 14:04:42 -07:00
pcic.c
pcr.c
pmc.c
power.c sparc64: Fix section mismatch warnings in power driver. 2009-04-08 03:27:52 -07:00
process_32.c Simplify copy_thread() 2009-04-02 19:04:51 -07:00
process_64.c Simplify copy_thread() 2009-04-02 19:04:51 -07:00
prom_32.c
prom_64.c sparc64: Defer cpu_data() setup until end of per-cpu data initialization. 2009-06-16 04:56:22 -07:00
prom_common.c sparc: Call OF and MD cpu scanning explicitly from paging_init() 2009-06-16 04:56:19 -07:00
prom_irqtrans.c
prom.h sparc: Call OF and MD cpu scanning explicitly from paging_init() 2009-06-16 04:56:19 -07:00
psycho_common.c
psycho_common.h
ptrace_32.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
ptrace_64.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
reboot.c
rtrap_32.S
rtrap_64.S
sbus.c
setup_32.c
setup_64.c
signal32.c
signal_32.c
signal_64.c
smp_32.c cpumask: use mm_cpumask() wrapper: sparc 2009-03-16 14:40:39 +10:30
smp_64.c percpu, sparc64: fix sparse possible cpu map handling 2009-08-14 13:20:53 +09:00
sparc_ksyms_32.c
sparc_ksyms_64.c
spiterrs.S
sstate.c
stacktrace.c
starfire.c
sun4c_irq.c
sun4d_irq.c cpumask: remove references to struct irqaction's mask field. 2009-03-30 22:05:14 +10:30
sun4d_smp.c cpumask: prepare for iterators to only go to nr_cpu_ids/nr_cpumask_bits.: sparc 2009-03-16 14:40:24 +10:30
sun4m_irq.c
sun4m_smp.c cpumask: prepare for iterators to only go to nr_cpu_ids/nr_cpumask_bits.: sparc 2009-03-16 14:40:24 +10:30
sun4v_ivec.S
sun4v_tlb_miss.S
sys32.S
sys_sparc32.c Separate out common fstatat code into vfs_fstatat 2009-04-20 23:02:51 -04:00
sys_sparc_32.c
sys_sparc_64.c
syscalls.S
sysfs.c
systbls_32.S sparc: Wire up sys_rt_tgsigqueueinfo(). 2009-06-16 04:56:58 -07:00
systbls_64.S sparc: Wire up sys_rt_tgsigqueueinfo(). 2009-06-16 04:56:58 -07:00
systbls.h
tadpole.c
tick14.c
time_32.c
time_64.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
trampoline_32.S
trampoline_64.S
traps_32.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
traps_64.c sparc64: Use BUILD_BUG_ON() in trap_init(). 2009-06-16 04:56:13 -07:00
tsb.S
ttable.S sparc64: Reschedule KGDB capture to a software interrupt. 2009-03-18 23:51:57 -07:00
una_asm_32.S
una_asm_64.S
unaligned_32.c
unaligned_64.c
us2e_cpufreq.c
us3_cpufreq.c
utrap.S
vio.c sparc: remove driver-core BUS_ID_SIZE 2009-07-12 13:02:09 -07:00
viohs.c
visemul.c
vmlinux.lds.S sparc: convert to use __HEAD and HEAD_TEXT macros. 2009-04-26 09:20:39 -07:00
windows.c
winfixup.S
wof.S
wuf.S