diff options
| author | Bharata B Rao <bharata@linux.vnet.ibm.com> | 2016-05-12 09:18:20 +0530 |
|---|---|---|
| committer | David Gibson <david@gibson.dropbear.id.au> | 2016-06-17 16:33:48 +1000 |
| commit | 4a4b344c7ccdeac28c2e65e51ddbe3acfb41b883 (patch) | |
| tree | b4492f7651bf5572e0cb761d64e7dda8082eed5e /hw/intc/xics.c | |
| parent | f1020c2c2647a62df870ce243424ee23ea95ae6f (diff) | |
| download | focaccia-qemu-4a4b344c7ccdeac28c2e65e51ddbe3acfb41b883.tar.gz focaccia-qemu-4a4b344c7ccdeac28c2e65e51ddbe3acfb41b883.zip | |
xics,xics_kvm: Handle CPU unplug correctly
XICS is setup for each CPU during initialization. Provide a routine to undo the same when CPU is unplugged. While here, move ss->cs management into xics from xics_kvm since there is nothing KVM specific in it. Also ensure xics reset doesn't set irq for CPUs that are already unplugged. This allows reboot of a VM that has undergone CPU hotplug and unplug to work correctly. Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'hw/intc/xics.c')
| -rw-r--r-- | hw/intc/xics.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/hw/intc/xics.c b/hw/intc/xics.c index 8659be0171..cce7f3d112 100644 --- a/hw/intc/xics.c +++ b/hw/intc/xics.c @@ -48,6 +48,18 @@ static int get_cpu_index_by_dt_id(int cpu_dt_id) return -1; } +void xics_cpu_destroy(XICSState *icp, PowerPCCPU *cpu) +{ + CPUState *cs = CPU(cpu); + ICPState *ss = &icp->ss[cs->cpu_index]; + + assert(cs->cpu_index < icp->nr_servers); + assert(cs == ss->cs); + + ss->output = NULL; + ss->cs = NULL; +} + void xics_cpu_setup(XICSState *icp, PowerPCCPU *cpu) { CPUState *cs = CPU(cpu); @@ -57,6 +69,8 @@ void xics_cpu_setup(XICSState *icp, PowerPCCPU *cpu) assert(cs->cpu_index < icp->nr_servers); + ss->cs = cs; + if (info->cpu_setup) { info->cpu_setup(icp, cpu); } |