Update to 1.2.11 release

This commit is contained in:
Daniel P. Berrange 2014-12-15 12:01:13 +00:00
parent dadb59c95f
commit a4075ec632
10 changed files with 42 additions and 1264 deletions

View File

@ -1,573 +0,0 @@
From: Jiri Denemark <jdenemar@redhat.com>
Date: Wed, 12 Nov 2014 16:49:59 +0100
Subject: [PATCH] qemu: Don't try to parse -help for new QEMU
Since QEMU 1.2.0, we switched to QMP probing instead of parsing -help
(and other commands, such as -cpu ?) output. However, if QMP probing
failed, we still tried starting QEMU with various options and parsing
the output, which was guaranteed to fail because the output changed.
Let's just refuse parsing -help for QEMU >= 1.2.0.
https://bugzilla.redhat.com/show_bug.cgi?id=1160318
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
(cherry picked from commit ae3e29e6e7a9a208732f22721e735d238b2aa8cb)
---
src/qemu/qemu_capabilities.c | 10 ++
tests/qemuhelpdata/qemu-kvm-1.2.0-device | 238 ------------------------------
tests/qemuhelptest.c | 246 ++-----------------------------
3 files changed, 24 insertions(+), 470 deletions(-)
delete mode 100644 tests/qemuhelpdata/qemu-kvm-1.2.0-device
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index b6c0f1b..6eb2955 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -1383,6 +1383,16 @@ int virQEMUCapsParseHelpStr(const char *qemu,
*version = (major * 1000 * 1000) + (minor * 1000) + micro;
+ /* Refuse to parse -help output for QEMU releases >= 1.2.0 that should be
+ * using QMP probing.
+ */
+ if (*version >= 1002000) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("QEMU %u.%u.%u is too new for help parsing"),
+ major, minor, micro);
+ goto cleanup;
+ }
+
if (virQEMUCapsComputeCmdFlags(help, *version, *is_kvm, *kvm_version,
qemuCaps, check_yajl) < 0)
goto cleanup;
diff --git a/tests/qemuhelpdata/qemu-kvm-1.2.0-device b/tests/qemuhelpdata/qemu-kvm-1.2.0-device
deleted file mode 100644
index f4bfd68..0000000
--- a/tests/qemuhelpdata/qemu-kvm-1.2.0-device
+++ /dev/null
@@ -1,238 +0,0 @@
-name "VGA", bus PCI
-name "usb-storage", bus usb-bus
-name "scsi-hd", bus SCSI, desc "virtual SCSI disk"
-name "i82559a", bus PCI, desc "Intel i82559A Ethernet"
-name "i82559b", bus PCI, desc "Intel i82559B Ethernet"
-name "i82559c", bus PCI, desc "Intel i82559C Ethernet"
-name "esp", bus System
-name "sysbus-ohci", bus System, desc "OHCI USB Controller"
-name "virtio-blk-pci", bus PCI, alias "virtio-blk"
-name "usb-uas", bus usb-bus
-name "qxl-vga", bus PCI, desc "Spice QXL GPU (primary, vga compatible)"
-name "ide-drive", bus IDE, desc "virtual IDE disk or CD-ROM (legacy)"
-name "x3130-upstream", bus PCI, desc "TI X3130 Upstream Port of PCI Express Switch"
-name "cirrus-vga", bus PCI, desc "Cirrus CLGD 54xx VGA"
-name "ide-hd", bus IDE, desc "virtual IDE disk"
-name "ES1370", bus PCI, desc "ENSONIQ AudioPCI ES1370"
-name "ioh3420", bus PCI, desc "Intel IOH device id 3420 PCIE Root Port"
-name "sga", bus ISA, desc "Serial Graphics Adapter"
-name "scsi-block", bus SCSI, desc "SCSI block device passthrough"
-name "usb-serial", bus usb-bus
-name "pc-sysfw", bus System, desc "PC System Firmware"
-name "usb-mouse", bus usb-bus
-name "usb-net", bus usb-bus
-name "usb-hub", bus usb-bus
-name "ccid-card-emulated", bus ccid-bus, desc "emulated smartcard"
-name "ne2k_isa", bus ISA
-name "pci-assign", bus PCI
-name "scsi-generic", bus SCSI, desc "pass through generic scsi device (/dev/sg*)"
-name "pcnet", bus PCI
-name "lsi53c895a", bus PCI, alias "lsi"
-name "scsi-disk", bus SCSI, desc "virtual SCSI disk or CD-ROM (legacy)"
-name "hda-micro", bus HDA, desc "HDA Audio Codec, duplex (speaker, microphone)"
-name "pci-ohci", bus PCI, desc "Apple USB Controller"
-name "nec-usb-xhci", bus PCI
-name "xio3130-downstream", bus PCI, desc "TI X3130 Downstream Port of PCI Express Switch"
-name "virtserialport", bus virtio-serial-bus
-name "usb-redir", bus usb-bus
-name "usb-braille", bus usb-bus
-name "scsi-cd", bus SCSI, desc "virtual SCSI CD-ROM"
-name "usb-wacom-tablet", bus usb-bus, desc "QEMU PenPartner Tablet"
-name "isa-serial", bus ISA
-name "i82550", bus PCI, desc "Intel i82550 Ethernet"
-name "i82551", bus PCI, desc "Intel i82551 Ethernet"
-name "isa-debugcon", bus ISA
-name "ide-cd", bus IDE, desc "virtual IDE CD-ROM"
-name "SUNW,fdtwo", bus System
-name "ich9-usb-uhci2", bus PCI
-name "ich9-usb-uhci3", bus PCI
-name "ich9-usb-uhci1", bus PCI
-name "isa-parallel", bus ISA
-name "virtconsole", bus virtio-serial-bus
-name "ne2k_pci", bus PCI
-name "virtio-serial-pci", bus PCI, alias "virtio-serial"
-name "hda-duplex", bus HDA, desc "HDA Audio Codec, duplex (line-out, line-in)"
-name "intel-hda", bus PCI, desc "Intel HD Audio Controller"
-name "megasas", bus PCI, desc "LSI MegaRAID SAS 1078"
-name "i82559er", bus PCI, desc "Intel i82559ER Ethernet"
-name "hda-output", bus HDA, desc "HDA Audio Codec, output-only (line-out)"
-name "i82562", bus PCI, desc "Intel i82562 Ethernet"
-name "sysbus-ahci", bus System
-name "usb-ccid", bus usb-bus, desc "CCID Rev 1.1 smartcard reader"
-name "ivshmem", bus PCI
-name "AC97", bus PCI, desc "Intel 82801AA AC97 Audio"
-name "e1000", bus PCI, desc "Intel Gigabit Ethernet"
-name "sysbus-fdc", bus System
-name "usb-bt-dongle", bus usb-bus
-name "usb-tablet", bus usb-bus
-name "isa-vga", bus ISA
-name "usb-kbd", bus usb-bus
-name "isa-applesmc", bus ISA
-name "rtl8139", bus PCI
-name "qxl", bus PCI, desc "Spice QXL GPU (secondary)"
-name "i82557a", bus PCI, desc "Intel i82557A Ethernet"
-name "i82557c", bus PCI, desc "Intel i82557C Ethernet"
-name "usb-audio", bus usb-bus
-name "ib700", bus ISA
-name "piix3-usb-uhci", bus PCI
-name "i82557b", bus PCI, desc "Intel i82557B Ethernet"
-name "piix4-usb-uhci", bus PCI
-name "ccid-card-passthru", bus ccid-bus, desc "passthrough smartcard"
-name "i82801", bus PCI, desc "Intel i82801 Ethernet"
-name "smbus-eeprom", bus i2c-bus
-name "vmware-svga", bus PCI
-name "dc390", bus PCI, desc "Tekram DC-390 SCSI adapter"
-name "isa-cirrus-vga", bus ISA
-name "sb16", bus ISA, desc "Creative Sound Blaster 16"
-name "am53c974", bus PCI, desc "AMD Am53c974 PCscsi-PCI SCSI adapter"
-name "pci-bridge", bus PCI, desc "Standard PCI Bridge"
-name "i82558a", bus PCI, desc "Intel i82558A Ethernet"
-name "i82558b", bus PCI, desc "Intel i82558B Ethernet"
-name "virtio-net-pci", bus PCI, alias "virtio-net"
-name "virtio-balloon-pci", bus PCI, alias "virtio-balloon"
-name "ich9-usb-ehci1", bus PCI
-name "isa-ide", bus ISA
-name "usb-host", bus usb-bus
-name "ich9-ahci", bus PCI, alias "ahci"
-name "vt82c686b-usb-uhci", bus PCI
-name "usb-ehci", bus PCI
-name "testdev", bus ISA
-name "i6300esb", bus PCI
-name "virtio-scsi-pci", bus PCI
-pci-assign.host=pci-host-devaddr
-pci-assign.prefer_msi=on/off
-pci-assign.share_intx=on/off
-pci-assign.bootindex=int32
-pci-assign.configfd=string
-pci-assign.addr=pci-devfn
-pci-assign.romfile=string
-pci-assign.rombar=uint32
-pci-assign.multifunction=on/off
-pci-assign.command_serr_enable=on/off
-virtio-blk-pci.class=hex32
-virtio-blk-pci.drive=drive
-virtio-blk-pci.logical_block_size=blocksize
-virtio-blk-pci.physical_block_size=blocksize
-virtio-blk-pci.min_io_size=uint16
-virtio-blk-pci.opt_io_size=uint32
-virtio-blk-pci.bootindex=int32
-virtio-blk-pci.discard_granularity=uint32
-virtio-blk-pci.cyls=uint32
-virtio-blk-pci.heads=uint32
-virtio-blk-pci.secs=uint32
-virtio-blk-pci.serial=string
-virtio-blk-pci.scsi=on/off
-virtio-blk-pci.config-wce=on/off
-virtio-blk-pci.ioeventfd=on/off
-virtio-blk-pci.vectors=uint32
-virtio-blk-pci.indirect_desc=on/off
-virtio-blk-pci.event_idx=on/off
-virtio-blk-pci.config-wce=on/off
-virtio-blk-pci.addr=pci-devfn
-virtio-blk-pci.romfile=string
-virtio-blk-pci.rombar=uint32
-virtio-blk-pci.multifunction=on/off
-virtio-blk-pci.command_serr_enable=on/off
-virtio-net-pci.ioeventfd=on/off
-virtio-net-pci.vectors=uint32
-virtio-net-pci.indirect_desc=on/off
-virtio-net-pci.event_idx=on/off
-virtio-net-pci.csum=on/off
-virtio-net-pci.guest_csum=on/off
-virtio-net-pci.gso=on/off
-virtio-net-pci.guest_tso4=on/off
-virtio-net-pci.guest_tso6=on/off
-virtio-net-pci.guest_ecn=on/off
-virtio-net-pci.guest_ufo=on/off
-virtio-net-pci.host_tso4=on/off
-virtio-net-pci.host_tso6=on/off
-virtio-net-pci.host_ecn=on/off
-virtio-net-pci.host_ufo=on/off
-virtio-net-pci.mrg_rxbuf=on/off
-virtio-net-pci.status=on/off
-virtio-net-pci.ctrl_vq=on/off
-virtio-net-pci.ctrl_rx=on/off
-virtio-net-pci.ctrl_vlan=on/off
-virtio-net-pci.ctrl_rx_extra=on/off
-virtio-net-pci.mac=macaddr
-virtio-net-pci.vlan=vlan
-virtio-net-pci.netdev=netdev
-virtio-net-pci.bootindex=int32
-virtio-net-pci.x-txtimer=uint32
-virtio-net-pci.x-txburst=int32
-virtio-net-pci.tx=string
-virtio-net-pci.addr=pci-devfn
-virtio-net-pci.romfile=string
-virtio-net-pci.rombar=uint32
-virtio-net-pci.multifunction=on/off
-virtio-net-pci.command_serr_enable=on/off
-scsi-disk.drive=drive
-scsi-disk.logical_block_size=blocksize
-scsi-disk.physical_block_size=blocksize
-scsi-disk.min_io_size=uint16
-scsi-disk.opt_io_size=uint32
-scsi-disk.bootindex=int32
-scsi-disk.discard_granularity=uint32
-scsi-disk.ver=string
-scsi-disk.serial=string
-scsi-disk.vendor=string
-scsi-disk.product=string
-scsi-disk.removable=on/off
-scsi-disk.dpofua=on/off
-scsi-disk.wwn=hex64
-scsi-disk.channel=uint32
-scsi-disk.scsi-id=uint32
-scsi-disk.lun=uint32
-PIIX4_PM.smb_io_base=uint32
-PIIX4_PM.disable_s3=uint8
-PIIX4_PM.disable_s4=uint8
-PIIX4_PM.s4_val=uint8
-PIIX4_PM.addr=pci-devfn
-PIIX4_PM.romfile=string
-PIIX4_PM.rombar=uint32
-PIIX4_PM.multifunction=on/off
-PIIX4_PM.command_serr_enable=on/off
-usb-redir.chardev=chr
-usb-redir.debug=uint8
-usb-redir.filter=string
-usb-redir.bootindex=int32
-usb-redir.port=string
-usb-redir.full-path=on/off
-ide-drive.drive=drive
-ide-drive.logical_block_size=blocksize
-ide-drive.physical_block_size=blocksize
-ide-drive.min_io_size=uint16
-ide-drive.opt_io_size=uint32
-ide-drive.bootindex=int32
-ide-drive.discard_granularity=uint32
-ide-drive.ver=string
-ide-drive.wwn=hex64
-ide-drive.serial=string
-ide-drive.model=string
-ide-drive.unit=uint32
-usb-host.hostbus=uint32
-usb-host.hostaddr=uint32
-usb-host.hostport=string
-usb-host.vendorid=hex32
-usb-host.productid=hex32
-usb-host.isobufs=uint32
-usb-host.bootindex=int32
-usb-host.pipeline=on/off
-usb-host.port=string
-usb-host.full-path=on/off
-scsi-generic.drive=drive
-scsi-generic.bootindex=int32
-scsi-generic.channel=uint32
-scsi-generic.scsi-id=uint32
-scsi-generic.lun=uint32
-usb-storage.drive=drive
-usb-storage.logical_block_size=blocksize
-usb-storage.physical_block_size=blocksize
-usb-storage.min_io_size=uint16
-usb-storage.opt_io_size=uint32
-usb-storage.bootindex=int32
-usb-storage.discard_granularity=uint32
-usb-storage.serial=string
-usb-storage.removable=on/off
-usb-storage.port=string
-usb-storage.full-path=on/off
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index 7e62a50..0c68367 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -19,6 +19,7 @@ struct testInfo {
unsigned int version;
bool is_kvm;
unsigned int kvm_version;
+ int error;
};
static void printMismatchedFlags(virQEMUCapsPtr got,
@@ -58,8 +59,11 @@ static int testHelpStrParsing(const void *data)
goto cleanup;
if (virQEMUCapsParseHelpStr("QEMU", help, flags,
- &version, &is_kvm, &kvm_version, false) == -1)
+ &version, &is_kvm, &kvm_version, false) == -1) {
+ if (info->error && virGetLastError()->code == info->error)
+ ret = 0;
goto cleanup;
+ }
# ifndef WITH_YAJL
if (virQEMUCapsGet(info->flags, QEMU_CAPS_MONITOR_JSON))
@@ -132,10 +136,10 @@ mymain(void)
{
int ret = 0;
-# define DO_TEST(name, version, is_kvm, kvm_version, ...) \
+# define DO_TEST_FULL(name, version, is_kvm, kvm_version, error, ...) \
do { \
struct testInfo info = { \
- name, NULL, version, is_kvm, kvm_version \
+ name, NULL, version, is_kvm, kvm_version, error \
}; \
if (!(info.flags = virQEMUCapsNew())) \
return EXIT_FAILURE; \
@@ -146,6 +150,9 @@ mymain(void)
virObjectUnref(info.flags); \
} while (0)
+# define DO_TEST(name, version, is_kvm, kvm_version, ...) \
+ DO_TEST_FULL(name, version, is_kvm, kvm_version, VIR_ERR_OK, __VA_ARGS__)
+
DO_TEST("qemu-0.9.1", 9001, 0, 0,
QEMU_CAPS_KQEMU,
QEMU_CAPS_VNC_COLON,
@@ -849,235 +856,10 @@ mymain(void)
QEMU_CAPS_OBJECT_USB_AUDIO,
QEMU_CAPS_SPLASH_TIMEOUT,
QEMU_CAPS_DEVICE_IVSHMEM);
- DO_TEST("qemu-1.2.0", 1002000, 0, 0,
- QEMU_CAPS_VNC_COLON,
- QEMU_CAPS_NO_REBOOT,
- QEMU_CAPS_DRIVE,
- QEMU_CAPS_NAME,
- QEMU_CAPS_UUID,
- QEMU_CAPS_MIGRATE_QEMU_TCP,
- QEMU_CAPS_MIGRATE_QEMU_EXEC,
- QEMU_CAPS_DRIVE_CACHE_V2,
- QEMU_CAPS_DRIVE_CACHE_UNSAFE,
- QEMU_CAPS_DRIVE_FORMAT,
- QEMU_CAPS_DRIVE_SERIAL,
- QEMU_CAPS_XEN_DOMID,
- QEMU_CAPS_DRIVE_READONLY,
- QEMU_CAPS_VGA,
- QEMU_CAPS_0_10,
- QEMU_CAPS_MEM_PATH,
- QEMU_CAPS_SDL,
- QEMU_CAPS_MIGRATE_QEMU_UNIX,
- QEMU_CAPS_CHARDEV,
- QEMU_CAPS_ENABLE_KVM,
- QEMU_CAPS_MONITOR_JSON,
- QEMU_CAPS_BALLOON,
- QEMU_CAPS_DEVICE,
- QEMU_CAPS_SMP_TOPOLOGY,
- QEMU_CAPS_NETDEV,
- QEMU_CAPS_RTC,
- QEMU_CAPS_VHOST_NET,
- QEMU_CAPS_NO_HPET,
- QEMU_CAPS_NODEFCONFIG,
- QEMU_CAPS_BOOT_MENU,
- QEMU_CAPS_FSDEV,
- QEMU_CAPS_NAME_PROCESS,
- QEMU_CAPS_SMBIOS_TYPE,
- QEMU_CAPS_VGA_QXL,
- QEMU_CAPS_SPICE,
- QEMU_CAPS_VGA_NONE,
- QEMU_CAPS_MIGRATE_QEMU_FD,
- QEMU_CAPS_BOOTINDEX,
- QEMU_CAPS_HDA_DUPLEX,
- QEMU_CAPS_DRIVE_AIO,
- QEMU_CAPS_CCID_EMULATED,
- QEMU_CAPS_CCID_PASSTHRU,
- QEMU_CAPS_CHARDEV_SPICEVMC,
- QEMU_CAPS_VIRTIO_TX_ALG,
- QEMU_CAPS_DEVICE_QXL_VGA,
- QEMU_CAPS_PCI_MULTIFUNCTION,
- QEMU_CAPS_VIRTIO_IOEVENTFD,
- QEMU_CAPS_SGA,
- QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
- QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
- QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC,
- QEMU_CAPS_PIIX3_USB_UHCI,
- QEMU_CAPS_PIIX4_USB_UHCI,
- QEMU_CAPS_USB_EHCI,
- QEMU_CAPS_ICH9_USB_EHCI1,
- QEMU_CAPS_VT82C686B_USB_UHCI,
- QEMU_CAPS_PCI_OHCI,
- QEMU_CAPS_USB_REDIR,
- QEMU_CAPS_USB_HUB,
- QEMU_CAPS_NO_SHUTDOWN,
- QEMU_CAPS_PCI_ROMBAR,
- QEMU_CAPS_ICH9_AHCI,
- QEMU_CAPS_NO_ACPI,
- QEMU_CAPS_FSDEV_READONLY,
- QEMU_CAPS_VIRTIO_BLK_SCSI,
- QEMU_CAPS_VIRTIO_BLK_SG_IO,
- QEMU_CAPS_DRIVE_COPY_ON_READ,
- QEMU_CAPS_CPU_HOST,
- QEMU_CAPS_FSDEV_WRITEOUT,
- QEMU_CAPS_DRIVE_IOTUNE,
- QEMU_CAPS_SCSI_DISK_CHANNEL,
- QEMU_CAPS_SCSI_BLOCK,
- QEMU_CAPS_SCSI_CD,
- QEMU_CAPS_IDE_CD,
- QEMU_CAPS_NO_USER_CONFIG,
- QEMU_CAPS_HDA_MICRO,
- QEMU_CAPS_NEC_USB_XHCI,
- QEMU_CAPS_NETDEV_BRIDGE,
- QEMU_CAPS_SCSI_LSI,
- QEMU_CAPS_VIRTIO_SCSI,
- QEMU_CAPS_BLOCKIO,
- QEMU_CAPS_DISABLE_S3,
- QEMU_CAPS_DISABLE_S4,
- QEMU_CAPS_USB_REDIR_FILTER,
- QEMU_CAPS_IDE_DRIVE_WWN,
- QEMU_CAPS_SCSI_DISK_WWN,
- QEMU_CAPS_SECCOMP_SANDBOX,
- QEMU_CAPS_DUMP_GUEST_CORE,
- QEMU_CAPS_VNC,
- QEMU_CAPS_MACHINE_OPT,
- QEMU_CAPS_USB_REDIR_BOOTINDEX,
- QEMU_CAPS_USB_HOST_BOOTINDEX,
- QEMU_CAPS_DEVICE_QXL,
- QEMU_CAPS_DEVICE_VGA,
- QEMU_CAPS_DEVICE_CIRRUS_VGA,
- QEMU_CAPS_DEVICE_VMWARE_SVGA,
- QEMU_CAPS_DEVICE_USB_SERIAL,
- QEMU_CAPS_DEVICE_USB_NET,
- QEMU_CAPS_DTB,
- QEMU_CAPS_SCSI_MEGASAS,
- QEMU_CAPS_IPV6_MIGRATION,
- QEMU_CAPS_DEVICE_PCI_BRIDGE,
- QEMU_CAPS_DEVICE_SCSI_GENERIC,
- QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX,
- QEMU_CAPS_VNC_SHARE_POLICY,
- QEMU_CAPS_DEVICE_USB_STORAGE,
- QEMU_CAPS_DEVICE_USB_KBD,
- QEMU_CAPS_USB_STORAGE_REMOVABLE,
- QEMU_CAPS_OBJECT_USB_AUDIO,
- QEMU_CAPS_SPLASH_TIMEOUT,
- QEMU_CAPS_DEVICE_IVSHMEM);
- DO_TEST("qemu-kvm-1.2.0", 1002000, 1, 0,
- QEMU_CAPS_VNC_COLON,
- QEMU_CAPS_NO_REBOOT,
- QEMU_CAPS_DRIVE,
- QEMU_CAPS_NAME,
- QEMU_CAPS_UUID,
- QEMU_CAPS_VNET_HDR,
- QEMU_CAPS_MIGRATE_QEMU_TCP,
- QEMU_CAPS_MIGRATE_QEMU_EXEC,
- QEMU_CAPS_DRIVE_CACHE_V2,
- QEMU_CAPS_KVM,
- QEMU_CAPS_DRIVE_CACHE_UNSAFE,
- QEMU_CAPS_DRIVE_FORMAT,
- QEMU_CAPS_DRIVE_SERIAL,
- QEMU_CAPS_XEN_DOMID,
- QEMU_CAPS_DRIVE_READONLY,
- QEMU_CAPS_VGA,
- QEMU_CAPS_0_10,
- QEMU_CAPS_MEM_PATH,
- QEMU_CAPS_SDL,
- QEMU_CAPS_MIGRATE_QEMU_UNIX,
- QEMU_CAPS_CHARDEV,
- QEMU_CAPS_ENABLE_KVM,
- QEMU_CAPS_MONITOR_JSON,
- QEMU_CAPS_BALLOON,
- QEMU_CAPS_DEVICE,
- QEMU_CAPS_SMP_TOPOLOGY,
- QEMU_CAPS_NETDEV,
- QEMU_CAPS_RTC,
- QEMU_CAPS_VHOST_NET,
- QEMU_CAPS_NO_HPET,
- QEMU_CAPS_NO_KVM_PIT,
- QEMU_CAPS_PCI_CONFIGFD,
- QEMU_CAPS_NODEFCONFIG,
- QEMU_CAPS_BOOT_MENU,
- QEMU_CAPS_FSDEV,
- QEMU_CAPS_NAME_PROCESS,
- QEMU_CAPS_SMBIOS_TYPE,
- QEMU_CAPS_VGA_QXL,
- QEMU_CAPS_SPICE,
- QEMU_CAPS_VGA_NONE,
- QEMU_CAPS_MIGRATE_QEMU_FD,
- QEMU_CAPS_BOOTINDEX,
- QEMU_CAPS_HDA_DUPLEX,
- QEMU_CAPS_DRIVE_AIO,
- QEMU_CAPS_PCI_BOOTINDEX,
- QEMU_CAPS_CCID_EMULATED,
- QEMU_CAPS_CCID_PASSTHRU,
- QEMU_CAPS_CHARDEV_SPICEVMC,
- QEMU_CAPS_VIRTIO_TX_ALG,
- QEMU_CAPS_DEVICE_QXL_VGA,
- QEMU_CAPS_PCI_MULTIFUNCTION,
- QEMU_CAPS_VIRTIO_IOEVENTFD,
- QEMU_CAPS_SGA,
- QEMU_CAPS_VIRTIO_BLK_EVENT_IDX,
- QEMU_CAPS_VIRTIO_NET_EVENT_IDX,
- QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC,
- QEMU_CAPS_PIIX3_USB_UHCI,
- QEMU_CAPS_PIIX4_USB_UHCI,
- QEMU_CAPS_USB_EHCI,
- QEMU_CAPS_ICH9_USB_EHCI1,
- QEMU_CAPS_VT82C686B_USB_UHCI,
- QEMU_CAPS_PCI_OHCI,
- QEMU_CAPS_USB_REDIR,
- QEMU_CAPS_USB_HUB,
- QEMU_CAPS_NO_SHUTDOWN,
- QEMU_CAPS_PCI_ROMBAR,
- QEMU_CAPS_ICH9_AHCI,
- QEMU_CAPS_NO_ACPI,
- QEMU_CAPS_FSDEV_READONLY,
- QEMU_CAPS_VIRTIO_BLK_SCSI,
- QEMU_CAPS_VIRTIO_BLK_SG_IO,
- QEMU_CAPS_DRIVE_COPY_ON_READ,
- QEMU_CAPS_CPU_HOST,
- QEMU_CAPS_FSDEV_WRITEOUT,
- QEMU_CAPS_DRIVE_IOTUNE,
- QEMU_CAPS_SCSI_DISK_CHANNEL,
- QEMU_CAPS_SCSI_BLOCK,
- QEMU_CAPS_SCSI_CD,
- QEMU_CAPS_IDE_CD,
- QEMU_CAPS_NO_USER_CONFIG,
- QEMU_CAPS_HDA_MICRO,
- QEMU_CAPS_NEC_USB_XHCI,
- QEMU_CAPS_NETDEV_BRIDGE,
- QEMU_CAPS_SCSI_LSI,
- QEMU_CAPS_VIRTIO_SCSI,
- QEMU_CAPS_BLOCKIO,
- QEMU_CAPS_DISABLE_S3,
- QEMU_CAPS_DISABLE_S4,
- QEMU_CAPS_USB_REDIR_FILTER,
- QEMU_CAPS_IDE_DRIVE_WWN,
- QEMU_CAPS_SCSI_DISK_WWN,
- QEMU_CAPS_SECCOMP_SANDBOX,
- QEMU_CAPS_DUMP_GUEST_CORE,
- QEMU_CAPS_VNC,
- QEMU_CAPS_MACHINE_OPT,
- QEMU_CAPS_USB_REDIR_BOOTINDEX,
- QEMU_CAPS_USB_HOST_BOOTINDEX,
- QEMU_CAPS_DEVICE_QXL,
- QEMU_CAPS_DEVICE_VGA,
- QEMU_CAPS_DEVICE_CIRRUS_VGA,
- QEMU_CAPS_DEVICE_VMWARE_SVGA,
- QEMU_CAPS_DEVICE_USB_SERIAL,
- QEMU_CAPS_DEVICE_USB_NET,
- QEMU_CAPS_DTB,
- QEMU_CAPS_SCSI_MEGASAS,
- QEMU_CAPS_IPV6_MIGRATION,
- QEMU_CAPS_DEVICE_PCI_BRIDGE,
- QEMU_CAPS_DEVICE_SCSI_GENERIC,
- QEMU_CAPS_DEVICE_SCSI_GENERIC_BOOTINDEX,
- QEMU_CAPS_VNC_SHARE_POLICY,
- QEMU_CAPS_DEVICE_USB_STORAGE,
- QEMU_CAPS_DEVICE_USB_KBD,
- QEMU_CAPS_USB_STORAGE_REMOVABLE,
- QEMU_CAPS_OBJECT_USB_AUDIO,
- QEMU_CAPS_SPLASH_TIMEOUT,
- QEMU_CAPS_DEVICE_IVSHMEM);
+ DO_TEST_FULL("qemu-1.2.0", 1002000, 0, 0, VIR_ERR_CONFIG_UNSUPPORTED,
+ QEMU_CAPS_LAST);
+ DO_TEST_FULL("qemu-kvm-1.2.0", 1002000, 1, 0, VIR_ERR_CONFIG_UNSUPPORTED,
+ QEMU_CAPS_LAST);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}

View File

@ -1,206 +0,0 @@
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
Date: Tue, 4 Nov 2014 22:51:26 +0530
Subject: [PATCH] Cpu: Add support for Power LE Architecture.
This adds support for PowerPC Little Endian architecture.,
and allows libvirt to spawn VMs based on 'ppc64le' architecture.
Signed-off-by: Pradipta Kr. Banerjee <bpradip@in.ibm.com>
Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit da636d83dc6b1d070a705786b4daef8644eaca13)
---
src/conf/domain_conf.c | 2 +-
src/cpu/cpu_powerpc.c | 2 +-
src/qemu/qemu_capabilities.c | 6 +++---
src/qemu/qemu_command.c | 22 +++++++++++-----------
src/qemu/qemu_domain.c | 1 +
src/util/virarch.h | 3 +++
6 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 1b8efb1..21309b0 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -10043,7 +10043,7 @@ virDomainVideoDefaultType(const virDomainDef *def)
(STREQ(def->os.type, "xen") ||
STREQ(def->os.type, "linux")))
return VIR_DOMAIN_VIDEO_TYPE_XEN;
- else if (def->os.arch == VIR_ARCH_PPC64)
+ else if ARCH_IS_PPC64(def->os.arch)
return VIR_DOMAIN_VIDEO_TYPE_VGA;
else
return VIR_DOMAIN_VIDEO_TYPE_CIRRUS;
diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c
index 67cb9ff..d591c18 100644
--- a/src/cpu/cpu_powerpc.c
+++ b/src/cpu/cpu_powerpc.c
@@ -38,7 +38,7 @@
VIR_LOG_INIT("cpu.cpu_powerpc");
-static const virArch archs[] = { VIR_ARCH_PPC64 };
+static const virArch archs[] = { VIR_ARCH_PPC64, VIR_ARCH_PPC64LE };
struct ppc_vendor {
char *name;
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 6eb2955..a48f668 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -633,7 +633,7 @@ virQEMUCapsProbeCPUModels(virQEMUCapsPtr qemuCaps, uid_t runUid, gid_t runGid)
if (qemuCaps->arch == VIR_ARCH_I686 ||
qemuCaps->arch == VIR_ARCH_X86_64) {
parse = virQEMUCapsParseX86Models;
- } else if (qemuCaps->arch == VIR_ARCH_PPC64) {
+ } else if ARCH_IS_PPC64(qemuCaps->arch) {
parse = virQEMUCapsParsePPCModels;
} else {
VIR_DEBUG("don't know how to parse %s CPU models",
@@ -2013,7 +2013,7 @@ bool virQEMUCapsHasPCIMultiBus(virQEMUCapsPtr qemuCaps,
return true;
if (def->os.arch == VIR_ARCH_PPC ||
- def->os.arch == VIR_ARCH_PPC64) {
+ ARCH_IS_PPC64(def->os.arch)) {
/*
* Usage of pci.0 naming:
*
@@ -3583,7 +3583,7 @@ virQEMUCapsSupportsChardev(virDomainDefPtr def,
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE))
return false;
- if ((def->os.arch == VIR_ARCH_PPC) || (def->os.arch == VIR_ARCH_PPC64)) {
+ if ((def->os.arch == VIR_ARCH_PPC) || ARCH_IS_PPC64(def->os.arch)) {
/* only pseries need -device spapr-vty with -chardev */
return (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
chr->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO);
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 2e5af4f..d60f274 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -713,7 +713,7 @@ qemuSetSCSIControllerModel(virDomainDefPtr def,
return -1;
}
} else {
- if ((def->os.arch == VIR_ARCH_PPC64) &&
+ if (ARCH_IS_PPC64(def->os.arch) &&
STRPREFIX(def->os.machine, "pseries")) {
*model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI;
} else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SCSI_LSI)) {
@@ -1264,7 +1264,7 @@ int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
for (i = 0; i < def->nserials; i++) {
if (def->serials[i]->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
- (def->os.arch == VIR_ARCH_PPC64) &&
+ ARCH_IS_PPC64(def->os.arch) &&
STRPREFIX(def->os.machine, "pseries"))
def->serials[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
if (qemuAssignSpaprVIOAddress(def, &def->serials[i]->info,
@@ -1273,7 +1273,7 @@ int qemuDomainAssignSpaprVIOAddresses(virDomainDefPtr def,
}
if (def->nvram) {
- if (def->os.arch == VIR_ARCH_PPC64 &&
+ if (ARCH_IS_PPC64(def->os.arch) &&
STRPREFIX(def->os.machine, "pseries"))
def->nvram->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO;
if (qemuAssignSpaprVIOAddress(def, &def->nvram->info,
@@ -4195,7 +4195,7 @@ qemuBuildUSBControllerDevStr(virDomainDefPtr domainDef,
model = def->model;
if (model == -1) {
- if (domainDef->os.arch == VIR_ARCH_PPC64)
+ if ARCH_IS_PPC64(domainDef->os.arch)
model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PCI_OHCI;
else
model = VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI;
@@ -8573,7 +8573,7 @@ qemuBuildCommandLine(virConnectPtr conn,
!qemuDomainMachineIsQ35(def) &&
(!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PIIX3_USB_UHCI) ||
(!virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCI_OHCI) &&
- def->os.arch == VIR_ARCH_PPC64))) {
+ ARCH_IS_PPC64(def->os.arch)))) {
if (usblegacy) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("Multiple legacy USB controllers are "
@@ -9771,7 +9771,7 @@ qemuBuildCommandLine(virConnectPtr conn,
}
if (def->nvram) {
- if (def->os.arch == VIR_ARCH_PPC64 &&
+ if (ARCH_IS_PPC64(def->os.arch) &&
STRPREFIX(def->os.machine, "pseries")) {
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVRAM)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@@ -9894,7 +9894,7 @@ qemuBuildSerialChrDeviceStr(char **deviceStr,
{
virBuffer cmd = VIR_BUFFER_INITIALIZER;
- if ((arch == VIR_ARCH_PPC64) && STRPREFIX(machine, "pseries")) {
+ if (ARCH_IS_PPC64(arch) && STRPREFIX(machine, "pseries")) {
if (serial->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL &&
serial->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO) {
virBufferAsprintf(&cmd, "spapr-vty,chardev=char%s",
@@ -10316,7 +10316,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
if (VIR_ALLOC(def->src) < 0)
goto error;
- if (((dom->os.arch == VIR_ARCH_PPC64) &&
+ if ((ARCH_IS_PPC64(dom->os.arch) &&
dom->os.machine && STRPREFIX(dom->os.machine, "pseries")))
def->bus = VIR_DOMAIN_DISK_BUS_SCSI;
else
@@ -10409,7 +10409,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
} else if (STREQ(keywords[i], "if")) {
if (STREQ(values[i], "ide")) {
def->bus = VIR_DOMAIN_DISK_BUS_IDE;
- if (((dom->os.arch == VIR_ARCH_PPC64) &&
+ if ((ARCH_IS_PPC64(dom->os.arch) &&
dom->os.machine && STRPREFIX(dom->os.machine, "pseries"))) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("pseries systems do not support ide devices '%s'"), val);
@@ -11654,7 +11654,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
}
if (STREQ(arg, "-cdrom")) {
disk->device = VIR_DOMAIN_DISK_DEVICE_CDROM;
- if (((def->os.arch == VIR_ARCH_PPC64) &&
+ if ((ARCH_IS_PPC64(def->os.arch) &&
def->os.machine && STRPREFIX(def->os.machine, "pseries")))
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
if (VIR_STRDUP(disk->dst, "hdc") < 0)
@@ -11670,7 +11670,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
disk->bus = VIR_DOMAIN_DISK_BUS_IDE;
else
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
- if (((def->os.arch == VIR_ARCH_PPC64) &&
+ if ((ARCH_IS_PPC64(def->os.arch) &&
def->os.machine && STRPREFIX(def->os.machine, "pseries")))
disk->bus = VIR_DOMAIN_DISK_BUS_SCSI;
}
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 76fccce..e4edf34 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -980,6 +980,7 @@ qemuDomainDefPostParse(virDomainDefPtr def,
break;
case VIR_ARCH_PPC64:
+ case VIR_ARCH_PPC64LE:
addPCIRoot = true;
addDefaultUSBKBD = true;
addDefaultUSBMouse = true;
diff --git a/src/util/virarch.h b/src/util/virarch.h
index d395e58..3206ce2 100644
--- a/src/util/virarch.h
+++ b/src/util/virarch.h
@@ -79,6 +79,9 @@ typedef enum {
(arch) == VIR_ARCH_PPC64LE ||\
(arch) == VIR_ARCH_PPCEMB)
+# define ARCH_IS_PPC64(arch) ((arch) == VIR_ARCH_PPC64 ||\
+ (arch) == VIR_ARCH_PPC64LE)
+
# define ARCH_IS_ARM(arch) ((arch) == VIR_ARCH_ARMV6L ||\
(arch) == VIR_ARCH_ARMV7L ||\
(arch) == VIR_ARCH_ARMV7B ||\

View File

@ -1,99 +0,0 @@
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
Date: Tue, 4 Nov 2014 22:52:44 +0530
Subject: [PATCH] PowerPC : Add support for launching VM in 'compat' mode.
PowerISA allows processors to run VMs in binary compatibility ("compat")
mode supporting an older version of ISA. QEMU has recently added support to
explicitly denote a VM running in compatibility mode through commit 6d9412ea
& 8dfa3a5e85. Now, a "compat" mode VM can be run by invoking this qemu
commandline on a POWER8 host: -cpu host,compat=power7.
This patch allows libvirt to exploit cpu mode 'host-model' to describe this
new mode for PowerKVM guests. For example, when a user wants to request a
power7 vm to run in compatibility mode on a Power8 host, this can be
described in XML as follows :
<cpu mode='host-model'>
<model>power7</model>
</cpu>
Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Li Zhang <zhlcindy@linux.vnet.ibm.com>
Signed-off-by: Pradipta Kr. Banerjee <bpradip@in.ibm.com>
Acked-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit addce06c9221f948072cd222b56ea9c3f70ec066)
---
src/conf/cpu_conf.c | 1 +
src/cpu/cpu_powerpc.c | 11 ++---------
src/qemu/qemu_command.c | 10 +++++++++-
3 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
index 9b7fbb0..0e7a979 100644
--- a/src/conf/cpu_conf.c
+++ b/src/conf/cpu_conf.c
@@ -619,6 +619,7 @@ virCPUDefFormatBuf(virBufferPtr buf,
return 0;
formatModel = (def->mode == VIR_CPU_MODE_CUSTOM ||
+ def->mode == VIR_CPU_MODE_HOST_MODEL ||
(flags & VIR_DOMAIN_XML_UPDATE_CPU));
formatFallback = (def->type == VIR_CPU_TYPE_GUEST &&
(def->mode == VIR_CPU_MODE_HOST_MODEL ||
diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c
index d591c18..4ea1835 100644
--- a/src/cpu/cpu_powerpc.c
+++ b/src/cpu/cpu_powerpc.c
@@ -562,8 +562,8 @@ ppcUpdate(virCPUDefPtr guest,
static virCPUDefPtr
ppcBaseline(virCPUDefPtr *cpus,
unsigned int ncpus,
- const char **models,
- unsigned int nmodels,
+ const char **models ATTRIBUTE_UNUSED,
+ unsigned int nmodels ATTRIBUTE_UNUSED,
unsigned int flags)
{
struct ppc_map *map = NULL;
@@ -583,13 +583,6 @@ ppcBaseline(virCPUDefPtr *cpus,
goto error;
}
- if (!cpuModelIsAllowed(model->name, models, nmodels)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("CPU model %s is not supported by hypervisor"),
- model->name);
- goto error;
- }
-
for (i = 0; i < ncpus; i++) {
const struct ppc_vendor *vnd;
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index d60f274..34f6535 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6221,7 +6221,9 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
*hasHwVirt = hasSVM > 0 ? true : false;
}
- if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
+ if ((cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) ||
+ ((cpu->mode == VIR_CPU_MODE_HOST_MODEL) &&
+ ARCH_IS_PPC64(def->os.arch))) {
const char *mode = virCPUModeTypeToString(cpu->mode);
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_HOST)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@@ -6236,6 +6238,12 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
goto cleanup;
}
virBufferAddLit(buf, "host");
+
+ if (ARCH_IS_PPC64(def->os.arch) &&
+ cpu->mode == VIR_CPU_MODE_HOST_MODEL) {
+ virBufferAsprintf(buf, ",compat=%s", def->cpu->model);
+ }
+
} else {
if (VIR_ALLOC(guest) < 0)
goto cleanup;

View File

@ -1,92 +0,0 @@
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
Date: Tue, 4 Nov 2014 22:58:33 +0530
Subject: [PATCH] PowerPC:Improve PVR handling to fall back to cpu generation.
IBM Power processors differ uniquely across generations (such as power6,
power7, power8). Each generation signifies a new PowerISA version
that exhibits features unique to that generation.
The higher 16 bits of PVR for IBM Power processors encode the CPU
generation, while the CPU chip (sub)version is encoded in lower 16 bits.
For all practical purposes of launching a VM, we care about the
generation which the vCPU will belong to, and not specifically the chip
version. This patch updates the libvirt PVR check to reflect this
relationship. It allows libvirt to select the right CPU generation
in case the exact match for a a specific CPU is not found.
Hence, there will no longer be a need to add each PowerPC CPU model to
cpu_map.xml; just adding entry for the matching ISA generation will
suffice.
It also contains changes to cpu_map.xml since processor generations
as understood by QEMU compat mode go as "power6", "power7" or "power8"
[Reference : QEMU commit 8dfa3a5e85 ]
Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Signed-off-by: Pradipta Kr. Banerjee <bpradip@in.ibm.com>
Signed-off-by: Anton Blanchard <anton@samba.org>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 1e911742287d964055f33ab76d53e673a9b4477f)
---
src/cpu/cpu_map.xml | 30 ++++++++++++++++++++++++++++++
src/cpu/cpu_powerpc.c | 8 ++++++++
2 files changed, 38 insertions(+)
diff --git a/src/cpu/cpu_map.xml b/src/cpu/cpu_map.xml
index 18c7b0d..bd9b056 100644
--- a/src/cpu/cpu_map.xml
+++ b/src/cpu/cpu_map.xml
@@ -627,5 +627,35 @@
<pvr value='0x004b0100'/>
</model>
+ <model name='power6'>
+ <vendor name='IBM'/>
+ <compat isa='2.05'/>
+ <pvr value='0x003e0000'/>
+ </model>
+
+ <model name='power7'>
+ <vendor name='IBM'/>
+ <compat isa='2.06'/>
+ <pvr value='0x003f0000'/>
+ </model>
+
+ <model name='power7+'>
+ <vendor name='IBM'/>
+ <compat isa='2.06B'/>
+ <pvr value='0x004a0000'/>
+ </model>
+
+ <model name='power8e'>
+ <vendor name='IBM'/>
+ <compat isa='2.07'/>
+ <pvr value='0x004b0000'/>
+ </model>
+
+ <model name='power8'>
+ <vendor name='IBM'/>
+ <compat isa='2.07'/>
+ <pvr value='0x004d0000'/>
+ </model>
+
</arch>
</cpus>
diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c
index 4ea1835..531868c 100644
--- a/src/cpu/cpu_powerpc.c
+++ b/src/cpu/cpu_powerpc.c
@@ -99,6 +99,14 @@ ppcModelFindPVR(const struct ppc_map *map,
model = model->next;
}
+ /* PowerPC Processor Version Register is interpreted as follows :
+ * Higher order 16 bits : Power ISA generation.
+ * Lower order 16 bits : CPU chip version number.
+ * If the exact CPU isnt found, return the nearest matching CPU generation
+ */
+ if (pvr & 0x0000FFFFul)
+ return ppcModelFindPVR(map, (pvr & 0xFFFF0000ul));
+
return NULL;
}

View File

@ -1,41 +0,0 @@
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
Date: Tue, 4 Nov 2014 23:00:36 +0530
Subject: [PATCH] docs: Add documentation for compat mode.
Add documentation to explain how compat-mode can be invoked with libvirt
running on PowerPC architecture.
It also mentions that this change is available libvirt 1.2.11 onwards.
Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 9265fd19b68d787e478f5e490524da794965a5f1)
---
docs/formatdomain.html.in | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 0099ce7..bdaf808 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -1047,7 +1047,20 @@
(such as CPUID level) that don't work. Until these issues are fixed,
it's a good idea to avoid using <code>host-model</code> and use
<code>custom</code> mode with just the CPU model from host
- capabilities XML.</dd>
+ capabilities XML.
+ <span class="since">(Since 1.2.11)</span>. PowerISA allows
+ processors to run VMs in binary compatibility mode supporting an
+ older version of ISA. Libvirt on PowerPC architecture uses the
+ <code>host-model</code> to signify a guest mode CPU running in
+ binary compatibility mode. Example:
+ When a user needs a power7 VM to run in compatibility mode
+ on a Power8 host, this can be described in XML as follows :
+<pre>
+ &lt;cpu mode='host-model'&gt;
+ &lt;model&gt;power7&lt;/model&gt;
+ &lt;/cpu&gt;
+ ...</pre>
+ </dd>
<dt><code>host-passthrough</code></dt>
<dd>With this mode, the CPU visible to the guest should be exactly
the same as the host CPU even in the aspects that libvirt does not

View File

@ -1,71 +0,0 @@
From: Prerna Saxena <prerna@linux.vnet.ibm.com>
Date: Tue, 4 Nov 2014 23:02:15 +0530
Subject: [PATCH] Test: Add a testcase for PowerPC compat mode cpu
specification.
This introduces a testcase for PowerPC compat mode cpu specification.
Signed-off-by: Prerna Saxena <prerna@linux.vnet.ibm.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 12c381114ce362e49cadb730b5faabbc150a8878)
---
.../qemuxml2argv-pseries-cpu-compat.args | 8 ++++++++
.../qemuxml2argv-pseries-cpu-compat.xml | 20 ++++++++++++++++++++
tests/qemuxml2argvtest.c | 2 ++
3 files changed, 30 insertions(+)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.xml
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args
new file mode 100644
index 0000000..64df406
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.args
@@ -0,0 +1,8 @@
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \
+QEMU_AUDIO_DRV=none /usr/bin/qemu-system-ppc64 -S -M pseries \
+-cpu host,compat=power7 \
+-m 214 -smp 4 -nographic -nodefconfig -nodefaults \
+-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
+-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -usb \
+-chardev pty,id=charserial0 \
+-device spapr-vty,chardev=charserial0,reg=0x30000000
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.xml
new file mode 100644
index 0000000..e34a8ad
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-compat.xml
@@ -0,0 +1,20 @@
+<domain type='kvm'>
+ <name>QEMUGuest1</name>
+ <memory unit='KiB'>219100</memory>
+ <currentMemory unit='KiB'>219100</currentMemory>
+ <vcpu placement='static'>4</vcpu>
+ <os>
+ <type arch='ppc64' machine='pseries'>hvm</type>
+ </os>
+ <cpu mode='host-model'>
+ <model>power7</model>
+ </cpu>
+ <clock offset='utc'/>
+ <devices>
+ <emulator>/usr/bin/qemu-system-ppc64</emulator>
+ <console type='pty'>
+ <address type="spapr-vio"/>
+ </console>
+ <memballoon model="none"/>
+ </devices>
+</domain>
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 0e9fab9..90f053e 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -1305,6 +1305,8 @@ mymain(void)
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
DO_TEST("pseries-cpu-exact", QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE,
QEMU_CAPS_NODEFCONFIG);
+ DO_TEST("pseries-cpu-compat", QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST,
+ QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
DO_TEST("disk-ide-drive-split",
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
QEMU_CAPS_IDE_CD);

View File

@ -1,30 +0,0 @@
From: Michal Privoznik <mprivozn@redhat.com>
Date: Wed, 19 Nov 2014 16:25:56 +0100
Subject: [PATCH] qemu: Support OVMF on armv7l aarch64 guests
Currently, we are whitelisting architectures, that we know how to run
OVMF on. So far, only x86_64 was enabled. However, looking at qemu
code, the same commandline can be used to enable OVMF for armv7l and
aarch64.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 6d8054b68407a3385b33c867a425ad8278b0b8f0)
---
src/qemu/qemu_command.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 34f6535..163f80a 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7681,7 +7681,9 @@ qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
case VIR_DOMAIN_LOADER_TYPE_PFLASH:
/* UEFI is supported only for x86_64 currently */
- if (def->os.arch != VIR_ARCH_X86_64) {
+ if (def->os.arch != VIR_ARCH_X86_64 &&
+ def->os.arch != VIR_ARCH_ARMV7L &&
+ def->os.arch != VIR_ARCH_AARCH64) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("pflash is not supported for %s guest architecture"),
virArchToString(def->os.arch));

View File

@ -1,84 +0,0 @@
From: Michal Privoznik <mprivozn@redhat.com>
Date: Wed, 19 Nov 2014 18:16:12 +0100
Subject: [PATCH] qemu: Drop OVMF whitelist
As discussed on the upstream list, it's better not to make this
kind of predictions in libvirt. It may happen that qemu learns
how to enable OVMF on other architectures too and we shouldn't
try to chase that.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 36148120c1c1e6ad7f4eb6f0995eb7b18ba95922)
---
src/qemu/qemu_capabilities.c | 9 +++------
src/qemu/qemu_command.c | 10 ----------
2 files changed, 3 insertions(+), 16 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index a48f668..3f69886 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -3627,7 +3627,6 @@ virQEMUCapsGetDefaultMachine(virQEMUCapsPtr qemuCaps)
static int
virQEMUCapsFillDomainLoaderCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsLoaderPtr capsLoader,
- virArch arch,
char **loader,
size_t nloader)
{
@@ -3655,8 +3654,7 @@ virQEMUCapsFillDomainLoaderCaps(virQEMUCapsPtr qemuCaps,
VIR_DOMAIN_CAPS_ENUM_SET(capsLoader->type,
VIR_DOMAIN_LOADER_TYPE_ROM);
- if (arch == VIR_ARCH_X86_64 &&
- virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE) &&
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE) &&
virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_FORMAT))
VIR_DOMAIN_CAPS_ENUM_SET(capsLoader->type,
VIR_DOMAIN_LOADER_TYPE_PFLASH);
@@ -3673,14 +3671,13 @@ virQEMUCapsFillDomainLoaderCaps(virQEMUCapsPtr qemuCaps,
static int
virQEMUCapsFillDomainOSCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsOSPtr os,
- virArch arch,
char **loader,
size_t nloader)
{
virDomainCapsLoaderPtr capsLoader = &os->loader;
os->device.supported = true;
- if (virQEMUCapsFillDomainLoaderCaps(qemuCaps, capsLoader, arch,
+ if (virQEMUCapsFillDomainLoaderCaps(qemuCaps, capsLoader,
loader, nloader) < 0)
return -1;
return 0;
@@ -3776,7 +3773,7 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
domCaps->maxvcpus = maxvcpus;
- if (virQEMUCapsFillDomainOSCaps(qemuCaps, os, domCaps->arch,
+ if (virQEMUCapsFillDomainOSCaps(qemuCaps, os,
loader, nloader) < 0 ||
virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, disk) < 0 ||
virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev) < 0)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 163f80a..af95466 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7680,16 +7680,6 @@ qemuBuildDomainLoaderCommandLine(virCommandPtr cmd,
break;
case VIR_DOMAIN_LOADER_TYPE_PFLASH:
- /* UEFI is supported only for x86_64 currently */
- if (def->os.arch != VIR_ARCH_X86_64 &&
- def->os.arch != VIR_ARCH_ARMV7L &&
- def->os.arch != VIR_ARCH_AARCH64) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("pflash is not supported for %s guest architecture"),
- virArchToString(def->os.arch));
- goto cleanup;
- }
-
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("this QEMU binary doesn't support -drive"));

View File

@ -362,8 +362,8 @@
Summary: Library providing a simple virtualization API
Name: libvirt
Version: 1.2.10
Release: 3%{?dist}%{?extra_release}
Version: 1.2.11
Release: 1%{?dist}%{?extra_release}
License: LGPLv2+
Group: Development/Libraries
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
@ -374,18 +374,6 @@ URL: http://libvirt.org/
%endif
Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz
# Fix caps probing when KVM is disabled (bz #1160318)
Patch0001: 0001-qemu-Don-t-try-to-parse-help-for-new-QEMU.patch
# ppc64le fixes (bz #1163439)
Patch0002: 0002-Cpu-Add-support-for-Power-LE-Architecture.patch
Patch0003: 0003-PowerPC-Add-support-for-launching-VM-in-compat-mode.patch
Patch0004: 0004-PowerPC-Improve-PVR-handling-to-fall-back-to-cpu-gen.patch
Patch0005: 0005-docs-Add-documentation-for-compat-mode.patch
Patch0006: 0006-Test-Add-a-testcase-for-PowerPC-compat-mode-cpu-spec.patch
# Allow arm/aarch64 with UEFI
Patch0007: 0007-qemu-Support-OVMF-on-armv7l-aarch64-guests.patch
Patch0008: 0008-qemu-Drop-OVMF-whitelist.patch
%if %{with_libvirtd}
Requires: libvirt-daemon = %{version}-%{release}
%if %{with_network}
@ -437,6 +425,7 @@ BuildRequires: gettext-devel
BuildRequires: libtool
BuildRequires: /usr/bin/pod2man
%endif
BuildRequires: git
BuildRequires: perl
BuildRequires: python
%if %{with_systemd}
@ -1210,17 +1199,40 @@ driver
%prep
%setup -q
# Fix caps probing when KVM is disabled (bz #1160318)
%patch0001 -p1
# ppc64le fixes (bz #1163439)
%patch0002 -p1
%patch0003 -p1
%patch0004 -p1
%patch0005 -p1
%patch0006 -p1
# Allow arm/aarch64 with UEFI
%patch0007 -p1
%patch0008 -p1
# Patches have to be stored in a temporary file because RPM has
# a limit on the length of the result of any macro expansion;
# if the string is longer, it's silently cropped
%{lua:
tmp = os.tmpname();
f = io.open(tmp, "w+");
count = 0;
for i, p in ipairs(patches) do
f:write(p.."\n");
count = count + 1;
end;
f:close();
print("PATCHCOUNT="..count.."\n")
print("PATCHLIST="..tmp.."\n")
}
git init -q
git config user.name rpm-build
git config user.email rpm-build
git config gc.auto 0
git add .
git commit -q -a --author 'rpm-build <rpm-build>' \
-m '%{name}-%{version} base'
COUNT=$(grep '\.patch$' $PATCHLIST | wc -l)
if [ $COUNT -ne $PATCHCOUNT ]; then
echo "Found $COUNT patches in $PATCHLIST, expected $PATCHCOUNT"
exit 1
fi
if [ $COUNT -gt 0 ]; then
xargs git am <$PATCHLIST || exit 1
fi
echo "Applied $COUNT patches"
rm -f $PATCHLIST
%build
%if ! %{with_xen}
@ -1630,48 +1642,6 @@ exit 0
%post daemon
%if %{with_network}
# All newly defined networks will have a mac address for the bridge
# auto-generated, but networks already existing at the time of upgrade
# will not. We need to go through all the network configs, look for
# those that don't have a mac address, and add one.
network_files=$( (cd %{_localstatedir}/lib/libvirt/network && \
grep -L "mac address" *.xml; \
cd %{_sysconfdir}/libvirt/qemu/networks && \
grep -L "mac address" *.xml) 2>/dev/null \
| sort -u)
for file in $network_files
do
# each file exists in either the config or state directory (or both) and
# does not have a mac address specified in either. We add the same mac
# address to both files (or just one, if the other isn't there)
mac4=`printf '%X' $(($RANDOM % 256))`
mac5=`printf '%X' $(($RANDOM % 256))`
mac6=`printf '%X' $(($RANDOM % 256))`
for dir in %{_localstatedir}/lib/libvirt/network \
%{_sysconfdir}/libvirt/qemu/networks
do
if test -f $dir/$file
then
sed -i.orig -e \
"s|\(<bridge.*$\)|\0\n <mac address='52:54:00:$mac4:$mac5:$mac6'/>|" \
$dir/$file
if test $? != 0
then
echo "failed to add <mac address='52:54:00:$mac4:$mac5:$mac6'/>" \
"to $dir/$file"
mv -f $dir/$file.orig $dir/$file
else
rm -f $dir/$file.orig
fi
fi
done
done
%endif
%if %{with_systemd}
%if %{with_systemd_macros}
%systemd_post virtlockd.socket libvirtd.service libvirtd.socket
@ -2309,6 +2279,10 @@ exit 0
%doc examples/systemtap
%changelog
* Mon Dec 15 2014 Daniel P. Berrange <berrange@redhat.com> - 1.2.11-1
- Update to 1.2.11 release
- Use git to apply patches
* Fri Nov 21 2014 Cole Robinson <crobinso@redhat.com> - 1.2.10-3
- Allow arm/aarch64 with UEFI

View File

@ -1 +1 @@
1338a14c1cf2935f9485abc41b107ef9 libvirt-1.2.10.tar.gz
616ad039f212c02f7e055c5cf28c0a76 libvirt-1.2.11.tar.gz