summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Kurz <groug@kaod.org>2017-06-08 15:43:08 +0200
committerDavid Gibson <david@gibson.dropbear.id.au>2017-06-09 12:17:59 +1000
commitb1fd36c363d73969841468146ebfb9fd84a5ee52 (patch)
treecd222ebc11087e6e5d9c1ef38a0359ae7ab023a9
parent9ed656631d73a7564dfe178ca8c48bf049098aaf (diff)
downloadqemu-b1fd36c363d73969841468146ebfb9fd84a5ee52.tar.gz
xics: drop ICPStateClass::cpu_setup() handler
The cpu_setup() handler is only implemented by xics_kvm, where it really does a typical "realize" job. Moreover, the realize() handler is called shortly after cpu_setup(), on the same path. This patch converts xics_kvm to implement realize() instead of cpu_setup(). Signed-off-by: Greg Kurz <groug@kaod.org> Reviewed-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--hw/intc/xics.c4
-rw-r--r--hw/intc/xics_kvm.c12
-rw-r--r--include/hw/ppc/xics.h1
3 files changed, 6 insertions, 11 deletions
diff --git a/hw/intc/xics.c b/hw/intc/xics.c
index fdbfddffee..7ccfb53c55 100644
--- a/hw/intc/xics.c
+++ b/hw/intc/xics.c
@@ -324,10 +324,6 @@ static void icp_realize(DeviceState *dev, Error **errp)
cpu->intc = OBJECT(icp);
icp->cs = CPU(obj);
- if (icpc->cpu_setup) {
- icpc->cpu_setup(icp, cpu);
- }
-
env = &cpu->env;
switch (PPC_INPUT(env)) {
case PPC_FLAGS_INPUT_POWER7:
diff --git a/hw/intc/xics_kvm.c b/hw/intc/xics_kvm.c
index 41c5b94395..3091ad3ac2 100644
--- a/hw/intc/xics_kvm.c
+++ b/hw/intc/xics_kvm.c
@@ -115,9 +115,9 @@ static void icp_kvm_reset(ICPState *icp)
icp_set_kvm_state(icp, 1);
}
-static void icp_kvm_cpu_setup(ICPState *icp, PowerPCCPU *cpu)
+static void icp_kvm_realize(ICPState *icp, Error **errp)
{
- CPUState *cs = CPU(cpu);
+ CPUState *cs = icp->cs;
KVMEnabledICP *enabled_icp;
unsigned long vcpu_id = kvm_arch_vcpu_id(cs);
int ret;
@@ -139,9 +139,9 @@ static void icp_kvm_cpu_setup(ICPState *icp, PowerPCCPU *cpu)
ret = kvm_vcpu_enable_cap(cs, KVM_CAP_IRQ_XICS, 0, kernel_xics_fd, vcpu_id);
if (ret < 0) {
- error_report("Unable to connect CPU%ld to kernel XICS: %s", vcpu_id,
- strerror(errno));
- exit(1);
+ error_setg(errp, "Unable to connect CPU%ld to kernel XICS: %s", vcpu_id,
+ strerror(errno));
+ return;
}
enabled_icp = g_malloc(sizeof(*enabled_icp));
enabled_icp->vcpu_id = vcpu_id;
@@ -154,7 +154,7 @@ static void icp_kvm_class_init(ObjectClass *klass, void *data)
icpc->pre_save = icp_get_kvm_state;
icpc->post_load = icp_set_kvm_state;
- icpc->cpu_setup = icp_kvm_cpu_setup;
+ icpc->realize = icp_kvm_realize;
icpc->reset = icp_kvm_reset;
}
diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
index 37b8fb1e88..28d248abad 100644
--- a/include/hw/ppc/xics.h
+++ b/include/hw/ppc/xics.h
@@ -68,7 +68,6 @@ struct ICPStateClass {
void (*realize)(ICPState *icp, Error **errp);
void (*pre_save)(ICPState *icp);
int (*post_load)(ICPState *icp, int version_id);
- void (*cpu_setup)(ICPState *icp, PowerPCCPU *cpu);
void (*reset)(ICPState *icp);
};