From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42183) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xlzyc-000670-Kx for qemu-devel@nongnu.org; Wed, 05 Nov 2014 07:46:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XlzyX-0003OC-Lc for qemu-devel@nongnu.org; Wed, 05 Nov 2014 07:46:18 -0500 Received: from mx1.redhat.com ([209.132.183.28]:35990) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XlzyX-0003N7-Ez for qemu-devel@nongnu.org; Wed, 05 Nov 2014 07:46:13 -0500 Date: Wed, 5 Nov 2014 14:46:09 +0200 From: "Michael S. Tsirkin" Message-ID: <20141105124609.GA4354@redhat.com> References: <1415182311-13799-1-git-send-email-syeon.hwang@samsung.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1415182311-13799-1-git-send-email-syeon.hwang@samsung.com> Subject: Re: [Qemu-devel] [PATCH] pci: fixed mismatch of error-handling between pci_qdev_init() and qdev List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: SeokYeon Hwang Cc: pbonzini@redhat.com, qemu-devel@nongnu.org, armbru@redhat.com On Wed, Nov 05, 2014 at 07:11:51PM +0900, SeokYeon Hwang wrote: > pci_qdev_init() checks whether return value is 0 or not to figure out pci device is initialized successfully. Otherwise, device_realize() in qdev checks that return value is negative value to figure out the device is realized successfully. > When pci device returns positive number, pci_qdev_init() thinks that error is occured and makes the device unregistered. Nevertheless, qdev thinks that device is realized. > Finally, crash is occured by commands like 'qtree' that traverse qdev list. > > So, pci_qdev_init() returns -1 when init function returns not 0. > > Signed-off-by: SeokYeon Hwang Question: is there a simple way to trigger this error? > --- > hw/pci/pci.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index 371699c..c149fdf 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -1766,7 +1766,7 @@ static int pci_qdev_init(DeviceState *qdev) > rc = pc->init(pci_dev); > if (rc != 0) { > do_pci_unregister_device(pci_dev); > - return rc; > + return -1; > } > } > > -- > 2.1.0