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 | ... | ... |