qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 05/13] spapr/xive: Use device_class_set_parent_realize()


From: David Gibson
Subject: Re: [PATCH v2 05/13] spapr/xive: Use device_class_set_parent_realize()
Date: Mon, 23 Dec 2019 15:27:50 +1100

On Thu, Dec 19, 2019 at 07:11:47PM +0100, Cédric Le Goater wrote:
> From: Greg Kurz <address@hidden>
> 
> The XIVE router base class currently inherits an empty realize hook
> from the sysbus device base class, but it will soon implement one
> of its own to perform some sanity checks. Do the preliminary plumbing
> to have it called.
> 
> Signed-off-by: Greg Kurz <address@hidden>
> Signed-off-by: Cédric Le Goater <address@hidden>

Applied to ppc-for-5.0, thanks.

> ---
>  include/hw/ppc/spapr_xive.h | 10 ++++++++++
>  hw/intc/spapr_xive.c        | 12 +++++++++++-
>  2 files changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h
> index 3a103c224d44..93d09d68deb7 100644
> --- a/include/hw/ppc/spapr_xive.h
> +++ b/include/hw/ppc/spapr_xive.h
> @@ -15,6 +15,10 @@
>  
>  #define TYPE_SPAPR_XIVE "spapr-xive"
>  #define SPAPR_XIVE(obj) OBJECT_CHECK(SpaprXive, (obj), TYPE_SPAPR_XIVE)
> +#define SPAPR_XIVE_CLASS(klass)                                         \
> +    OBJECT_CLASS_CHECK(SpaprXiveClass, (klass), TYPE_SPAPR_XIVE)
> +#define SPAPR_XIVE_GET_CLASS(obj)                               \
> +    OBJECT_GET_CLASS(SpaprXiveClass, (obj), TYPE_SPAPR_XIVE)
>  
>  typedef struct SpaprXive {
>      XiveRouter    parent;
> @@ -47,6 +51,12 @@ typedef struct SpaprXive {
>      VMChangeStateEntry *change;
>  } SpaprXive;
>  
> +typedef struct SpaprXiveClass {
> +    XiveRouterClass parent;
> +
> +    DeviceRealize parent_realize;
> +} SpaprXiveClass;
> +
>  /*
>   * The sPAPR machine has a unique XIVE IC device. Assign a fixed value
>   * to the controller block id value. It can nevertheless be changed
> diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c
> index 57305c56d707..32322470a8b8 100644
> --- a/hw/intc/spapr_xive.c
> +++ b/hw/intc/spapr_xive.c
> @@ -286,10 +286,17 @@ static void spapr_xive_instance_init(Object *obj)
>  static void spapr_xive_realize(DeviceState *dev, Error **errp)
>  {
>      SpaprXive *xive = SPAPR_XIVE(dev);
> +    SpaprXiveClass *sxc = SPAPR_XIVE_GET_CLASS(xive);
>      XiveSource *xsrc = &xive->source;
>      XiveENDSource *end_xsrc = &xive->end_source;
>      Error *local_err = NULL;
>  
> +    sxc->parent_realize(dev, &local_err);
> +    if (local_err) {
> +        error_propagate(errp, local_err);
> +        return;
> +    }
> +
>      if (!xive->nr_irqs) {
>          error_setg(errp, "Number of interrupt needs to be greater 0");
>          return;
> @@ -760,10 +767,12 @@ static void spapr_xive_class_init(ObjectClass *klass, 
> void *data)
>      XiveRouterClass *xrc = XIVE_ROUTER_CLASS(klass);
>      SpaprInterruptControllerClass *sicc = SPAPR_INTC_CLASS(klass);
>      XivePresenterClass *xpc = XIVE_PRESENTER_CLASS(klass);
> +    SpaprXiveClass *sxc = SPAPR_XIVE_CLASS(klass);
>  
>      dc->desc    = "sPAPR XIVE Interrupt Controller";
>      dc->props   = spapr_xive_properties;
> -    dc->realize = spapr_xive_realize;
> +    device_class_set_parent_realize(dc, spapr_xive_realize,
> +                                    &sxc->parent_realize);
>      dc->vmsd    = &vmstate_spapr_xive;
>  
>      xrc->get_eas = spapr_xive_get_eas;
> @@ -794,6 +803,7 @@ static const TypeInfo spapr_xive_info = {
>      .instance_init = spapr_xive_instance_init,
>      .instance_size = sizeof(SpaprXive),
>      .class_init = spapr_xive_class_init,
> +    .class_size = sizeof(SpaprXiveClass),
>      .interfaces = (InterfaceInfo[]) {
>          { TYPE_SPAPR_INTC },
>          { }

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]