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 <syeon.hw...@samsung.com>
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