On Mon, Apr 24, 2017 at 09:12:29PM +0800, Herongguang (Stephen) wrote: > If a pci device is not reset by VM (by writing into config space) > and unplugged by VM, after that when VM reboots, qemu may assert: > pcibus_reset: Assertion `bus->irq_count[i] == 0' failed > > Signed-off-by: herongguang <herongguang...@huawei.com>
Good grief, I can't believe we have had this bug for so long. Thanks a lot for finding this. Pls Cc stable on this patch. > --- > > Is there need to call pci_do_device_reset()? I don't think so, why? > --- > hw/pci/pci.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index 259483b..afe6397 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -1078,6 +1078,7 @@ static void pci_qdev_unrealize(DeviceState *dev, Error > **errp) > > pci_unregister_io_regions(pci_dev); > pci_del_option_rom(pci_dev); > + pci_device_deassert_intx(pci_dev); I think the right place to call this is after class exit when we know no one will try to assert the interrupt. > > if (pc->exit) { > pc->exit(pci_dev); > -- > 1.7.12.4