On 2/15/19 12:40 PM, Greg Kurz wrote: > The realization of KVM ICP currently follows the parent_realize logic, > which is a bit overkill here. Also we want to get rid of the KVM ICP > class. Explicitely call icp_kvm_realize() from the base ICP realize > function. > > Note that ICPStateClass::parent_realize is retained because powernv > needs it. > > Signed-off-by: Greg Kurz <gr...@kaod.org>> > --- > hw/intc/xics.c | 8 ++++++++ > hw/intc/xics_kvm.c | 10 +--------- > include/hw/ppc/xics.h | 1 + > 3 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/hw/intc/xics.c b/hw/intc/xics.c > index 822d367e6388..acd63ab5e0b9 100644 > --- a/hw/intc/xics.c > +++ b/hw/intc/xics.c > @@ -349,6 +349,14 @@ static void icp_realize(DeviceState *dev, Error **errp) > return; > } > > + if (kvm_irqchip_in_kernel()) { > + icp_kvm_realize(dev, &err);
While we are at changing things, I would prefix all the KVM backends routine with kvmppc_*. so that icp_kvm_realize() becomes kvmppc_icp_realize() Apart from that, Reviewed-by: Cédric Le Goater <c...@kaod.org> Thanks, C. > + if (err) { > + error_propagate(errp, err); > + return; > + } > + } > + > qemu_register_reset(icp_reset_handler, dev); > vmstate_register(NULL, icp->cs->cpu_index, &vmstate_icp_server, icp); > } > diff --git a/hw/intc/xics_kvm.c b/hw/intc/xics_kvm.c > index 80321e9b75ab..4eebced516b6 100644 > --- a/hw/intc/xics_kvm.c > +++ b/hw/intc/xics_kvm.c > @@ -115,11 +115,9 @@ int icp_set_kvm_state(ICPState *icp) > return 0; > } > > -static void icp_kvm_realize(DeviceState *dev, Error **errp) > +void icp_kvm_realize(DeviceState *dev, Error **errp) > { > ICPState *icp = ICP(dev); > - ICPStateClass *icpc = ICP_GET_CLASS(icp); > - Error *local_err = NULL; > CPUState *cs; > KVMEnabledICP *enabled_icp; > unsigned long vcpu_id; > @@ -129,12 +127,6 @@ static void icp_kvm_realize(DeviceState *dev, Error > **errp) > abort(); > } > > - icpc->parent_realize(dev, &local_err); > - if (local_err) { > - error_propagate(errp, local_err); > - return; > - } > - > cs = icp->cs; > vcpu_id = kvm_arch_vcpu_id(cs); > > diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h > index e33282a576d0..ab61dc24010a 100644 > --- a/include/hw/ppc/xics.h > +++ b/include/hw/ppc/xics.h > @@ -202,5 +202,6 @@ Object *icp_create(Object *cpu, const char *type, > XICSFabric *xi, > void icp_get_kvm_state(ICPState *icp); > int icp_set_kvm_state(ICPState *icp); > void icp_synchronize_state(ICPState *icp); > +void icp_kvm_realize(DeviceState *dev, Error **errp); > > #endif /* XICS_H */ >