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