diff options
author | Paul Mackerras <paulus@au1.ibm.com> | 2014-02-04 16:09:23 +1100 |
---|---|---|
committer | CrÃstian Viana <vianac@linux.vnet.ibm.com> | 2014-02-04 21:33:37 -0200 |
commit | 8733f0d760e5c50929312778d9375d91d6e61371 (patch) | |
tree | 7f6de96a0ae955eb6d4a4a2d5aa47666304f57c8 | |
parent | 6f7a6dcaeea1ff9957a24ffc8efc4396079421f9 (diff) | |
download | powerkvm-8733f0d760e5c50929312778d9375d91d6e61371.tar.gz |
powerpc/powernv: Clear IPI flag when flushing interrupts
icp_native_flush_interrupt() function is supposed to clear a pending
interrupt, like local_irq_enable(); local_irq_disable() would, but
without calling generic code. Unfortunately it missed clearing
the "IPI pending" flag in the PACA (local_paca->kvm_hstate.host_ipi).
The effect of this flag being set is that secondary CPU threads won't
go into the KVM guest, leading to messages like:
kvmppc_wait_for_nap timeout 0 1
when a KVM HV guest is run. This fixes it by adding a call to
kvmppc_set_host_ipi to clear the flag.
This fixes BZ 103513.
Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r-- | arch/powerpc/sysdev/xics/icp-native.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/powerpc/sysdev/xics/icp-native.c b/arch/powerpc/sysdev/xics/icp-native.c index 8a6d9e008b34f..48b0667e3f355 100644 --- a/arch/powerpc/sysdev/xics/icp-native.c +++ b/arch/powerpc/sysdev/xics/icp-native.c @@ -161,7 +161,9 @@ void icp_native_flush_interrupt(void) return; if (vec == XICS_IPI) { /* Clear pending IPI */ - icp_native_set_qirr(smp_processor_id(), 0xff); + int cpu = smp_processor_id(); + kvmppc_set_host_ipi(cpu, 0); + icp_native_set_qirr(cpu, 0xff); } else { pr_err("XICS: hw interrupt 0x%x to offline cpu, disabling\n", vec); |