kernel-ark/arch/powerpc/kernel
Haren Myneni 81b73dd92b [POWERPC] Fix might-sleep warning on removing cpus
Noticing the following might_sleep warning (dump_stack()) during kdump
testing when CONFIG_DEBUG_SPINLOCK_SLEEP is enabled. All secondary CPUs
will be calling rtas_set_indicator with interrupts disabled to remove
them from global interrupt queue.

BUG: sleeping function called from invalid context at
arch/powerpc/kernel/rtas.c:463
in_atomic():1, irqs_disabled():1
Call Trace:
[C00000000FFFB970] [C000000000010234] .show_stack+0x68/0x1b0 (unreliable)
[C00000000FFFBA10] [C000000000059354] .__might_sleep+0xd8/0xf4
[C00000000FFFBA90] [C00000000001D1BC] .rtas_busy_delay+0x20/0x5c
[C00000000FFFBB20] [C00000000001D8A8] .rtas_set_indicator+0x6c/0xcc
[C00000000FFFBBC0] [C000000000048BF4] .xics_teardown_cpu+0x118/0x134
[C00000000FFFBC40] [C00000000004539C]
.pseries_kexec_cpu_down_xics+0x74/0x8c
[C00000000FFFBCC0] [C00000000002DF08] .crash_ipi_callback+0x15c/0x188
[C00000000FFFBD50] [C0000000000296EC] .smp_message_recv+0x84/0xdc
[C00000000FFFBDC0] [C000000000048E08] .xics_ipi_dispatch+0xf0/0x130
[C00000000FFFBE50] [C00000000009EF10] .handle_IRQ_event+0x7c/0xf8
[C00000000FFFBF00] [C0000000000A0A14] .handle_percpu_irq+0x90/0x10c
[C00000000FFFBF90] [C00000000002659C] .call_handle_irq+0x1c/0x2c
[C00000000058B9C0] [C00000000000CA10] .do_IRQ+0xf4/0x1a4
[C00000000058BA50] [C0000000000044EC] hardware_interrupt_entry+0xc/0x10
 --- Exception: 501 at .plpar_hcall_norets+0x14/0x1c
   LR = .pseries_dedicated_idle_sleep+0x190/0x1d4
[C00000000058BD40] [C00000000058BDE0] 0xc00000000058bde0 (unreliable)
[C00000000058BDF0] [C00000000001270C] .cpu_idle+0x10c/0x1e0
[C00000000058BE70] [C000000000009274] .rest_init+0x44/0x5c

To fix this issue, rtas_set_indicator_fast() is added so that will not
wait for RTAS 'busy' delay and this new function is used for kdump (in
xics_teardown_cpu()) and for CPU hotplug ( xics_migrate_irqs_away() and
xics_setup_cpu()).

Note that the platform architecture spec says that set-indicator
on the indicator we're using here is not permitted to return the
busy or extended busy status codes.

Signed-off-by: Haren Myneni <haren@us.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-08-08 16:00:11 +10:00
..
vdso32 [PATCH] vDSO hash-style fix 2006-07-31 13:28:43 -07:00
vdso64 [PATCH] vDSO hash-style fix 2006-07-31 13:28:43 -07:00
align.c [PATCH] powerpc: Implement support for setting little-endian mode via prctl 2006-06-09 21:24:15 +10:00
asm-offsets.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
binfmt_elf32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
btext.c [POWERPC] Fix various offb and BootX-related issues 2006-07-03 17:19:48 +10:00
cpu_setup_6xx.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
cpu_setup_power4.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
cputable.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
crash_dump.c [PATCH] powerpc: Kdump header cleanup 2006-05-19 15:02:16 +10:00
crash.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2006-06-29 11:32:34 -07:00
dma_64.c
entry_32.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
entry_64.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
firmware.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
fpu.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
head_4xx.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
head_8xx.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
head_32.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
head_44x.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
head_64.S [POWERPC] force 64bit mode in fwnmi handlers to workaround firmware bugs 2006-07-29 04:07:08 +10:00
head_booke.h [PATCH] powerpc: Fix Kernel FP unavail exception for BookE 2006-02-10 16:51:50 +11:00
head_fsl_booke.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ibmebus.c [PATCH] powerpc: fix trigger handling in the new irq code 2006-07-10 13:24:20 -07:00
idle_6xx.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
idle_power4.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
idle.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
init_task.c
iomap.c [PATCH] powerpc: remove io_page_mask 2006-04-22 18:45:05 +10:00
iommu.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
irq.c [PATCH] powerpc: fix trigger handling in the new irq code 2006-07-10 13:24:20 -07:00
kprobes.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
l2cr_6xx.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
legacy_serial.c [POWERPC] Fix legacy_serial.c error handling on 32 bits 2006-07-26 01:27:27 +10:00
lparcfg.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
lparmap.c
machine_kexec_32.c Storage class should be first 2006-06-26 18:57:34 +02:00
machine_kexec_64.c [POWERPC] Make kexec_setup() a regular initcall 2006-06-28 11:59:47 +10:00
machine_kexec.c
Makefile [POWERPC] Consolidate some of kernel/misc*.S 2006-06-28 15:19:00 +10:00
misc_32.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
misc_64.S [POWERPC] Minor comment fix for misc_64.S 2006-07-31 14:37:46 +10:00
misc.S [POWERPC] Consolidate some of kernel/misc*.S 2006-06-28 15:19:00 +10:00
module_32.c powerpc: Move module.c over to arch/powerpc 2006-03-27 19:28:58 +11:00
module_64.c [PATCH] powerpc64: Fix loading of modules without a .toc section 2006-04-28 21:04:49 +10:00
nvram_64.c [PATCH] nvram_print_partitions cosmetic fixup 2006-04-29 18:08:05 +10:00
of_device.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
paca.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
pci_32.c [PATCH] powerpc: fix trigger handling in the new irq code 2006-07-10 13:24:20 -07:00
pci_64.c [PATCH] powerpc: fix trigger handling in the new irq code 2006-07-10 13:24:20 -07:00
pci_direct_iommu.c [POWERPC] cleanup dma_mapping_ops 2006-06-15 19:31:26 +10:00
pci_dn.c [PATCH] powerpc: clean up iSeries PCI probe 2006-05-24 16:08:57 +10:00
pci_iommu.c [POWERPC] cleanup dma_mapping_ops 2006-06-15 19:31:26 +10:00
perfmon_fsl_booke.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
pmc.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ppc32.h
ppc_ksyms.c [PATCH] tty: Remove include of screen_info.h from tty.h 2006-07-10 13:24:16 -07:00
proc_ppc64.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
process.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
prom_init.c [POWERPC] Fix 32 bits warning in prom_init.c 2006-07-26 01:26:43 +10:00
prom_parse.c [PATCH] powerpc: make OF interrupt tree parsing more strict 2006-07-10 13:24:20 -07:00
prom.c [POWERPC] Add new interrupt mapping core and change platforms to use it 2006-07-03 21:36:01 +10:00
ptrace32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ptrace-common.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ptrace.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
rtas_flash.c [PATCH] powerpc: reorg RTAS delay code 2006-06-09 21:21:06 +10:00
rtas_pci.c [POWERPC] Add new interrupt mapping core and change platforms to use it 2006-07-03 21:36:01 +10:00
rtas-proc.c [PATCH] powerpc: Avoid __initcall warnings 2006-04-13 09:27:26 -07:00
rtas-rtc.c [PATCH] powerpc: reorg RTAS delay code 2006-06-09 21:21:06 +10:00
rtas.c [POWERPC] Fix might-sleep warning on removing cpus 2006-08-08 16:00:11 +10:00
semaphore.c
setup_32.c [POWERPC] Add new interrupt mapping core and change platforms to use it 2006-07-03 21:36:01 +10:00
setup_64.c [POWERPC] Add new interrupt mapping core and change platforms to use it 2006-07-03 21:36:01 +10:00
setup-common.c [PATCH] tty: Remove include of screen_info.h from tty.h 2006-07-10 13:24:16 -07:00
setup.h [PATCH] powerpc: Make early xmon logic immune to location of early parsing 2006-05-19 15:02:12 +10:00
signal_32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
signal_64.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
smp-tbsync.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
smp.c [POWERPC] Fix non-MPIC CHRPs with CONFIG_SMP set 2006-07-26 01:27:04 +10:00
swsusp_32.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sys_ppc32.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
syscalls.c [PATCH] powerpc: declare arch syscalls in <asm/syscalls.h> 2006-03-27 14:48:22 +11:00
sysfs.c [PATCH] cpu hotplug: replace __devinit* with __cpuinit* for cpu notifications 2006-07-31 13:28:39 -07:00
systbl.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
tau_6xx.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
time.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
traps.c [PATCH] panic_on_oops: remove ssleep() 2006-07-31 13:28:39 -07:00
udbg_16550.c [POWERPC] Fix default clock for udbg_16550 2006-07-26 01:27:13 +10:00
udbg.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
vdso.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
vecemu.c
vector.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
vio.c [POWERPC] Add new interrupt mapping core and change platforms to use it 2006-07-03 21:36:01 +10:00
vmlinux.lds.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00