dcavalca / rpms / qemu

Forked from rpms/qemu a year ago
Clone

Blame 0005-qxl-Add-rom_size-compat-property-fix-migration-from-.patch

7fae7f
From ae8d642477d87287b42b0b40c133637dd1cdd8b9 Mon Sep 17 00:00:00 2001
96a5f8
From: Cole Robinson <crobinso@redhat.com>
96a5f8
Date: Tue, 19 Feb 2013 16:19:02 -0500
96a5f8
Subject: [PATCH] qxl: Add rom_size compat property, fix migration from 1.2
96a5f8
96a5f8
Commit 038c1879a00153b14bce113315b693e8c2944fa9 changed the qxl rom
96a5f8
size to 8192, which fixes incoming migration from qemu 1.0. However
96a5f8
from qemu 1.2 and 1.3 had rom size 16384, so incoming migration
96a5f8
from those versions is now broken.
96a5f8
96a5f8
Add a rom_size compat property. 1.2 and 1.3 get 16384, everything
96a5f8
else is 8192.
96a5f8
96a5f8
This isn't actually fool proof, since rom_size can be dependent on
96a5f8
the version of spice qemu is built against:
96a5f8
96a5f8
https://lists.gnu.org/archive/html/qemu-devel/2013-02/msg03154.html
96a5f8
96a5f8
However these sizes match what native Fedora packages get, so it's
96a5f8
good enough for now.
96a5f8
---
7fae7f
 hw/display/qxl.c  |  9 ++++-----
7fae7f
 hw/i386/pc_piix.c | 16 ++++++++++++++++
96a5f8
 2 files changed, 20 insertions(+), 5 deletions(-)
96a5f8
7fae7f
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
7fae7f
index c475cb1..74f07c0 100644
7fae7f
--- a/hw/display/qxl.c
7fae7f
+++ b/hw/display/qxl.c
7fae7f
@@ -306,16 +306,14 @@ static inline uint32_t msb_mask(uint32_t val)
96a5f8
     return mask;
96a5f8
 }
96a5f8
 
96a5f8
-static ram_addr_t qxl_rom_size(void)
96a5f8
+static void check_qxl_rom_size(PCIQXLDevice *d)
96a5f8
 {
96a5f8
     uint32_t required_rom_size = sizeof(QXLRom) + sizeof(QXLModes) +
96a5f8
                                  sizeof(qxl_modes);
96a5f8
-    uint32_t rom_size = 8192; /* two pages */
96a5f8
 
96a5f8
     required_rom_size = MAX(required_rom_size, TARGET_PAGE_SIZE);
96a5f8
     required_rom_size = msb_mask(required_rom_size * 2 - 1);
96a5f8
-    assert(required_rom_size <= rom_size);
96a5f8
-    return rom_size;
96a5f8
+    assert(required_rom_size <= d->rom_size);
96a5f8
 }
96a5f8
 
96a5f8
 static void init_qxl_rom(PCIQXLDevice *d)
96a5f8
@@ -1979,7 +1977,7 @@ static int qxl_init_common(PCIQXLDevice *qxl)
96a5f8
     pci_set_byte(&config[PCI_REVISION_ID], pci_device_rev);
96a5f8
     pci_set_byte(&config[PCI_INTERRUPT_PIN], 1);
96a5f8
 
96a5f8
-    qxl->rom_size = qxl_rom_size();
96a5f8
+    check_qxl_rom_size(qxl);
96a5f8
     memory_region_init_ram(&qxl->rom_bar, "qxl.vrom", qxl->rom_size);
96a5f8
     vmstate_register_ram(&qxl->rom_bar, &qxl->pci.qdev);
96a5f8
     init_qxl_rom(qxl);
7fae7f
@@ -2302,6 +2300,7 @@ static Property qxl_properties[] = {
96a5f8
         DEFINE_PROP_UINT32("vram64_size_mb", PCIQXLDevice, vram_size_mb, -1),
96a5f8
         DEFINE_PROP_UINT32("vgamem_mb", PCIQXLDevice, vgamem_size_mb, 16),
96a5f8
         DEFINE_PROP_INT32("surfaces", PCIQXLDevice, ssd.num_surfaces, 1024),
96a5f8
+        DEFINE_PROP_UINT32("rom_size", PCIQXLDevice, rom_size, 8192),
96a5f8
         DEFINE_PROP_END_OF_LIST(),
96a5f8
 };
96a5f8
 
7fae7f
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
7fae7f
index 48fb7b7..2307d26 100644
7fae7f
--- a/hw/i386/pc_piix.c
7fae7f
+++ b/hw/i386/pc_piix.c
7fae7f
@@ -369,6 +369,14 @@ static QEMUMachine pc_i440fx_machine_v1_4 = {
7fae7f
             .driver   = "e1000",\
7fae7f
             .property = "autonegotiation",\
7fae7f
             .value    = "off",\
7fae7f
+        },{ \
7fae7f
+            .driver   = "qxl", \
7fae7f
+            .property = "rom_size", \
7fae7f
+            .value    = stringify(16384), \
7fae7f
+        },{\
7fae7f
+            .driver   = "qxl-vga", \
7fae7f
+            .property = "rom_size", \
7fae7f
+            .value    = stringify(16384), \
7fae7f
         }
7fae7f
 
7fae7f
 static QEMUMachine pc_machine_v1_3 = {
7fae7f
@@ -465,6 +473,14 @@ static QEMUMachine pc_machine_v1_2 = {
7fae7f
             .driver   = "virtio-blk-pci",\
7fae7f
             .property = "config-wce",\
7fae7f
             .value    = "off",\
7fae7f
+        },{ \
7fae7f
+            .driver   = "qxl", \
7fae7f
+            .property = "rom_size", \
7fae7f
+            .value    = stringify(8192), \
7fae7f
+        },{\
7fae7f
+            .driver   = "qxl-vga", \
7fae7f
+            .property = "rom_size", \
7fae7f
+            .value    = stringify(8192), \
7fae7f
         }
7fae7f
 
7fae7f
 static QEMUMachine pc_machine_v1_1 = {