From 9bbe1e2fcc7b68b88f79dfcf84ce9d24f56ccb0c Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Thu, 4 Dec 2008 15:08:34 +0200 Subject: Temporarily disable logging around pci config writes (cirrus) A pci config write may remap the cirrus linear frame buffer, confusing the memory slot dirty logging logic. Signed-off-by: Avi Kivity --- hw/cirrus_vga.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c index 09f57041a..9fe1700f6 100644 --- a/hw/cirrus_vga.c +++ b/hw/cirrus_vga.c @@ -3348,6 +3348,17 @@ static void cirrus_pci_mmio_map(PCIDevice *d, int region_num, s->cirrus_mmio_io_addr); } +static void pci_cirrus_write_config(PCIDevice *d, + uint32_t address, uint32_t val, int len) +{ + PCICirrusVGAState *pvs = container_of(d, PCICirrusVGAState, dev); + CirrusVGAState *s = &pvs->cirrus_vga; + + vga_dirty_log_stop((VGAState *)s); + pci_default_write_config(d, address, val, len); + vga_dirty_log_start((VGAState *)s); +} + void pci_cirrus_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base, ram_addr_t vga_ram_offset, int vga_ram_size) { @@ -3361,7 +3372,7 @@ void pci_cirrus_vga_init(PCIBus *bus, DisplayState *ds, uint8_t *vga_ram_base, /* setup PCI configuration registers */ d = (PCICirrusVGAState *)pci_register_device(bus, "Cirrus VGA", sizeof(PCICirrusVGAState), - -1, NULL, NULL); + -1, NULL, pci_cirrus_write_config); pci_conf = d->dev.config; pci_conf[0x00] = (uint8_t) (PCI_VENDOR_CIRRUS & 0xff); pci_conf[0x01] = (uint8_t) (PCI_VENDOR_CIRRUS >> 8); -- cgit v1.2.3