From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57448) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aAbVl-0004tM-Tl for qemu-devel@nongnu.org; Sun, 20 Dec 2015 05:46:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aAbVh-0005jL-DT for qemu-devel@nongnu.org; Sun, 20 Dec 2015 05:46:45 -0500 Received: from [59.151.112.132] (port=10225 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aAbVe-0005iz-FS for qemu-devel@nongnu.org; Sun, 20 Dec 2015 05:46:41 -0500 References: <1450436632-23980-1-git-send-email-caoj.fnst@cn.fujitsu.com> <1450436632-23980-4-git-send-email-caoj.fnst@cn.fujitsu.com> <56768170.2080602@gmail.com> From: Cao jin Message-ID: <56768766.1040300@cn.fujitsu.com> Date: Sun, 20 Dec 2015 18:48:06 +0800 MIME-Version: 1.0 In-Reply-To: <56768170.2080602@gmail.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 3/5] PXB: convert to realize() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: marcel@redhat.com, qemu-devel@nongnu.org Cc: ehabkost@redhat.com, mst@redhat.com, pbonzini@redhat.com, leon.alrae@imgtec.com, aurelien@aurel32.net, rth@twiddle.net Hi, On 12/20/2015 06:22 PM, Marcel Apfelbaum wrote: > > Hi, > > On 12/18/2015 01:03 PM, Cao jin wrote: >> Signed-off-by: Cao jin >> --- >> hw/pci-bridge/pci_expander_bridge.c | 24 ++++++++++++++---------- >> 1 file changed, 14 insertions(+), 10 deletions(-) >> >> diff --git a/hw/pci-bridge/pci_expander_bridge.c >> b/hw/pci-bridge/pci_expander_bridge.c >> index 57f8a37..cc975f6 100644 >> --- a/hw/pci-bridge/pci_expander_bridge.c >> +++ b/hw/pci-bridge/pci_expander_bridge.c >> @@ -145,19 +145,19 @@ static const TypeInfo pxb_host_info = { >> * Returns 0 on successs, -1 if i440fx host was not >> * found or the bus number is already in use. >> */ >> -static int pxb_register_bus(PCIDevice *dev, PCIBus *pxb_bus) >> +static int pxb_register_bus(PCIDevice *dev, PCIBus *pxb_bus, Error >> **errp) > > If you add an err parameter, maybe the function should return void. > Ok, will modify it in V2. Actually, both style are fine with me:) > >> { >> 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."); >> + error_setg(errp, "PXB devices can be attached only to root >> bus."); >> return -1; >> } >> >> 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); >> + error_setg(errp, "Bus %d is already in use.", pxb_bus_num); >> return -1; >> } >> } >> @@ -193,7 +193,7 @@ static gint pxb_compare(gconstpointer a, >> gconstpointer b) >> 0; >> } >> >> -static int pxb_dev_initfn(PCIDevice *dev) >> +static void pxb_dev_realize(PCIDevice *dev, Error **errp) >> { >> PXBDev *pxb = PXB_DEV(dev); >> DeviceState *ds, *bds; >> @@ -202,8 +202,8 @@ static int pxb_dev_initfn(PCIDevice *dev) >> >> 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) { >> @@ -225,8 +225,8 @@ static int pxb_dev_initfn(PCIDevice *dev) >> >> PCI_HOST_BRIDGE(ds)->bus = bus; >> >> - if (pxb_register_bus(dev, bus)) { >> - return -EINVAL; >> + if (pxb_register_bus(dev, bus, errp)) { >> + goto err_register_bus; >> } >> >> qdev_init_nofail(ds); >> @@ -237,7 +237,11 @@ static int pxb_dev_initfn(PCIDevice *dev) >> 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; >> + >> +err_register_bus: >> + object_unref(OBJECT(ds)); >> + object_unref(OBJECT(bds)); >> + object_unref(OBJECT(bus)); > > > The order should be in the reverse order of creation: > bds, bus, ds > Ok, I can do that. But it seems the order here doesn`t matter? Is there dependency among these three? > >> } >> >> static void pxb_dev_exitfn(PCIDevice *pci_dev) >> @@ -259,7 +263,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; > > If init is converted to realize, maybe the exit should be converted to > unrealize? > Yup, I agree with you from the point that the names should be antonym. But it seems there is no PCIDeviceClass.unrealize:( And I am also not aware why there is no comment for .exit while there is for .init. It is appreciated if somebody could tell me the history O:-) > > Thanks, > Marcel > >> k->vendor_id = PCI_VENDOR_ID_REDHAT; >> k->device_id = PCI_DEVICE_ID_REDHAT_PXB; >> > > > > . > -- Yours Sincerely, Cao Jin