|
|
96a5f8 |
From 95a59bc743f27d7d3fdcc1b0ff131f240e01e839 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 |
|
|
|
96a5f8 |
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
|
96a5f8 |
---
|
|
|
96a5f8 |
hw/pc_piix.c | 16 ++++++++++++++++
|
|
|
96a5f8 |
hw/qxl.c | 9 ++++-----
|
|
|
96a5f8 |
2 files changed, 20 insertions(+), 5 deletions(-)
|
|
|
96a5f8 |
|
|
|
96a5f8 |
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
|
|
|
96a5f8 |
index e3f8e96..a1a6794 100644
|
|
|
96a5f8 |
--- a/hw/pc_piix.c
|
|
|
96a5f8 |
+++ b/hw/pc_piix.c
|
|
|
96a5f8 |
@@ -317,6 +317,14 @@ static QEMUMachine pc_i440fx_machine_v1_4 = {
|
|
|
96a5f8 |
.driver = "virtio-net-pci", \
|
|
|
96a5f8 |
.property = "mq", \
|
|
|
96a5f8 |
.value = "off", \
|
|
|
96a5f8 |
+ },{ \
|
|
|
96a5f8 |
+ .driver = "qxl", \
|
|
|
96a5f8 |
+ .property = "rom_size", \
|
|
|
96a5f8 |
+ .value = stringify(16384), \
|
|
|
96a5f8 |
+ },{\
|
|
|
96a5f8 |
+ .driver = "qxl-vga", \
|
|
|
96a5f8 |
+ .property = "rom_size", \
|
|
|
96a5f8 |
+ .value = stringify(16384), \
|
|
|
96a5f8 |
}
|
|
|
96a5f8 |
|
|
|
96a5f8 |
static QEMUMachine pc_machine_v1_3 = {
|
|
|
96a5f8 |
@@ -413,6 +421,14 @@ static QEMUMachine pc_machine_v1_2 = {
|
|
|
96a5f8 |
.driver = "virtio-blk-pci",\
|
|
|
96a5f8 |
.property = "config-wce",\
|
|
|
96a5f8 |
.value = "off",\
|
|
|
96a5f8 |
+ },{ \
|
|
|
96a5f8 |
+ .driver = "qxl", \
|
|
|
96a5f8 |
+ .property = "rom_size", \
|
|
|
96a5f8 |
+ .value = stringify(8192), \
|
|
|
96a5f8 |
+ },{\
|
|
|
96a5f8 |
+ .driver = "qxl-vga", \
|
|
|
96a5f8 |
+ .property = "rom_size", \
|
|
|
96a5f8 |
+ .value = stringify(8192), \
|
|
|
96a5f8 |
}
|
|
|
96a5f8 |
|
|
|
96a5f8 |
static QEMUMachine pc_machine_v1_1 = {
|
|
|
96a5f8 |
diff --git a/hw/qxl.c b/hw/qxl.c
|
|
|
96a5f8 |
index 2e1c5e2..436e375 100644
|
|
|
96a5f8 |
--- a/hw/qxl.c
|
|
|
96a5f8 |
+++ b/hw/qxl.c
|
|
|
96a5f8 |
@@ -302,16 +302,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);
|
|
|
96a5f8 |
@@ -2296,6 +2294,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 |
|