Commit 6eaa68474671a6c69f30b185ce3c87ff18f85e01
Committed by
Anthony Liguori
1 parent
efeea6d0
Add pci_bus_reset() function.
To reset internal irq handling data structures. Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Yaniv Kamay <ykamay@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
1 changed file
with
16 additions
and
0 deletions
hw/pci.c
| @@ -87,6 +87,21 @@ static int pcibus_load(QEMUFile *f, void *opaque, int version_id) | @@ -87,6 +87,21 @@ static int pcibus_load(QEMUFile *f, void *opaque, int version_id) | ||
| 87 | return 0; | 87 | return 0; |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | +static void pci_bus_reset(void *opaque) | ||
| 91 | +{ | ||
| 92 | + PCIBus *bus = (PCIBus *)opaque; | ||
| 93 | + int i; | ||
| 94 | + | ||
| 95 | + for (i = 0; i < bus->nirq; i++) { | ||
| 96 | + bus->irq_count[i] = 0; | ||
| 97 | + } | ||
| 98 | + for (i = 0; i < 256; i++) { | ||
| 99 | + if (bus->devices[i]) | ||
| 100 | + memset(bus->devices[i]->irq_state, 0, | ||
| 101 | + sizeof(bus->devices[i]->irq_state)); | ||
| 102 | + } | ||
| 103 | +} | ||
| 104 | + | ||
| 90 | PCIBus *pci_register_bus(DeviceState *parent, const char *name, | 105 | PCIBus *pci_register_bus(DeviceState *parent, const char *name, |
| 91 | pci_set_irq_fn set_irq, pci_map_irq_fn map_irq, | 106 | pci_set_irq_fn set_irq, pci_map_irq_fn map_irq, |
| 92 | qemu_irq *pic, int devfn_min, int nirq) | 107 | qemu_irq *pic, int devfn_min, int nirq) |
| @@ -105,6 +120,7 @@ PCIBus *pci_register_bus(DeviceState *parent, const char *name, | @@ -105,6 +120,7 @@ PCIBus *pci_register_bus(DeviceState *parent, const char *name, | ||
| 105 | bus->next = first_bus; | 120 | bus->next = first_bus; |
| 106 | first_bus = bus; | 121 | first_bus = bus; |
| 107 | register_savevm("PCIBUS", nbus++, 1, pcibus_save, pcibus_load, bus); | 122 | register_savevm("PCIBUS", nbus++, 1, pcibus_save, pcibus_load, bus); |
| 123 | + qemu_register_reset(pci_bus_reset, 0, bus); | ||
| 108 | return bus; | 124 | return bus; |
| 109 | } | 125 | } |
| 110 | 126 |