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 | 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 | 105 | PCIBus *pci_register_bus(DeviceState *parent, const char *name, |
| 91 | 106 | pci_set_irq_fn set_irq, pci_map_irq_fn map_irq, |
| 92 | 107 | qemu_irq *pic, int devfn_min, int nirq) |
| ... | ... | @@ -105,6 +120,7 @@ PCIBus *pci_register_bus(DeviceState *parent, const char *name, |
| 105 | 120 | bus->next = first_bus; |
| 106 | 121 | first_bus = bus; |
| 107 | 122 | register_savevm("PCIBUS", nbus++, 1, pcibus_save, pcibus_load, bus); |
| 123 | + qemu_register_reset(pci_bus_reset, 0, bus); | |
| 108 | 124 | return bus; |
| 109 | 125 | } |
| 110 | 126 | ... | ... |