[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] ioemu: Save PCI device INTx line states.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1209028483 -3600 # Node ID 4e6577dec72973e49b2abf7dc0b1cdbe4f91bf45 # Parent ae2b5cf5a68647394e503957ff28e1a334efdab9 ioemu: Save PCI device INTx line states. Otherwise, ioemu can be out of sync with the hypervisor after restoring guest state, if INTx lines were asserted when the state was saved. This prevents ioemu from setting the line to zero in Xen (because it thinks the line is already zero). This can allow th eguest to enter an endless IRQ loop and hang. Signed-off-by: Kazuhiro Suzuki <kaz@xxxxxxxxxxxxxx> Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> --- tools/ioemu/hw/pci.c | 16 ++++++++++++++-- 1 files changed, 14 insertions(+), 2 deletions(-) diff -r ae2b5cf5a686 -r 4e6577dec729 tools/ioemu/hw/pci.c --- a/tools/ioemu/hw/pci.c Thu Apr 24 10:01:27 2008 +0100 +++ b/tools/ioemu/hw/pci.c Thu Apr 24 10:14:43 2008 +0100 @@ -79,18 +79,30 @@ int pci_bus_num(PCIBus *s) void pci_device_save(PCIDevice *s, QEMUFile *f) { - qemu_put_be32(f, 1); /* PCI device version */ + uint8_t irq_state = 0; + int i; + qemu_put_be32(f, 2); /* PCI device version */ qemu_put_buffer(f, s->config, 256); + for (i = 0; i < 4; i++) + irq_state |= !!s->irq_state[i] << i; + qemu_put_buffer(f, &irq_state, 1); } int pci_device_load(PCIDevice *s, QEMUFile *f) { uint32_t version_id; version_id = qemu_get_be32(f); - if (version_id != 1) + if (version_id != 1 && version_id != 2) return -EINVAL; qemu_get_buffer(f, s->config, 256); pci_update_mappings(s); + if (version_id == 2) { + uint8_t irq_state; + int i; + qemu_get_buffer(f, &irq_state, 1); + for (i = 0; i < 4; i++) + pci_set_irq(s, i, !!(irq_state >> i)); + } return 0; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |