From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33127) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VZovV-0003o2-RC for qemu-devel@nongnu.org; Fri, 25 Oct 2013 17:28:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VZovJ-0002ZU-AE for qemu-devel@nongnu.org; Fri, 25 Oct 2013 17:28:13 -0400 From: Alexander Graf Date: Fri, 25 Oct 2013 23:27:39 +0200 Message-Id: <1382736474-32128-15-git-send-email-agraf@suse.de> In-Reply-To: <1382736474-32128-1-git-send-email-agraf@suse.de> References: <1382736474-32128-1-git-send-email-agraf@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL 14/29] xics: convert init() to realize() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU Developers Cc: Blue Swirl , Alexey Kardashevskiy , "qemu-ppc@nongnu.org list:PowerPC" , Anthony Liguori , Aurelien Jarno From: Alexey Kardashevskiy This fixes XICS according new QOM rules. This converts ICS's init() callbacks to realize(). This converts legacy qdev_init_nofail() to property_set(realized). Signed-off-by: Alexey Kardashevskiy Reviewed-by: Andreas F=C3=A4rber Signed-off-by: Alexander Graf --- hw/intc/xics.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/hw/intc/xics.c b/hw/intc/xics.c index eeb64f5..76654db 100644 --- a/hw/intc/xics.c +++ b/hw/intc/xics.c @@ -479,15 +479,17 @@ static const VMStateDescription vmstate_ics =3D { }, }; =20 -static int ics_realize(DeviceState *dev) +static void ics_realize(DeviceState *dev, Error **errp) { ICSState *ics =3D ICS(dev); =20 + if (!ics->nr_irqs) { + error_setg(errp, "Number of interrupts needs to be greater 0"); + return; + } ics->irqs =3D g_malloc0(ics->nr_irqs * sizeof(ICSIRQState)); ics->islsi =3D g_malloc0(ics->nr_irqs * sizeof(bool)); ics->qirqs =3D qemu_allocate_irqs(ics_set_irq, ics, ics->nr_irqs); - - return 0; } =20 static void ics_class_init(ObjectClass *klass, void *data) @@ -495,7 +497,7 @@ static void ics_class_init(ObjectClass *klass, void *= data) DeviceClass *dc =3D DEVICE_CLASS(klass); ICSStateClass *isc =3D ICS_CLASS(klass); =20 - dc->init =3D ics_realize; + dc->realize =3D ics_realize; dc->vmsd =3D &vmstate_ics; dc->reset =3D ics_reset; isc->post_load =3D ics_post_load; @@ -691,8 +693,14 @@ static void xics_realize(DeviceState *dev, Error **e= rrp) { XICSState *icp =3D XICS(dev); ICSState *ics =3D icp->ics; + Error *error =3D NULL; int i; =20 + if (!icp->nr_servers) { + error_setg(errp, "Number of servers needs to be greater 0"); + return; + } + /* Registration of global state belongs into realize */ spapr_rtas_register("ibm,set-xive", rtas_set_xive); spapr_rtas_register("ibm,get-xive", rtas_get_xive); @@ -707,7 +715,11 @@ static void xics_realize(DeviceState *dev, Error **e= rrp) ics->nr_irqs =3D icp->nr_irqs; ics->offset =3D XICS_IRQ_BASE; ics->icp =3D icp; - qdev_init_nofail(DEVICE(ics)); + object_property_set_bool(OBJECT(icp->ics), true, "realized", &error)= ; + if (error) { + error_propagate(errp, error); + return; + } =20 icp->ss =3D g_malloc0(icp->nr_servers*sizeof(ICPState)); for (i =3D 0; i < icp->nr_servers; i++) { @@ -715,7 +727,11 @@ static void xics_realize(DeviceState *dev, Error **e= rrp) object_initialize(&icp->ss[i], sizeof(icp->ss[i]), TYPE_ICP); snprintf(buffer, sizeof(buffer), "icp[%d]", i); object_property_add_child(OBJECT(icp), buffer, OBJECT(&icp->ss[i= ]), NULL); - qdev_init_nofail(DEVICE(&icp->ss[i])); + object_property_set_bool(OBJECT(&icp->ss[i]), true, "realized", = &error); + if (error) { + error_propagate(errp, error); + return; + } } } =20 --=20 1.8.1.4