On 06/08/2017 03:43 PM, Greg Kurz wrote: > 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 <gr...@kaod.org>
Reviewed-by: Cédric Le Goater <c...@kaod.org> Thanks, C. > --- > hw/intc/xics.c | 4 ---- > hw/intc/xics_kvm.c | 12 ++++++------ > include/hw/ppc/xics.h | 1 - > 3 files changed, 6 insertions(+), 11 deletions(-) > > diff --git a/hw/intc/xics.c b/hw/intc/xics.c > index fdbfddffeea5..7ccfb53c55a0 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 41c5b9439562..3091ad3ac2c8 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 37b8fb1e8817..28d248abad61 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); > }; > >