qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] ppc/xics: register reset handlers for the ICP a


From: Thomas Huth
Subject: Re: [Qemu-devel] [PATCH] ppc/xics: register reset handlers for the ICP and ICS objects
Date: Fri, 3 Mar 2017 14:05:11 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0

On 03.03.2017 13:51, Cédric Le Goater wrote:
> The recent changes on the XICS layer removed the XICSState object to
> let the sPAPR machine handle the ICP and ICS directly. The reset of
> these objects was previously handled by XICSState, which was a SysBus
> device, and to keep the same behavior, the ICP and ICS were assigned
> to SysbBus.
> 
> But that broke the 'info qtree' command in the monitor. 'qtree'
> performs a loop on the children of a bus to print their properties and
> SysBus devices are expected to be found under SysBus, which is not the
> case anymore.
> 
> The fix for this problem is to register reset handlers for the ICP and
> ICS objects and stop using SysBus for such devices.
> 
> Signed-off-by: Cédric Le Goater <address@hidden>
> ---
>  hw/intc/xics.c     | 10 ++++++----
>  hw/intc/xics_kvm.c | 15 ++++++++++-----
>  hw/ppc/spapr.c     |  2 --
>  3 files changed, 16 insertions(+), 11 deletions(-)
> 
> diff --git a/hw/intc/xics.c b/hw/intc/xics.c
> index ffc0747c7fa2..e740989a1162 100644
> --- a/hw/intc/xics.c
> +++ b/hw/intc/xics.c
> @@ -333,7 +333,7 @@ static const VMStateDescription vmstate_icp_server = {
>      },
>  };
>  
> -static void icp_reset(DeviceState *dev)
> +static void icp_reset(void *dev)
>  {
>      ICPState *icp = ICP(dev);
>  
> @@ -359,6 +359,8 @@ static void icp_realize(DeviceState *dev, Error **errp)
>      }
>  
>      icp->xics = XICS_FABRIC(obj);
> +
> +    qemu_register_reset(icp_reset, dev);
>  }
>  
>  
> @@ -366,7 +368,6 @@ static void icp_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
>  
> -    dc->reset = icp_reset;
>      dc->vmsd = &vmstate_icp_server;
>      dc->realize = icp_realize;
>  }
> @@ -522,7 +523,7 @@ static void ics_simple_eoi(ICSState *ics, uint32_t nr)
>      }
>  }
>  
> -static void ics_simple_reset(DeviceState *dev)
> +static void ics_simple_reset(void *dev)
>  {
>      ICSState *ics = ICS_SIMPLE(dev);
>      int i;
> @@ -611,6 +612,8 @@ static void ics_simple_realize(DeviceState *dev, Error 
> **errp)
>      }
>      ics->irqs = g_malloc0(ics->nr_irqs * sizeof(ICSIRQState));
>      ics->qirqs = qemu_allocate_irqs(ics_simple_set_irq, ics, ics->nr_irqs);
> +
> +    qemu_register_reset(ics_simple_reset, dev);
>  }
>  
>  static Property ics_simple_properties[] = {
> @@ -626,7 +629,6 @@ static void ics_simple_class_init(ObjectClass *klass, 
> void *data)
>      isc->realize = ics_simple_realize;
>      dc->props = ics_simple_properties;
>      dc->vmsd = &vmstate_ics_simple;
> -    dc->reset = ics_simple_reset;
>      isc->reject = ics_simple_reject;
>      isc->resend = ics_simple_resend;
>      isc->eoi = ics_simple_eoi;
> diff --git a/hw/intc/xics_kvm.c b/hw/intc/xics_kvm.c
> index 0a3daca3bb5a..42e0e0ef8484 100644
> --- a/hw/intc/xics_kvm.c
> +++ b/hw/intc/xics_kvm.c
> @@ -102,7 +102,7 @@ static int icp_set_kvm_state(ICPState *icp, int 
> version_id)
>      return 0;
>  }
>  
> -static void icp_kvm_reset(DeviceState *dev)
> +static void icp_kvm_reset(void *dev)
>  {
>      ICPState *icp = ICP(dev);
>  
> @@ -146,12 +146,17 @@ static void icp_kvm_cpu_setup(ICPState *icp, PowerPCCPU 
> *cpu)
>      icp->cap_irq_xics_enabled = true;
>  }
>  
> +static void icp_kvm_realize(DeviceState *dev, Error **errp)
> +{
> +    qemu_register_reset(icp_kvm_reset, dev);
> +}
> +
>  static void icp_kvm_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
>      ICPStateClass *icpc = ICP_CLASS(klass);
>  
> -    dc->reset = icp_kvm_reset;
> +    dc->realize = icp_kvm_realize;
>      icpc->pre_save = icp_get_kvm_state;
>      icpc->post_load = icp_set_kvm_state;
>      icpc->cpu_setup = icp_kvm_cpu_setup;
> @@ -293,7 +298,7 @@ static void ics_kvm_set_irq(void *opaque, int srcno, int 
> val)
>      }
>  }
>  
> -static void ics_kvm_reset(DeviceState *dev)
> +static void ics_kvm_reset(void *dev)
>  {
>      ICSState *ics = ICS_SIMPLE(dev);
>      int i;
> @@ -324,15 +329,15 @@ static void ics_kvm_realize(DeviceState *dev, Error 
> **errp)
>      }
>      ics->irqs = g_malloc0(ics->nr_irqs * sizeof(ICSIRQState));
>      ics->qirqs = qemu_allocate_irqs(ics_kvm_set_irq, ics, ics->nr_irqs);
> +
> +    qemu_register_reset(ics_kvm_reset, dev);
>  }
>  
>  static void ics_kvm_class_init(ObjectClass *klass, void *data)
>  {
> -    DeviceClass *dc = DEVICE_CLASS(klass);
>      ICSStateClass *icsc = ICS_BASE_CLASS(klass);
>  
>      icsc->realize = ics_kvm_realize;
> -    dc->reset = ics_kvm_reset;
>      icsc->pre_save = ics_get_kvm_state;
>      icsc->post_load = ics_set_kvm_state;
>  }
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 14192accf486..c3bb99160545 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -106,7 +106,6 @@ static int try_create_xics(sPAPRMachineState *spapr, 
> const char *type_ics,
>      int i;
>  
>      ics = ICS_SIMPLE(object_new(type_ics));
> -    qdev_set_parent_bus(DEVICE(ics), sysbus_get_default());
>      object_property_add_child(OBJECT(spapr), "ics", OBJECT(ics), NULL);
>      object_property_set_int(OBJECT(ics), nr_irqs, "nr-irqs", &err);
>      object_property_add_const_link(OBJECT(ics), "xics", OBJECT(xi), NULL);
> @@ -123,7 +122,6 @@ static int try_create_xics(sPAPRMachineState *spapr, 
> const char *type_ics,
>          ICPState *icp = &spapr->icps[i];
>  
>          object_initialize(icp, sizeof(*icp), type_icp);
> -        qdev_set_parent_bus(DEVICE(icp), sysbus_get_default());
>          object_property_add_child(OBJECT(spapr), "icp[*]", OBJECT(icp), 
> NULL);
>          object_property_add_const_link(OBJECT(icp), "xics", OBJECT(xi), 
> NULL);
>          object_property_set_bool(OBJECT(icp), true, "realized", &err);

Reviewed-by: Thomas Huth <address@hidden>
Tested-by: Thomas Huth <address@hidden>




reply via email to

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