summaryrefslogtreecommitdiffstats
path: root/include/hw
diff options
context:
space:
mode:
authorGreg Kurz2017-05-17 16:38:20 +0200
committerDavid Gibson2017-05-24 03:39:52 +0200
commitde86eccc0c836adfa8dbb94848096720177f5ccb (patch)
tree34e74c8f060a4f30f7c2584fe28ca83eb8e70261 /include/hw
parentspapr: Consolidate HPT freeing code into a routine (diff)
downloadqemu-de86eccc0c836adfa8dbb94848096720177f5ccb.tar.gz
qemu-de86eccc0c836adfa8dbb94848096720177f5ccb.tar.xz
qemu-de86eccc0c836adfa8dbb94848096720177f5ccb.zip
xics_kvm: cache already enabled vCPU ids
Since commit a45863bda90d ("xics_kvm: Don't enable KVM_CAP_IRQ_XICS if already enabled"), we were able to re-hotplug a vCPU that had been hot- unplugged ealier, thanks to a boolean flag in ICPState that we set when enabling KVM_CAP_IRQ_XICS. This could work because the lifecycle of all ICPState objects was the same as the machine. Commit 5bc8d26de20c ("spapr: allocate the ICPState object from under sPAPRCPUCore") broke this assumption and now we always pass a freshly allocated ICPState object (ie, with the flag unset) to icp_kvm_cpu_setup(). This cause re-hotplug to fail with: Unable to connect CPU8 to kernel XICS: Device or resource busy Let's fix this by caching all the vCPU ids for which KVM_CAP_IRQ_XICS was enabled. This also drops the now useless boolean flag from ICPState. Reported-by: Laurent Vivier <lvivier@redhat.com> Signed-off-by: Greg Kurz <groug@kaod.org> Tested-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: Laurent Vivier <lvivier@redhat.com> Reviewed-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'include/hw')
-rw-r--r--include/hw/ppc/xics.h1
1 files changed, 0 insertions, 1 deletions
diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
index d6cb51f3ad..a3073f9053 100644
--- a/include/hw/ppc/xics.h
+++ b/include/hw/ppc/xics.h
@@ -81,7 +81,6 @@ struct ICPState {
uint8_t pending_priority;
uint8_t mfrr;
qemu_irq output;
- bool cap_irq_xics_enabled;
XICSFabric *xics;
};