From: Gleb Natapov Date: Wed, 17 Jun 2009 16:32:00 +0000 (+0300) Subject: Add pci_bus_reset() function. X-Git-Tag: qemu-xen-4.2.0~6785 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=6eaa68474671a6c69f30b185ce3c87ff18f85e01;p=qemu-xen.git Add pci_bus_reset() function. To reset internal irq handling data structures. Signed-off-by: Gleb Natapov Signed-off-by: Yaniv Kamay Signed-off-by: Anthony Liguori --- diff --git a/hw/pci.c b/hw/pci.c index 0a738dbd6b..140cdbaa29 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -87,6 +87,21 @@ static int pcibus_load(QEMUFile *f, void *opaque, int version_id) return 0; } +static void pci_bus_reset(void *opaque) +{ + PCIBus *bus = (PCIBus *)opaque; + int i; + + for (i = 0; i < bus->nirq; i++) { + bus->irq_count[i] = 0; + } + for (i = 0; i < 256; i++) { + if (bus->devices[i]) + memset(bus->devices[i]->irq_state, 0, + sizeof(bus->devices[i]->irq_state)); + } +} + PCIBus *pci_register_bus(DeviceState *parent, const char *name, pci_set_irq_fn set_irq, pci_map_irq_fn map_irq, qemu_irq *pic, int devfn_min, int nirq) @@ -105,6 +120,7 @@ PCIBus *pci_register_bus(DeviceState *parent, const char *name, bus->next = first_bus; first_bus = bus; register_savevm("PCIBUS", nbus++, 1, pcibus_save, pcibus_load, bus); + qemu_register_reset(pci_bus_reset, 0, bus); return bus; }