Rebased to version 1.6.0
Support for live migration over RDMA TCG target for aarch64. Support for auto-convergence in live migration ("CPU stunning") The XHCI (USB 3.0) controller supports live migration. New device "nvme" provides a PCI device that implements the NVMe standard. ACPI hotplug of devices behind a PCI bridge is supported
This commit is contained in:
parent
54ffecd5cf
commit
76dcac38f6
1
.gitignore
vendored
1
.gitignore
vendored
@ -22,3 +22,4 @@ qemu-kvm-0.13.0-25fdf4a.tar.gz
|
||||
/qemu-1.5.0.tar.bz2
|
||||
/qemu-1.5.1.tar.bz2
|
||||
/qemu-1.5.2.tar.bz2
|
||||
/qemu-1.6.0.tar.bz2
|
||||
|
212
0001-Fix-migration-from-qemu-kvm.patch
Normal file
212
0001-Fix-migration-from-qemu-kvm.patch
Normal file
@ -0,0 +1,212 @@
|
||||
From 846f71f534a6a026793eacb0c620f54eb30540a8 Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Fri, 16 Aug 2013 12:14:51 -0400
|
||||
Subject: [PATCH] Fix migration from qemu-kvm
|
||||
|
||||
Details are in the code comments for each change. Just lumped this together
|
||||
to ease patch maintenance.
|
||||
|
||||
Everything except the video memory bits can likely be dropped by Fedora 21
|
||||
time frame. Need to figure out if there's anything to upstream for the
|
||||
video memory bits.
|
||||
---
|
||||
hw/acpi/piix4.c | 8 ++++++-
|
||||
hw/display/qxl.c | 9 ++++----
|
||||
hw/i386/pc_piix.c | 61 +++++++++++++++++++++++++++++++++++++++++++++----
|
||||
hw/timer/i8254_common.c | 7 +++++-
|
||||
4 files changed, 74 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
|
||||
index c885690..e6c4c8b 100644
|
||||
--- a/hw/acpi/piix4.c
|
||||
+++ b/hw/acpi/piix4.c
|
||||
@@ -289,7 +289,13 @@ static int acpi_load_old(QEMUFile *f, void *opaque, int version_id)
|
||||
static const VMStateDescription vmstate_acpi = {
|
||||
.name = "piix4_pm",
|
||||
.version_id = 3,
|
||||
- .minimum_version_id = 3,
|
||||
+ /*
|
||||
+ * qemu-kvm 1.2 uses qemu.git version 3 format, but advertised as 2.
|
||||
+ * This allows incoming migration from qemu-kvm, but breaks incoming
|
||||
+ * migration from qemu < 1.3.
|
||||
+ */
|
||||
+ //minimum_version_id = 3,
|
||||
+ .minimum_version_id = 2,
|
||||
.minimum_version_id_old = 1,
|
||||
.load_state_old = acpi_load_old,
|
||||
.post_load = vmstate_acpi_post_load,
|
||||
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
|
||||
index c537057..7ef3eff 100644
|
||||
--- a/hw/display/qxl.c
|
||||
+++ b/hw/display/qxl.c
|
||||
@@ -307,16 +307,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)
|
||||
@@ -1981,7 +1979,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, OBJECT(qxl), "qxl.vrom",
|
||||
qxl->rom_size);
|
||||
vmstate_register_ram(&qxl->rom_bar, &qxl->pci.qdev);
|
||||
@@ -2309,6 +2307,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(),
|
||||
};
|
||||
|
||||
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
|
||||
index 6e1e654..4fd5b6d 100644
|
||||
--- a/hw/i386/pc_piix.c
|
||||
+++ b/hw/i386/pc_piix.c
|
||||
@@ -377,6 +377,24 @@ static QEMUMachine pc_i440fx_machine_v1_4 = {
|
||||
DEFAULT_MACHINE_OPTIONS,
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * 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.
|
||||
+ */
|
||||
+
|
||||
#define PC_COMPAT_1_3 \
|
||||
PC_COMPAT_1_4, \
|
||||
{\
|
||||
@@ -395,8 +413,17 @@ static QEMUMachine pc_i440fx_machine_v1_4 = {
|
||||
.driver = "e1000",\
|
||||
.property = "autonegotiation",\
|
||||
.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 = {
|
||||
.name = "pc-1.3",
|
||||
.desc = "Standard PC",
|
||||
@@ -409,6 +436,19 @@ static QEMUMachine pc_machine_v1_3 = {
|
||||
DEFAULT_MACHINE_OPTIONS,
|
||||
};
|
||||
|
||||
+
|
||||
+/*
|
||||
+ * https://lists.gnu.org/archive/html/qemu-devel/2013-01/msg02540.html
|
||||
+ *
|
||||
+ * qemu-kvm defaulted to vgamem=16MB since at least 0.15, while qemu used
|
||||
+ * 8MB. For qemu 1.2, the default was changed to 16MB for all devices
|
||||
+ * except cirrus.
|
||||
+ *
|
||||
+ * Make sure cirrus uses 16MB for <= pc-1.2 (the qemu-kvm merge),
|
||||
+ * and 16MB always for all others. This will break incoming qemu
|
||||
+ * migration for qemu < 1.3.
|
||||
+ */
|
||||
+
|
||||
#define PC_COMPAT_1_2 \
|
||||
PC_COMPAT_1_3,\
|
||||
{\
|
||||
@@ -432,6 +472,10 @@ static QEMUMachine pc_machine_v1_3 = {
|
||||
.property = "revision",\
|
||||
.value = stringify(3),\
|
||||
},{\
|
||||
+ .driver = "cirrus-vga",\
|
||||
+ .property = "vgamem_mb",\
|
||||
+ .value = stringify(16),\
|
||||
+ },{\
|
||||
.driver = "VGA",\
|
||||
.property = "mmio",\
|
||||
.value = "off",\
|
||||
@@ -462,25 +506,34 @@ static QEMUMachine pc_machine_v1_2 = {
|
||||
},{\
|
||||
.driver = "VGA",\
|
||||
.property = "vgamem_mb",\
|
||||
- .value = stringify(8),\
|
||||
+ .value = stringify(16),\
|
||||
},{\
|
||||
.driver = "vmware-svga",\
|
||||
.property = "vgamem_mb",\
|
||||
- .value = stringify(8),\
|
||||
+ .value = stringify(16),\
|
||||
},{\
|
||||
.driver = "qxl-vga",\
|
||||
.property = "vgamem_mb",\
|
||||
- .value = stringify(8),\
|
||||
+ .value = stringify(16),\
|
||||
},{\
|
||||
.driver = "qxl",\
|
||||
.property = "vgamem_mb",\
|
||||
- .value = stringify(8),\
|
||||
+ .value = stringify(16),\
|
||||
},{\
|
||||
.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 = {
|
||||
.name = "pc-1.1",
|
||||
.desc = "Standard PC",
|
||||
diff --git a/hw/timer/i8254_common.c b/hw/timer/i8254_common.c
|
||||
index 4e5bf0b..cbc00a0 100644
|
||||
--- a/hw/timer/i8254_common.c
|
||||
+++ b/hw/timer/i8254_common.c
|
||||
@@ -267,7 +267,12 @@ static const VMStateDescription vmstate_pit_common = {
|
||||
.pre_save = pit_dispatch_pre_save,
|
||||
.post_load = pit_dispatch_post_load,
|
||||
.fields = (VMStateField[]) {
|
||||
- VMSTATE_UINT32_V(channels[0].irq_disabled, PITCommonState, 3),
|
||||
+ /* qemu-kvm version_id=2 had 'flags' here which is equivalent
|
||||
+ * This fixes incoming migration from qemu-kvm 1.0, but breaks
|
||||
+ * incoming migration from qemu < 1.1
|
||||
+ */
|
||||
+ //VMSTATE_UINT32_V(channels[0].irq_disabled, PITCommonState, 3),
|
||||
+ VMSTATE_UINT32(channels[0].irq_disabled, PITCommonState),
|
||||
VMSTATE_STRUCT_ARRAY(channels, PITCommonState, 3, 2,
|
||||
vmstate_pit_channel, PITChannelState),
|
||||
VMSTATE_INT64(channels[0].next_transition_time,
|
@ -1,64 +0,0 @@
|
||||
From e49e68d5b504f22919c6134e3a06d3838e872d2f Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 19 Feb 2013 14:39:05 -0500
|
||||
Subject: [PATCH] configure: Add --enable-migration-from-qemu-kvm
|
||||
|
||||
This switch will turn on all the migration compat bits needed to
|
||||
perform migration from qemu-kvm to qemu. It's just a stub for now.
|
||||
|
||||
This compat will break incoming migration from qemu < 1.3, but for
|
||||
distros where qemu-kvm was the only shipped package for years it's
|
||||
not a big loss (and I don't know any way to avoid it).
|
||||
---
|
||||
configure | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index eb74510..f558a21 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -179,6 +179,7 @@ xfs=""
|
||||
vhost_net="no"
|
||||
vhost_scsi="no"
|
||||
kvm="no"
|
||||
+migrate_from_kvm="no"
|
||||
gprof="no"
|
||||
debug_tcg="no"
|
||||
debug="no"
|
||||
@@ -776,6 +777,8 @@ for opt do
|
||||
;;
|
||||
--enable-kvm) kvm="yes"
|
||||
;;
|
||||
+ --enable-migration-from-qemu-kvm) migrate_from_kvm="yes"
|
||||
+ ;;
|
||||
--disable-tcg-interpreter) tcg_interpreter="no"
|
||||
;;
|
||||
--enable-tcg-interpreter) tcg_interpreter="yes"
|
||||
@@ -1135,6 +1138,9 @@ echo " --enable-bluez enable bluez stack connectivity"
|
||||
echo " --disable-slirp disable SLIRP userspace network connectivity"
|
||||
echo " --disable-kvm disable KVM acceleration support"
|
||||
echo " --enable-kvm enable KVM acceleration support"
|
||||
+echo " --enable-migration-from-qemu-kvm Allow migration from qemu-kvm."
|
||||
+echo " This will break migration from "
|
||||
+echo " qemu < 1.3 in most cases"
|
||||
echo " --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)"
|
||||
echo " --disable-nptl disable usermode NPTL support"
|
||||
echo " --enable-nptl enable usermode NPTL support"
|
||||
@@ -3553,6 +3559,7 @@ echo "Linux AIO support $linux_aio"
|
||||
echo "ATTR/XATTR support $attr"
|
||||
echo "Install blobs $blobs"
|
||||
echo "KVM support $kvm"
|
||||
+echo "Migrate from qemu-kvm $migrate_from_kvm"
|
||||
echo "TCG interpreter $tcg_interpreter"
|
||||
echo "fdt support $fdt"
|
||||
echo "preadv support $preadv"
|
||||
@@ -3862,6 +3869,9 @@ fi
|
||||
if test "$signalfd" = "yes" ; then
|
||||
echo "CONFIG_SIGNALFD=y" >> $config_host_mak
|
||||
fi
|
||||
+if test "$migrate_from_kvm" = "yes"; then
|
||||
+ echo "CONFIG_MIGRATE_FROM_QEMU_KVM=y" >> $config_host_mak
|
||||
+fi
|
||||
if test "$tcg_interpreter" = "yes" ; then
|
||||
echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
|
||||
fi
|
@ -1,51 +0,0 @@
|
||||
From 28886fb9f7d908bf0f2406dc6f39ee6fe9040cfd Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 19 Feb 2013 14:44:49 -0500
|
||||
Subject: [PATCH] acpi_piix4: Drop minimum_version_id to handle qemu-kvm
|
||||
migration
|
||||
|
||||
qemu-kvm 1.2 advertised version_id=2, but it was not the same
|
||||
format as qemu.git version_id=2.
|
||||
|
||||
commit b0b873a07872f7ab7f66f259c73fb9dd42aa66a9 added the qemu-kvm
|
||||
format to qemu.git, but was forced to call it version_id=3, and
|
||||
bumped minimum_version_id to 3. This breaks incoming migration from
|
||||
qemu-kvm.
|
||||
|
||||
If --enable-migration-from-qemu-kvm is enabled, drop minimum_version_id
|
||||
to 2. Migration from qemu-kvm version_id=2 and qemu 1.3+ version_id=3
|
||||
works, but migration from qemu < 1.3 is broken.
|
||||
---
|
||||
hw/acpi/piix4.c | 15 +++++++++------
|
||||
1 file changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
|
||||
index c4af1cc..95d227d 100644
|
||||
--- a/hw/acpi/piix4.c
|
||||
+++ b/hw/acpi/piix4.c
|
||||
@@ -269,16 +269,19 @@ static int acpi_load_old(QEMUFile *f, void *opaque, int version_id)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-/* qemu-kvm 1.2 uses version 3 but advertised as 2
|
||||
- * To support incoming qemu-kvm 1.2 migration, change version_id
|
||||
- * and minimum_version_id to 2 below (which breaks migration from
|
||||
- * qemu 1.2).
|
||||
- *
|
||||
- */
|
||||
static const VMStateDescription vmstate_acpi = {
|
||||
.name = "piix4_pm",
|
||||
.version_id = 3,
|
||||
+#ifdef CONFIG_MIGRATE_FROM_QEMU_KVM
|
||||
+ /*
|
||||
+ * qemu-kvm 1.2 uses qemu.git version 3 format, but advertised as 2.
|
||||
+ * This allows incoming migration from qemu-kvm, but breaks incoming
|
||||
+ * migration from qemu < 1.3.
|
||||
+ */
|
||||
+ .minimum_version_id = 2,
|
||||
+#else
|
||||
.minimum_version_id = 3,
|
||||
+#endif
|
||||
.minimum_version_id_old = 1,
|
||||
.load_state_old = acpi_load_old,
|
||||
.post_load = vmstate_acpi_post_load,
|
@ -1,34 +0,0 @@
|
||||
From 08aac015d8ba0228dc4277dd7163f014b20c1ca5 Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 19 Feb 2013 15:04:59 -0500
|
||||
Subject: [PATCH] i8254: Fix migration from qemu-kvm < 1.1
|
||||
|
||||
qemu-kvm commit 81bdec908fb2be0ccaff1d4ee67956c509e440ad did this,
|
||||
but the logic can't be carried unconditionally in qemu.git without
|
||||
breaking migration from qemu < 1.1.
|
||||
|
||||
Conditionalize it with --enable-migrate-from-qemu-kvm
|
||||
---
|
||||
hw/timer/i8254_common.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/hw/timer/i8254_common.c b/hw/timer/i8254_common.c
|
||||
index 5342df4..e74afe3 100644
|
||||
--- a/hw/timer/i8254_common.c
|
||||
+++ b/hw/timer/i8254_common.c
|
||||
@@ -275,7 +275,15 @@ static const VMStateDescription vmstate_pit_common = {
|
||||
.pre_save = pit_dispatch_pre_save,
|
||||
.post_load = pit_dispatch_post_load,
|
||||
.fields = (VMStateField[]) {
|
||||
+#ifdef CONFIG_MIGRATE_FROM_QEMU_KVM
|
||||
+ /* qemu-kvm version_id=2 had 'flags' here which is equivalent
|
||||
+ * This fixes incoming migration from qemu-kvm 1.0, but breaks
|
||||
+ * incoming migration from qemu < 1.1
|
||||
+ */
|
||||
+ VMSTATE_UINT32(channels[0].irq_disabled, PITCommonState),
|
||||
+#else
|
||||
VMSTATE_UINT32_V(channels[0].irq_disabled, PITCommonState, 3),
|
||||
+#endif
|
||||
VMSTATE_STRUCT_ARRAY(channels, PITCommonState, 3, 2,
|
||||
vmstate_pit_channel, PITChannelState),
|
||||
VMSTATE_INT64(channels[0].next_transition_time,
|
@ -1,81 +0,0 @@
|
||||
From 9def7a9ed113f7b40e868f663bfaa4f9717219ae Mon Sep 17 00:00:00 2001
|
||||
From: Cole Robinson <crobinso@redhat.com>
|
||||
Date: Tue, 19 Feb 2013 15:35:40 -0500
|
||||
Subject: [PATCH] pc_piix: Add compat handling for qemu-kvm VGA mem size
|
||||
|
||||
Paolo outlines this here:
|
||||
|
||||
https://lists.gnu.org/archive/html/qemu-devel/2013-01/msg02540.html
|
||||
|
||||
qemu-kvm defaulted to vgamem=16MB since at least 0.15, while qemu used
|
||||
8MB. For qemu 1.2, the default was changed to 16MB for all devices
|
||||
except cirrus.
|
||||
|
||||
If --enable-migration-from-qemu-kvm is specified, make sure cirrus
|
||||
uses 16MB for <= pc-1.2 (the qemu-kvm merge), and 16MB always for
|
||||
all others. This will break incoming qemu migration for qemu < 1.3.
|
||||
---
|
||||
hw/i386/pc_piix.c | 20 ++++++++++++++++----
|
||||
1 file changed, 16 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
|
||||
index 06416ce..0787f38 100644
|
||||
--- a/hw/i386/pc_piix.c
|
||||
+++ b/hw/i386/pc_piix.c
|
||||
@@ -383,6 +383,13 @@ static QEMUMachine pc_machine_v1_3 = {
|
||||
DEFAULT_MACHINE_OPTIONS,
|
||||
};
|
||||
|
||||
+#ifdef CONFIG_MIGRATE_FROM_QEMU_KVM
|
||||
+/* qemu-kvm defaulted to 16MB video memory since 0.15 at least. */
|
||||
+# define OLD_VGA_MEM stringify(16)
|
||||
+#else
|
||||
+# define OLD_VGA_MEM stringify(8)
|
||||
+#endif
|
||||
+
|
||||
#define PC_COMPAT_1_2 \
|
||||
PC_COMPAT_1_3,\
|
||||
{\
|
||||
@@ -406,6 +413,10 @@ static QEMUMachine pc_machine_v1_3 = {
|
||||
.property = "revision",\
|
||||
.value = stringify(3),\
|
||||
},{\
|
||||
+ .driver = "cirrus-vga",\
|
||||
+ .property = "vgamem_mb",\
|
||||
+ .value = OLD_VGA_MEM,\
|
||||
+ },{\
|
||||
.driver = "VGA",\
|
||||
.property = "mmio",\
|
||||
.value = "off",\
|
||||
@@ -423,6 +434,7 @@ static QEMUMachine pc_machine_v1_2 = {
|
||||
DEFAULT_MACHINE_OPTIONS,
|
||||
};
|
||||
|
||||
+
|
||||
#define PC_COMPAT_1_1 \
|
||||
PC_COMPAT_1_2,\
|
||||
{\
|
||||
@@ -436,19 +448,19 @@ static QEMUMachine pc_machine_v1_2 = {
|
||||
},{\
|
||||
.driver = "VGA",\
|
||||
.property = "vgamem_mb",\
|
||||
- .value = stringify(8),\
|
||||
+ .value = OLD_VGA_MEM,\
|
||||
},{\
|
||||
.driver = "vmware-svga",\
|
||||
.property = "vgamem_mb",\
|
||||
- .value = stringify(8),\
|
||||
+ .value = OLD_VGA_MEM,\
|
||||
},{\
|
||||
.driver = "qxl-vga",\
|
||||
.property = "vgamem_mb",\
|
||||
- .value = stringify(8),\
|
||||
+ .value = OLD_VGA_MEM,\
|
||||
},{\
|
||||
.driver = "qxl",\
|
||||
.property = "vgamem_mb",\
|
||||
- .value = stringify(8),\
|
||||
+ .value = OLD_VGA_MEM,\
|
||||
},{\
|
||||
.driver = "virtio-blk-pci",\
|
||||
.property = "config-wce",\
|
@ -1,99 +0,0 @@
|
||||
From dbeb3f1e3282bef66b459e3197b2078c24ad7daf Mon Sep 17 00:00:00 2001
|
||||
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.
|
||||
---
|
||||
hw/display/qxl.c | 9 ++++-----
|
||||
hw/i386/pc_piix.c | 16 ++++++++++++++++
|
||||
2 files changed, 20 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
|
||||
index c475cb1..74f07c0 100644
|
||||
--- a/hw/display/qxl.c
|
||||
+++ b/hw/display/qxl.c
|
||||
@@ -306,16 +306,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);
|
||||
@@ -2302,6 +2300,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(),
|
||||
};
|
||||
|
||||
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
|
||||
index 0787f38..e26c93d 100644
|
||||
--- a/hw/i386/pc_piix.c
|
||||
+++ b/hw/i386/pc_piix.c
|
||||
@@ -369,6 +369,14 @@ static QEMUMachine pc_i440fx_machine_v1_4 = {
|
||||
.driver = "e1000",\
|
||||
.property = "autonegotiation",\
|
||||
.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 = {
|
||||
@@ -465,6 +473,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 = {
|
@ -1,85 +0,0 @@
|
||||
From 12f9c64a068d3c5e67886dde367ccacde48fbbbd Mon Sep 17 00:00:00 2001
|
||||
From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
|
||||
Date: Mon, 27 May 2013 14:20:57 +1000
|
||||
Subject: [PATCH] configure: dtc: Probe for libfdt_env.h
|
||||
|
||||
Currently QEMU provides a local clone of the file libfdt_env.h in
|
||||
/include. This file is supposed to come with the libfdt package and is
|
||||
only needed for broken installs of libfdt. Now that we have submodule
|
||||
dtc, just ignore these broken installs and prompt for the dtc submodule
|
||||
install instead. QEMU's local libfdt_env.h is removed accordingly.
|
||||
|
||||
Manifests as a bug when building QEMU with modern libfdt. The new
|
||||
version of libfdt does not compile when QEMUs libfdt_env.h takes
|
||||
precedence over the hosts.
|
||||
|
||||
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
|
||||
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
|
||||
Acked-by: David Gibson <david@gibson.dropbear.id.au>
|
||||
Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
|
||||
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
Message-id: 9b6a3a52e3f46cfbc1ded9ab56385ec045e46705.1369628289.git.peter.crosthwaite@xilinx.com
|
||||
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
|
||||
(cherry picked from commit 96ce65457690561417ae8e6f0e85f3c6f135018b)
|
||||
---
|
||||
configure | 2 ++
|
||||
include/libfdt_env.h | 36 ------------------------------------
|
||||
2 files changed, 2 insertions(+), 36 deletions(-)
|
||||
delete mode 100644 include/libfdt_env.h
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index f558a21..ed09648 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -2525,7 +2525,9 @@ fi
|
||||
# fdt probe
|
||||
if test "$fdt" != "no" ; then
|
||||
fdt_libs="-lfdt"
|
||||
+ # explicitly check for libfdt_env.h as it is missing in some stable installs
|
||||
cat > $TMPC << EOF
|
||||
+#include <libfdt_env.h>
|
||||
int main(void) { return 0; }
|
||||
EOF
|
||||
if compile_prog "" "$fdt_libs" ; then
|
||||
diff --git a/include/libfdt_env.h b/include/libfdt_env.h
|
||||
deleted file mode 100644
|
||||
index 3667d4c..0000000
|
||||
--- a/include/libfdt_env.h
|
||||
+++ /dev/null
|
||||
@@ -1,36 +0,0 @@
|
||||
-/*
|
||||
- * This program is free software; you can redistribute it and/or modify
|
||||
- * it under the terms of the GNU General Public License, version 2, as
|
||||
- * published by the Free Software Foundation.
|
||||
- *
|
||||
- * This program is distributed in the hope that it will be useful,
|
||||
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
- * GNU General Public License for more details.
|
||||
- *
|
||||
- * You should have received a copy of the GNU General Public License
|
||||
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
- *
|
||||
- * Copyright IBM Corp. 2008
|
||||
- * Authors: Hollis Blanchard <hollisb@us.ibm.com>
|
||||
- *
|
||||
- */
|
||||
-
|
||||
-#ifndef _LIBFDT_ENV_H
|
||||
-#define _LIBFDT_ENV_H
|
||||
-
|
||||
-#include "qemu/bswap.h"
|
||||
-
|
||||
-#ifdef HOST_WORDS_BIGENDIAN
|
||||
-#define fdt32_to_cpu(x) (x)
|
||||
-#define cpu_to_fdt32(x) (x)
|
||||
-#define fdt64_to_cpu(x) (x)
|
||||
-#define cpu_to_fdt64(x) (x)
|
||||
-#else
|
||||
-#define fdt32_to_cpu(x) bswap32(x)
|
||||
-#define cpu_to_fdt32(x) bswap32(x)
|
||||
-#define fdt64_to_cpu(x) bswap64(x)
|
||||
-#define cpu_to_fdt64(x) bswap64(x)
|
||||
-#endif
|
||||
-
|
||||
-#endif /* _LIBFDT_ENV_H */
|
@ -1,92 +0,0 @@
|
||||
From 49c090ab950547cb807e90866439072a191513d1 Mon Sep 17 00:00:00 2001
|
||||
From: Gerd Hoffmann <kraxel@redhat.com>
|
||||
Date: Tue, 23 Jul 2013 13:55:43 +0200
|
||||
Subject: [PATCH] spice: fix display initialization
|
||||
|
||||
Spice has two display interface implementations: One integrated into
|
||||
the qxl graphics card, and one generic which can operate with every
|
||||
qemu-emulated graphics card.
|
||||
|
||||
The generic one is activated in case spice is used without qxl. The
|
||||
logic for that only caught the "-vga qxl" case, "-device qxl-vga" goes
|
||||
unnoticed. Fix that by adding a check in the spice interface
|
||||
registration so we'll notice the qxl card no matter how it is created.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=981094
|
||||
|
||||
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
||||
---
|
||||
include/sysemu/sysemu.h | 1 -
|
||||
include/ui/qemu-spice.h | 2 ++
|
||||
ui/spice-core.c | 5 +++++
|
||||
vl.c | 2 +-
|
||||
4 files changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
|
||||
index 2fb71af..8c8a36f 100644
|
||||
--- a/include/sysemu/sysemu.h
|
||||
+++ b/include/sysemu/sysemu.h
|
||||
@@ -103,7 +103,6 @@ typedef enum {
|
||||
|
||||
extern int vga_interface_type;
|
||||
#define xenfb_enabled (vga_interface_type == VGA_XENFB)
|
||||
-#define qxl_enabled (vga_interface_type == VGA_QXL)
|
||||
|
||||
extern int graphic_width;
|
||||
extern int graphic_height;
|
||||
diff --git a/include/ui/qemu-spice.h b/include/ui/qemu-spice.h
|
||||
index eba6d77..c6c756b 100644
|
||||
--- a/include/ui/qemu-spice.h
|
||||
+++ b/include/ui/qemu-spice.h
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "monitor/monitor.h"
|
||||
|
||||
extern int using_spice;
|
||||
+extern int spice_displays;
|
||||
|
||||
void qemu_spice_init(void);
|
||||
void qemu_spice_input_init(void);
|
||||
@@ -57,6 +58,7 @@ static inline CharDriverState *qemu_chr_open_spice_port(const char *name)
|
||||
#include "monitor/monitor.h"
|
||||
|
||||
#define using_spice 0
|
||||
+#define spice_displays 0
|
||||
static inline int qemu_spice_set_passwd(const char *passwd,
|
||||
bool fail_if_connected,
|
||||
bool disconnect_if_connected)
|
||||
diff --git a/ui/spice-core.c b/ui/spice-core.c
|
||||
index bcc4199..c8337ab 100644
|
||||
--- a/ui/spice-core.c
|
||||
+++ b/ui/spice-core.c
|
||||
@@ -48,6 +48,7 @@ static char *auth_passwd;
|
||||
static time_t auth_expires = TIME_MAX;
|
||||
static int spice_migration_completed;
|
||||
int using_spice = 0;
|
||||
+int spice_displays;
|
||||
|
||||
static QemuThread me;
|
||||
|
||||
@@ -823,6 +824,10 @@ int qemu_spice_add_interface(SpiceBaseInstance *sin)
|
||||
qemu_add_vm_change_state_handler(vm_change_state_handler, NULL);
|
||||
}
|
||||
|
||||
+ if (strcmp(sin->sif->type, SPICE_INTERFACE_QXL) == 0) {
|
||||
+ spice_displays++;
|
||||
+ }
|
||||
+
|
||||
return spice_server_add_interface(spice_server, sin);
|
||||
}
|
||||
|
||||
diff --git a/vl.c b/vl.c
|
||||
index efb073f..3559f76 100644
|
||||
--- a/vl.c
|
||||
+++ b/vl.c
|
||||
@@ -4374,7 +4374,7 @@ int main(int argc, char **argv, char **envp)
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_SPICE
|
||||
- if (using_spice && !qxl_enabled) {
|
||||
+ if (using_spice && !spice_displays) {
|
||||
qemu_spice_display_init(ds);
|
||||
}
|
||||
#endif
|
47
qemu.spec
47
qemu.spec
@ -139,8 +139,8 @@
|
||||
|
||||
Summary: QEMU is a FAST! processor emulator
|
||||
Name: qemu
|
||||
Version: 1.5.2
|
||||
Release: 4%{?dist}
|
||||
Version: 1.6.0
|
||||
Release: 1%{?dist}
|
||||
Epoch: 2
|
||||
License: GPLv2+ and LGPLv2+ and BSD
|
||||
Group: Development/Tools
|
||||
@ -181,18 +181,8 @@ Source12: bridge.conf
|
||||
# qemu-kvm back compat wrapper
|
||||
Source13: qemu-kvm.sh
|
||||
|
||||
# qemu-kvm migration compat (posted upstream)
|
||||
Patch0001: 0001-configure-Add-enable-migration-from-qemu-kvm.patch
|
||||
Patch0002: 0002-acpi_piix4-Drop-minimum_version_id-to-handle-qemu-kv.patch
|
||||
Patch0003: 0003-i8254-Fix-migration-from-qemu-kvm-1.1.patch
|
||||
Patch0004: 0004-pc_piix-Add-compat-handling-for-qemu-kvm-VGA-mem-siz.patch
|
||||
# Fix migration w/ qxl from qemu-kvm 1.2 (solution pending upstream)
|
||||
Patch0005: 0005-qxl-Add-rom_size-compat-property-fix-migration-from-.patch
|
||||
# Fix build with rawhide libfdt
|
||||
Patch0006: 0006-configure-dtc-Probe-for-libfdt_env.h.patch
|
||||
# Fix mouse display with spice and latest libvirt (bz #981094)
|
||||
# (patch posted upstream but not applied yet)
|
||||
Patch0007: 0007-spice-fix-display-initialization.patch
|
||||
# qemu-kvm migration compat (not for upstream, drop by Fedora 21?)
|
||||
Patch0001: 0001-Fix-migration-from-qemu-kvm.patch
|
||||
|
||||
BuildRequires: SDL-devel
|
||||
BuildRequires: zlib-devel
|
||||
@ -221,7 +211,7 @@ BuildRequires: spice-protocol >= 0.12.2
|
||||
BuildRequires: spice-server-devel >= 0.12.0
|
||||
%endif
|
||||
%if 0%{?have_seccomp:1}
|
||||
BuildRequires: libseccomp-devel >= 1.0.0
|
||||
BuildRequires: libseccomp-devel >= 2.1.0
|
||||
%endif
|
||||
# For network block driver
|
||||
BuildRequires: libcurl-devel
|
||||
@ -272,7 +262,8 @@ BuildRequires: vte3-devel
|
||||
%endif
|
||||
# GTK translations
|
||||
BuildRequires: gettext
|
||||
|
||||
# RDMA migration
|
||||
BuildRequires: librdmacm-devel
|
||||
|
||||
%if 0%{?user:1}
|
||||
Requires: %{name}-%{user} = %{epoch}:%{version}-%{release}
|
||||
@ -681,18 +672,8 @@ CAC emulation development files.
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
# qemu-kvm migration compat (posted upstream)
|
||||
# qemu-kvm migration compat (not for upstream, drop by Fedora 21?)
|
||||
%patch0001 -p1
|
||||
%patch0002 -p1
|
||||
%patch0003 -p1
|
||||
%patch0004 -p1
|
||||
# Fix migration w/ qxl from qemu-kvm 1.2 (solution pending upstream)
|
||||
%patch0005 -p1
|
||||
# Fix build with rawhide libfdt
|
||||
%patch0006 -p1
|
||||
# Fix mouse display with spice and latest libvirt (bz #981094)
|
||||
# (patch posted upstream but not applied yet)
|
||||
%patch0007 -p1
|
||||
|
||||
|
||||
%build
|
||||
@ -744,7 +725,6 @@ dobuild() {
|
||||
--disable-werror \
|
||||
--disable-xen \
|
||||
--enable-kvm \
|
||||
--enable-migration-from-qemu-kvm \
|
||||
%if 0%{?have_spice:1}
|
||||
--enable-spice \
|
||||
%endif
|
||||
@ -1052,6 +1032,7 @@ getent passwd qemu >/dev/null || \
|
||||
%doc %{qemudocdir}/LICENSE
|
||||
%dir %{_datadir}/%{name}/
|
||||
%{_datadir}/%{name}/qemu-icon.bmp
|
||||
%{_datadir}/%{name}/qemu_logo_no_text.svg
|
||||
%{_datadir}/%{name}/keymaps/
|
||||
%{_mandir}/man1/qemu.1*
|
||||
%{_mandir}/man1/virtfs-proxy-helper.1*
|
||||
@ -1383,6 +1364,16 @@ getent passwd qemu >/dev/null || \
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Fri Aug 16 2013 Cole Robinson <crobinso@redhat.com> - 2:1.6.0-1
|
||||
- Rebased to version 1.6.0
|
||||
- Support for live migration over RDMA
|
||||
- TCG target for aarch64.
|
||||
- Support for auto-convergence in live migration ("CPU stunning")
|
||||
- The XHCI (USB 3.0) controller supports live migration.
|
||||
- New device "nvme" provides a PCI device that implements the NVMe
|
||||
standard.
|
||||
- ACPI hotplug of devices behind a PCI bridge is supported
|
||||
|
||||
* Sun Aug 04 2013 Dennis Gilmore <dennis@ausil.us> - 2:1.5.2-4
|
||||
- re-enable spice support
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user