From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51920) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aoSpA-0003Oq-6E for qemu-devel@nongnu.org; Fri, 08 Apr 2016 05:35:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aoSp5-0003nc-Or for qemu-devel@nongnu.org; Fri, 08 Apr 2016 05:35:32 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49757) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aoSp5-0003nY-HI for qemu-devel@nongnu.org; Fri, 08 Apr 2016 05:35:27 -0400 Date: Fri, 8 Apr 2016 12:35:22 +0300 From: "Michael S. Tsirkin" Message-ID: <20160408123507-mutt-send-email-mst@redhat.com> References: <20160407195456-mutt-send-email-mst@redhat.com> <1460102154-5579-1-git-send-email-weijg.fnst@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1460102154-5579-1-git-send-email-weijg.fnst@cn.fujitsu.com> Subject: Re: [Qemu-devel] [PATCH v3 2/2] hw/pci-bridge: Convert pxb initialization functions to Error List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wei Jiangang Cc: qemu-devel@nongnu.org, armbru@redhat.com, marcel@redhat.com, Cao jin On Fri, Apr 08, 2016 at 03:55:54PM +0800, Wei Jiangang wrote: > Firstly, convert pxb_dev_init_common() to Error and rename > it to pxb_dev_realize_common(). > Actually, pxb_register_bus() is converted as well. > > And then, > convert pxb_dev_initfn() and pxb_pcie_dev_initfn() to Error, > rename them to pxb_dev_realize() and pxb_pcie_dev_realize() > respectively. > > Signed-off-by: Wei Jiangang > Signed-off-by: Cao jin Pls remember to re-post this after 2.6 is out. > --- > hw/pci-bridge/pci_expander_bridge.c | 52 ++++++++++++++++++------------------- > 1 file changed, 25 insertions(+), 27 deletions(-) > > diff --git a/hw/pci-bridge/pci_expander_bridge.c b/hw/pci-bridge/pci_expander_bridge.c > index ba320bd..cbea9c1 100644 > --- a/hw/pci-bridge/pci_expander_bridge.c > +++ b/hw/pci-bridge/pci_expander_bridge.c > @@ -11,6 +11,7 @@ > */ > > #include "qemu/osdep.h" > +#include "qapi/error.h" > #include "hw/pci/pci.h" > #include "hw/pci/pci_bus.h" > #include "hw/pci/pci_host.h" > @@ -160,30 +161,25 @@ static const TypeInfo pxb_host_info = { > }; > > /* > - * Registers the PXB bus as a child of the i440fx root bus. > - * > - * Returns 0 on successs, -1 if i440fx host was not > - * found or the bus number is already in use. > + * Registers the PXB bus as a child of pci host root bus. > */ > -static int pxb_register_bus(PCIDevice *dev, PCIBus *pxb_bus) > +static void pxb_register_bus(PCIDevice *dev, PCIBus *pxb_bus, Error **errp) > { > PCIBus *bus = dev->bus; > int pxb_bus_num = pci_bus_num(pxb_bus); > > if (bus->parent_dev) { > - error_report("PXB devices can be attached only to root bus."); > - return -1; > + error_setg(errp, "PXB devices can be attached only to root bus"); > + return; > } > > QLIST_FOREACH(bus, &bus->child, sibling) { > if (pci_bus_num(bus) == pxb_bus_num) { > - error_report("Bus %d is already in use.", pxb_bus_num); > - return -1; > + error_setg(errp, "Bus %d is already in use", pxb_bus_num); > + return; > } > } > QLIST_INSERT_HEAD(&dev->bus->child, pxb_bus, sibling); > - > - return 0; > } > > static int pxb_map_irq_fn(PCIDevice *pci_dev, int pin) > @@ -213,17 +209,18 @@ static gint pxb_compare(gconstpointer a, gconstpointer b) > 0; > } > > -static int pxb_dev_init_common(PCIDevice *dev, bool pcie) > +static void pxb_dev_realize_common(PCIDevice *dev, bool pcie, Error **errp) > { > PXBDev *pxb = convert_to_pxb(dev); > DeviceState *ds, *bds = NULL; > PCIBus *bus; > const char *dev_name = NULL; > + Error *local_err = NULL; > > if (pxb->numa_node != NUMA_NODE_UNASSIGNED && > pxb->numa_node >= nb_numa_nodes) { > - error_report("Illegal numa node %d.", pxb->numa_node); > - return -EINVAL; > + error_setg(errp, "Illegal numa node %d", pxb->numa_node); > + return; > } > > if (dev->qdev.id && *dev->qdev.id) { > @@ -248,7 +245,9 @@ static int pxb_dev_init_common(PCIDevice *dev, bool pcie) > > PCI_HOST_BRIDGE(ds)->bus = bus; > > - if (pxb_register_bus(dev, bus)) { > + pxb_register_bus(dev, bus, &local_err); > + if (local_err) { > + error_propagate(errp, local_err); > goto err_register_bus; > } > > @@ -262,23 +261,22 @@ static int pxb_dev_init_common(PCIDevice *dev, bool pcie) > pci_config_set_class(dev->config, PCI_CLASS_BRIDGE_HOST); > > pxb_dev_list = g_list_insert_sorted(pxb_dev_list, pxb, pxb_compare); > - return 0; > + return; > > err_register_bus: > object_unref(OBJECT(bds)); > object_unparent(OBJECT(bus)); > object_unref(OBJECT(ds)); > - return -EINVAL; > } > > -static int pxb_dev_initfn(PCIDevice *dev) > +static void pxb_dev_realize(PCIDevice *dev, Error **errp) > { > if (pci_bus_is_express(dev->bus)) { > - error_report("pxb devices cannot reside on a PCIe bus!"); > - return -EINVAL; > + error_setg(errp, "pxb devices cannot reside on a PCIe bus"); > + return; > } > > - return pxb_dev_init_common(dev, false); > + pxb_dev_realize_common(dev, false, errp); > } > > static void pxb_dev_exitfn(PCIDevice *pci_dev) > @@ -300,7 +298,7 @@ static void pxb_dev_class_init(ObjectClass *klass, void *data) > DeviceClass *dc = DEVICE_CLASS(klass); > PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > > - k->init = pxb_dev_initfn; > + k->realize = pxb_dev_realize; > k->exit = pxb_dev_exitfn; > k->vendor_id = PCI_VENDOR_ID_REDHAT; > k->device_id = PCI_DEVICE_ID_REDHAT_PXB; > @@ -318,14 +316,14 @@ static const TypeInfo pxb_dev_info = { > .class_init = pxb_dev_class_init, > }; > > -static int pxb_pcie_dev_initfn(PCIDevice *dev) > +static void pxb_pcie_dev_realize(PCIDevice *dev, Error **errp) > { > if (!pci_bus_is_express(dev->bus)) { > - error_report("pxb-pcie devices cannot reside on a PCI bus!"); > - return -EINVAL; > + error_setg(errp, "pxb-pcie devices cannot reside on a PCI bus"); > + return; > } > > - return pxb_dev_init_common(dev, true); > + pxb_dev_realize_common(dev, true, errp); > } > > static void pxb_pcie_dev_class_init(ObjectClass *klass, void *data) > @@ -333,7 +331,7 @@ static void pxb_pcie_dev_class_init(ObjectClass *klass, void *data) > DeviceClass *dc = DEVICE_CLASS(klass); > PCIDeviceClass *k = PCI_DEVICE_CLASS(klass); > > - k->init = pxb_pcie_dev_initfn; > + k->realize = pxb_pcie_dev_realize; > k->exit = pxb_dev_exitfn; > k->vendor_id = PCI_VENDOR_ID_REDHAT; > k->device_id = PCI_DEVICE_ID_REDHAT_PXB_PCIE; > -- > 1.9.3 > >