aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2009-03-13 18:11:21 +0000
committeraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2009-03-13 18:11:21 +0000
commit5389a9df5363a683ecf8b11fdfc2e6a657d5ad5d (patch)
tree2309ec596c74016bfaf445f82a39369dd45443aa /hw
parent21fd8325122bcbb4c330e8505fb50f48b7da0643 (diff)
temporarily disable logging around pci config writes (Avi Kivity)
A pci config write may remap the vga linear frame buffer, confusing the memory slot dirty logging logic. Fixed Windows with -vga std. Signed-off-by: Avi Kivity <avi@redhat.com> Sigend-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/branches/stable_0_10_0@6854 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw')
-rw-r--r--hw/vga.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/hw/vga.c b/hw/vga.c
index 98c2234f6b..044b339161 100644
--- a/hw/vga.c
+++ b/hw/vga.c
@@ -2482,6 +2482,17 @@ int isa_vga_mm_init(uint8_t *vga_ram_base,
return 0;
}
+static void pci_vga_write_config(PCIDevice *d,
+ uint32_t address, uint32_t val, int len)
+{
+ PCIVGAState *pvs = container_of(d, PCIVGAState, dev);
+ VGAState *s = &pvs->vga_state;
+
+ vga_dirty_log_stop(s);
+ pci_default_write_config(d, address, val, len);
+ vga_dirty_log_start(s);
+}
+
int pci_vga_init(PCIBus *bus, uint8_t *vga_ram_base,
unsigned long vga_ram_offset, int vga_ram_size,
unsigned long vga_bios_offset, int vga_bios_size)
@@ -2492,7 +2503,7 @@ int pci_vga_init(PCIBus *bus, uint8_t *vga_ram_base,
d = (PCIVGAState *)pci_register_device(bus, "VGA",
sizeof(PCIVGAState),
- -1, NULL, NULL);
+ -1, NULL, pci_vga_write_config);
if (!d)
return -1;
s = &d->vga_state;