linux/arch/powerpc/platforms/pseries
Brian King 444080d13d powerpc/pseries: Fix partition migration hang in stop_topology_update
This fixes a hang that was observed during live partition migration.
Since stop_topology_update must not be called from an interrupt
context, call it earlier in the migration process. The hang observed
can be seen below:

WARNING: at kernel/timer.c:1011
Modules linked in: ip6t_LOG xt_tcpudp xt_pkttype ipt_LOG xt_limit ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 ip6table_raw xt_NOTRACK ipt_REJECT xt_state iptable_raw iptable_filter ip6table_mangle nf_conntrack_netbios_ns nf_conntrack_broadcast nf_conntrack_ipv4 nf_conntrack nf_defrag_ipv4 ip_tables ip6table_filter ip6_tables x_tables ipv6 fuse loop ibmveth sg ext3 jbd mbcache raid456 async_raid6_recov async_pq raid6_pq async_xor xor async_memcpy async_tx raid10 raid1 raid0 scsi_dh_alua scsi_dh_rdac scsi_dh_hp_sw scsi_dh_emc dm_round_robin dm_multipath scsi_dh sd_mod crc_t10dif ibmvfc scsi_transport_fc scsi_tgt scsi_mod dm_snapshot dm_mod
NIP: c0000000000c52d8 LR: c00000000004be28 CTR: 0000000000000000
REGS: c00000005ffd77d0 TRAP: 0700   Not tainted  (3.2.0-git-00001-g07d106d)
MSR: 8000000000021032 <ME,CE,IR,DR>  CR: 48000084  XER: 00000001
CFAR: c00000000004be20
TASK = c00000005ec78860[0] 'swapper/3' THREAD: c00000005ec98000 CPU: 3
GPR00: 0000000000000001 c00000005ffd7a50 c000000000fbbc98 c000000000ec8340
GPR04: 00000000282a0020 0000000000000000 0000000000004000 0000000000000101
GPR08: 0000000000000012 c00000005ffd4000 0000000000000020 c000000000f3ba88
GPR12: 0000000000000000 c000000007f40900 0000000000000001 0000000000000004
GPR16: 0000000000000001 0000000000000000 0000000000000000 c000000001022310
GPR20: 0000000000000001 0000000000000000 0000000000200200 c000000001029e14
GPR24: 0000000000000000 0000000000000001 0000000000000040 c00000003f74bc80
GPR28: c00000003f74bc84 c000000000f38038 c000000000f16b58 c000000000ec8340
NIP [c0000000000c52d8] .del_timer_sync+0x28/0x60
LR [c00000000004be28] .stop_topology_update+0x20/0x38
Call Trace:
[c00000005ffd7a50] [c00000005ec78860] 0xc00000005ec78860 (unreliable)
[c00000005ffd7ad0] [c00000000004be28] .stop_topology_update+0x20/0x38
[c00000005ffd7b40] [c000000000028378] .__rtas_suspend_last_cpu+0x58/0x260
[c00000005ffd7bf0] [c0000000000fa230] .generic_smp_call_function_interrupt+0x160/0x358
[c00000005ffd7cf0] [c000000000036ec8] .smp_ipi_demux+0x88/0x100
[c00000005ffd7d80] [c00000000005c154] .icp_hv_ipi_action+0x5c/0x80
[c00000005ffd7e00] [c00000000012a088] .handle_irq_event_percpu+0x100/0x318
[c00000005ffd7f00] [c00000000012e774] .handle_percpu_irq+0x84/0xd0
[c00000005ffd7f90] [c000000000022ba8] .call_handle_irq+0x1c/0x2c
[c00000005ec9ba20] [c00000000001157c] .do_IRQ+0x22c/0x2a8
[c00000005ec9bae0] [c0000000000054bc] hardware_interrupt_entry+0x18/0x1c
Exception: 501 at .cpu_idle+0x194/0x2f8
    LR = .cpu_idle+0x194/0x2f8
[c00000005ec9bdd0] [c000000000017e58] .cpu_idle+0x188/0x2f8 (unreliable)
[c00000005ec9be90] [c00000000067ec18] .start_secondary+0x3e4/0x524
[c00000005ec9bf90] [c0000000000093e8] .start_secondary_prolog+0x10/0x14
Instruction dump:
ebe1fff8 4e800020 fbe1fff8 7c0802a6 f8010010 7c7f1b78 f821ff81 78290464
80090014 5400019e 7c0000d0 78000fe0 <0b000000> 4800000c 7c210b78 7c421378

Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2012-02-14 15:01:39 +11:00
..
cmm.c power: cmm - convert sysdev_class to a regular subsystem 2011-12-21 15:09:51 -08:00
dlpar.c powerpc/pseries: Avoid spurious error during hotplug CPU add 2011-09-20 09:20:00 +10:00
dtl.c powerpc/pseries: Fix kexec on recent firmware versions 2011-08-05 14:47:57 +10:00
eeh_cache.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
eeh_driver.c powerpc/eeh: Display eeh error location for bus and device 2011-05-06 13:32:31 +10:00
eeh_event.c powerpc: Fix up implicit sched.h users 2011-10-31 19:30:40 -04:00
eeh_sysfs.c powerpc: Fix up implicit stat.h users 2011-10-31 19:30:39 -04:00
eeh.c Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
event_sources.c powerpc/pseries: Add WARN_ON() to request_event_sources_irqs() on irq allocation/request failure 2010-07-09 11:28:32 +10:00
firmware.c powerpc: Add VPHN firmware feature 2010-11-29 15:48:22 +11:00
hotplug-cpu.c powerpc: Fix up implicit sched.h users 2011-10-31 19:30:40 -04:00
hotplug-memory.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2011-07-25 22:59:39 -07:00
hvCall_inst.c powerpc: Fix unpaired probe_hcall_entry and probe_hcall_exit 2012-01-03 12:09:27 +11:00
hvCall.S powerpc: Fix unpaired __trace_hcall_entry and __trace_hcall_exit 2012-01-11 12:50:26 +11:00
hvconsole.c powerpc: convert hvconsole.c to export.h ; fix implicit use of errno.h 2011-10-31 19:30:43 -04:00
hvcserver.c
io_event_irq.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
iommu.c powerpc/powernv: Add TCE SW invalidation support 2011-11-25 14:32:57 +11:00
Kconfig powerpc/cpuidle: Make it a bool, not a tristate 2012-01-25 09:43:06 +11:00
kexec.c powerpc/pseries: Simplify vpa deregistration functions 2011-08-05 14:47:58 +10:00
lpar.c powerpc: Fix RCU idle and hcall tracing 2012-01-11 11:54:20 +11:00
Makefile powerpc/cpuidle: cpuidle driver for pSeries 2011-12-08 13:56:31 +11:00
mobility.c powerpc: Fix up implicit stat.h users 2011-10-31 19:30:39 -04:00
msi.c powerpc: Convert to new irq_* function names 2011-03-29 14:48:12 +02:00
nvram.c kexec: remove KMSG_DUMP_KEXEC 2012-01-12 20:13:11 -08:00
offline_states.h powerpc/smp: soft-replugged CPUs must go back to start_secondary 2011-04-01 15:37:09 +11:00
pci_dlpar.c powerpc: include export.h for files using EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:30:38 -04:00
pci.c
phyp_dump.c lmb: rename to memblock 2010-07-14 17:14:00 +10:00
plpar_wrappers.h powerpc: fix two implicit header uses in pseries/plpar_wrappers.h 2011-10-31 19:30:42 -04:00
power.c [POWERPC] Fix warning in pseries/power.c 2008-02-20 13:33:37 +11:00
processor_idle.c powerpc/cpuidle: Handle power_save=off 2011-12-08 13:57:34 +11:00
pseries_energy.c cpu: convert 'cpu' and 'machinecheck' sysdev_class to a regular subsystem 2011-12-21 14:29:42 -08:00
pseries.h powerpc/cpuidle: cpuidle driver for pSeries 2011-12-08 13:56:31 +11:00
ras.c powerpc/pseries: Print corrupt r3 in FWNMI code 2011-05-19 14:30:43 +10:00
reconfig.c powerpc/pseries: Improve error code on reconfiguration notifier failure 2011-06-29 17:48:24 +10:00
scanlog.c llseek: automatically add .llseek fop 2010-10-15 15:53:27 +02:00
setup.c Merge branch 'kexec' into next 2011-12-16 11:09:21 +11:00
smp.c Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core 2012-01-07 12:03:30 -08:00
suspend.c powerpc/pseries: Fix partition migration hang in stop_topology_update 2012-02-14 15:01:39 +11:00