aboutsummaryrefslogtreecommitdiff
path: root/hw/sysbus.h
diff options
context:
space:
mode:
authorAlexey Korolev <akorolex@gmail.com>2013-02-22 16:58:44 +1300
committerMichael S. Tsirkin <mst@redhat.com>2013-02-27 17:23:22 +0200
commit7feb640cf32d86f91f5a624136345eb6a63eab42 (patch)
tree42face6a4260bb03af364e356f760d7516139b6a /hw/sysbus.h
parent2af234e61d59f39ae16ba882271e7c4fef2c41c1 (diff)
Fix guest OS hang when 64bit PCI bar present
This patch addresses the issue fully described here: http://lists.nongnu.org/archive/html/qemu-devel/2013-02/msg01804.html Linux kernels prior to 2.6.36 do not disable the PCI device during enumeration process. Since lower and higher parts of a 64bit BAR are programmed separately this leads to qemu receiving a request to occupy a completely wrong address region for a short period of time. We have found that the boot process screws up completely if kvm-apic range is overlapped even for a short period of time (it is fine for other regions though). This patch raises the priority of the kvm-apic memory region, so it is never pushed out by PCI devices. The patch is quite safe as it does not touch memory manager. Signed-off-by: Alexey Korolev <akorolex@gmail.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw/sysbus.h')
-rw-r--r--hw/sysbus.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/hw/sysbus.h b/hw/sysbus.h
index a7fcded6e7..2100bd7d07 100644
--- a/hw/sysbus.h
+++ b/hw/sysbus.h
@@ -56,6 +56,8 @@ void sysbus_init_ioports(SysBusDevice *dev, pio_addr_t ioport, pio_addr_t size);
void sysbus_connect_irq(SysBusDevice *dev, int n, qemu_irq irq);
void sysbus_mmio_map(SysBusDevice *dev, int n, hwaddr addr);
+void sysbus_mmio_map_overlap(SysBusDevice *dev, int n, hwaddr addr,
+ unsigned priority);
void sysbus_add_memory(SysBusDevice *dev, hwaddr addr,
MemoryRegion *mem);
void sysbus_add_memory_overlap(SysBusDevice *dev, hwaddr addr,