Rebased to version 1.2.9.1
ppc64le fixes (bz #1163439) Fix caps probing when KVM is disabled (bz #1160318)remotes/origin/f21
parent
91063332d7
commit
82f2674fae
|
@ -0,0 +1,206 @@
|
||||||
|
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 c23a1f5..2d31ac2 100644
|
||||||
|
--- a/src/conf/domain_conf.c
|
||||||
|
+++ b/src/conf/domain_conf.c
|
||||||
|
@@ -9864,7 +9864,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 b931497..59a38b2 100644
|
||||||
|
--- a/src/qemu/qemu_capabilities.c
|
||||||
|
+++ b/src/qemu/qemu_capabilities.c
|
||||||
|
@@ -632,7 +632,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",
|
||||||
|
@@ -2011,7 +2011,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 5ef3cbf..6cd0da6 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)) {
|
||||||
|
@@ -1260,7 +1260,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,
|
||||||
|
@@ -1269,7 +1269,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,
|
||||||
|
@@ -4191,7 +4191,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;
|
||||||
|
@@ -8453,7 +8453,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 "
|
||||||
|
@@ -9651,7 +9651,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",
|
||||||
|
@@ -9769,7 +9769,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",
|
||||||
|
@@ -10191,7 +10191,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
|
||||||
|
@@ -10284,7 +10284,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);
|
||||||
|
@@ -11529,7 +11529,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)
|
||||||
|
@@ -11545,7 +11545,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 ||\
|
|
@ -1,291 +0,0 @@
|
||||||
From 96a7f7fa1953707e1eb9f0f638baf213507a5cb2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
|
||||||
Date: Tue, 23 Sep 2014 11:35:57 -0400
|
|
||||||
Subject: [PATCH] qemu_command: Split qemuBuildCpuArgStr
|
|
||||||
|
|
||||||
Move the CPU mode/model handling to its own function. This is just
|
|
||||||
code movement and re-indentation.
|
|
||||||
|
|
||||||
(cherry picked from commit e1d872dc77c80d43036f928f83f560f2e9286148)
|
|
||||||
---
|
|
||||||
src/qemu/qemu_command.c | 226 ++++++++++++++++++++++++++----------------------
|
|
||||||
1 file changed, 122 insertions(+), 104 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
|
||||||
index eb72451..db5ea35 100644
|
|
||||||
--- a/src/qemu/qemu_command.c
|
|
||||||
+++ b/src/qemu/qemu_command.c
|
|
||||||
@@ -6140,139 +6140,162 @@ qemuBuildClockArgStr(virDomainClockDefPtr def)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
-
|
|
||||||
static int
|
|
||||||
-qemuBuildCpuArgStr(virQEMUDriverPtr driver,
|
|
||||||
- const virDomainDef *def,
|
|
||||||
- const char *emulator,
|
|
||||||
- virQEMUCapsPtr qemuCaps,
|
|
||||||
- virArch hostarch,
|
|
||||||
- char **opt,
|
|
||||||
- bool *hasHwVirt,
|
|
||||||
- bool migrating)
|
|
||||||
+qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
|
||||||
+ const virDomainDef *def,
|
|
||||||
+ virBufferPtr buf,
|
|
||||||
+ virQEMUCapsPtr qemuCaps,
|
|
||||||
+ bool *hasHwVirt,
|
|
||||||
+ bool migrating)
|
|
||||||
{
|
|
||||||
+ int ret = -1;
|
|
||||||
+ size_t i;
|
|
||||||
virCPUDefPtr host = NULL;
|
|
||||||
virCPUDefPtr guest = NULL;
|
|
||||||
virCPUDefPtr cpu = NULL;
|
|
||||||
size_t ncpus = 0;
|
|
||||||
char **cpus = NULL;
|
|
||||||
- const char *default_model;
|
|
||||||
virCPUDataPtr data = NULL;
|
|
||||||
- bool have_cpu = false;
|
|
||||||
char *compare_msg = NULL;
|
|
||||||
- int ret = -1;
|
|
||||||
- virBuffer buf = VIR_BUFFER_INITIALIZER;
|
|
||||||
- size_t i;
|
|
||||||
+ virCPUCompareResult cmp;
|
|
||||||
+ const char *preferred;
|
|
||||||
virCapsPtr caps = NULL;
|
|
||||||
|
|
||||||
- *hasHwVirt = false;
|
|
||||||
-
|
|
||||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
host = caps->host.cpu;
|
|
||||||
|
|
||||||
- if (def->os.arch == VIR_ARCH_I686)
|
|
||||||
- default_model = "qemu32";
|
|
||||||
- else
|
|
||||||
- default_model = "qemu64";
|
|
||||||
+ if (!host ||
|
|
||||||
+ !host->model ||
|
|
||||||
+ (ncpus = virQEMUCapsGetCPUDefinitions(qemuCaps, &cpus)) == 0) {
|
|
||||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
|
||||||
+ _("CPU specification not supported by hypervisor"));
|
|
||||||
+ goto cleanup;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (def->cpu &&
|
|
||||||
- (def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) {
|
|
||||||
- virCPUCompareResult cmp;
|
|
||||||
- const char *preferred;
|
|
||||||
+ if (!(cpu = virCPUDefCopy(def->cpu)))
|
|
||||||
+ goto cleanup;
|
|
||||||
+
|
|
||||||
+ if (cpu->mode != VIR_CPU_MODE_CUSTOM &&
|
|
||||||
+ !migrating &&
|
|
||||||
+ cpuUpdate(cpu, host) < 0)
|
|
||||||
+ goto cleanup;
|
|
||||||
|
|
||||||
- if (!host ||
|
|
||||||
- !host->model ||
|
|
||||||
- (ncpus = virQEMUCapsGetCPUDefinitions(qemuCaps, &cpus)) == 0) {
|
|
||||||
+ cmp = cpuGuestData(host, cpu, &data, &compare_msg);
|
|
||||||
+ switch (cmp) {
|
|
||||||
+ case VIR_CPU_COMPARE_INCOMPATIBLE:
|
|
||||||
+ if (compare_msg) {
|
|
||||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
||||||
+ _("guest and host CPU are not compatible: %s"),
|
|
||||||
+ compare_msg);
|
|
||||||
+ } else {
|
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
|
||||||
- _("CPU specification not supported by hypervisor"));
|
|
||||||
- goto cleanup;
|
|
||||||
+ _("guest CPU is not compatible with host CPU"));
|
|
||||||
}
|
|
||||||
+ /* fall through */
|
|
||||||
+ case VIR_CPU_COMPARE_ERROR:
|
|
||||||
+ goto cleanup;
|
|
||||||
|
|
||||||
- if (!(cpu = virCPUDefCopy(def->cpu)))
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Only 'svm' requires --enable-nesting. The nested
|
|
||||||
+ * 'vmx' patches now simply hook off the CPU features
|
|
||||||
+ */
|
|
||||||
+ if (def->os.arch == VIR_ARCH_X86_64 ||
|
|
||||||
+ def->os.arch == VIR_ARCH_I686) {
|
|
||||||
+ int hasSVM = cpuHasFeature(data, "svm");
|
|
||||||
+ if (hasSVM < 0)
|
|
||||||
goto cleanup;
|
|
||||||
+ *hasHwVirt = hasSVM > 0 ? true : false;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (cpu->mode != VIR_CPU_MODE_CUSTOM &&
|
|
||||||
- !migrating &&
|
|
||||||
- cpuUpdate(cpu, host) < 0)
|
|
||||||
+ if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
|
|
||||||
+ const char *mode = virCPUModeTypeToString(cpu->mode);
|
|
||||||
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_HOST)) {
|
|
||||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
||||||
+ _("CPU mode '%s' is not supported by QEMU"
|
|
||||||
+ " binary"), mode);
|
|
||||||
+ goto cleanup;
|
|
||||||
+ }
|
|
||||||
+ if (def->virtType != VIR_DOMAIN_VIRT_KVM) {
|
|
||||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
||||||
+ _("CPU mode '%s' is only supported with kvm"),
|
|
||||||
+ mode);
|
|
||||||
+ goto cleanup;
|
|
||||||
+ }
|
|
||||||
+ virBufferAddLit(buf, "host");
|
|
||||||
+ } else {
|
|
||||||
+ if (VIR_ALLOC(guest) < 0)
|
|
||||||
+ goto cleanup;
|
|
||||||
+ if (VIR_STRDUP(guest->vendor_id, cpu->vendor_id) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
- cmp = cpuGuestData(host, cpu, &data, &compare_msg);
|
|
||||||
- switch (cmp) {
|
|
||||||
- case VIR_CPU_COMPARE_INCOMPATIBLE:
|
|
||||||
- if (compare_msg) {
|
|
||||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
||||||
- _("guest and host CPU are not compatible: %s"),
|
|
||||||
- compare_msg);
|
|
||||||
- } else {
|
|
||||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
|
||||||
- _("guest CPU is not compatible with host CPU"));
|
|
||||||
- }
|
|
||||||
- /* fall through */
|
|
||||||
- case VIR_CPU_COMPARE_ERROR:
|
|
||||||
+ guest->arch = host->arch;
|
|
||||||
+ if (cpu->match == VIR_CPU_MATCH_MINIMUM)
|
|
||||||
+ preferred = host->model;
|
|
||||||
+ else
|
|
||||||
+ preferred = cpu->model;
|
|
||||||
+
|
|
||||||
+ guest->type = VIR_CPU_TYPE_GUEST;
|
|
||||||
+ guest->fallback = cpu->fallback;
|
|
||||||
+ if (cpuDecode(guest, data, (const char **)cpus, ncpus, preferred) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
- default:
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
+ virBufferAdd(buf, guest->model, -1);
|
|
||||||
+ if (guest->vendor_id)
|
|
||||||
+ virBufferAsprintf(buf, ",vendor=%s", guest->vendor_id);
|
|
||||||
+ for (i = 0; i < guest->nfeatures; i++) {
|
|
||||||
+ char sign;
|
|
||||||
+ if (guest->features[i].policy == VIR_CPU_FEATURE_DISABLE)
|
|
||||||
+ sign = '-';
|
|
||||||
+ else
|
|
||||||
+ sign = '+';
|
|
||||||
|
|
||||||
- /* Only 'svm' requires --enable-nesting. The nested
|
|
||||||
- * 'vmx' patches now simply hook off the CPU features
|
|
||||||
- */
|
|
||||||
- if (def->os.arch == VIR_ARCH_X86_64 ||
|
|
||||||
- def->os.arch == VIR_ARCH_I686) {
|
|
||||||
- int hasSVM = cpuHasFeature(data, "svm");
|
|
||||||
- if (hasSVM < 0)
|
|
||||||
- goto cleanup;
|
|
||||||
- *hasHwVirt = hasSVM > 0 ? true : false;
|
|
||||||
+ virBufferAsprintf(buf, ",%c%s", sign, guest->features[i].name);
|
|
||||||
}
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
|
|
||||||
- const char *mode = virCPUModeTypeToString(cpu->mode);
|
|
||||||
- if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_HOST)) {
|
|
||||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
||||||
- _("CPU mode '%s' is not supported by QEMU"
|
|
||||||
- " binary"), mode);
|
|
||||||
- goto cleanup;
|
|
||||||
- }
|
|
||||||
- if (def->virtType != VIR_DOMAIN_VIRT_KVM) {
|
|
||||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
||||||
- _("CPU mode '%s' is only supported with kvm"),
|
|
||||||
- mode);
|
|
||||||
- goto cleanup;
|
|
||||||
- }
|
|
||||||
- virBufferAddLit(&buf, "host");
|
|
||||||
- } else {
|
|
||||||
- if (VIR_ALLOC(guest) < 0)
|
|
||||||
- goto cleanup;
|
|
||||||
- if (VIR_STRDUP(guest->vendor_id, cpu->vendor_id) < 0)
|
|
||||||
- goto cleanup;
|
|
||||||
+ ret = 0;
|
|
||||||
+cleanup:
|
|
||||||
+ virObjectUnref(caps);
|
|
||||||
+ VIR_FREE(compare_msg);
|
|
||||||
+ cpuDataFree(data);
|
|
||||||
+ virCPUDefFree(guest);
|
|
||||||
+ virCPUDefFree(cpu);
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
|
|
||||||
- guest->arch = host->arch;
|
|
||||||
- if (cpu->match == VIR_CPU_MATCH_MINIMUM)
|
|
||||||
- preferred = host->model;
|
|
||||||
- else
|
|
||||||
- preferred = cpu->model;
|
|
||||||
+static int
|
|
||||||
+qemuBuildCpuArgStr(virQEMUDriverPtr driver,
|
|
||||||
+ const virDomainDef *def,
|
|
||||||
+ const char *emulator,
|
|
||||||
+ virQEMUCapsPtr qemuCaps,
|
|
||||||
+ virArch hostarch,
|
|
||||||
+ char **opt,
|
|
||||||
+ bool *hasHwVirt,
|
|
||||||
+ bool migrating)
|
|
||||||
+{
|
|
||||||
+ const char *default_model;
|
|
||||||
+ bool have_cpu = false;
|
|
||||||
+ int ret = -1;
|
|
||||||
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
|
|
||||||
+ size_t i;
|
|
||||||
|
|
||||||
- guest->type = VIR_CPU_TYPE_GUEST;
|
|
||||||
- guest->fallback = cpu->fallback;
|
|
||||||
- if (cpuDecode(guest, data, (const char **)cpus, ncpus, preferred) < 0)
|
|
||||||
- goto cleanup;
|
|
||||||
+ *hasHwVirt = false;
|
|
||||||
|
|
||||||
- virBufferAdd(&buf, guest->model, -1);
|
|
||||||
- if (guest->vendor_id)
|
|
||||||
- virBufferAsprintf(&buf, ",vendor=%s", guest->vendor_id);
|
|
||||||
- for (i = 0; i < guest->nfeatures; i++) {
|
|
||||||
- char sign;
|
|
||||||
- if (guest->features[i].policy == VIR_CPU_FEATURE_DISABLE)
|
|
||||||
- sign = '-';
|
|
||||||
- else
|
|
||||||
- sign = '+';
|
|
||||||
+ if (def->os.arch == VIR_ARCH_I686)
|
|
||||||
+ default_model = "qemu32";
|
|
||||||
+ else
|
|
||||||
+ default_model = "qemu64";
|
|
||||||
|
|
||||||
- virBufferAsprintf(&buf, ",%c%s", sign, guest->features[i].name);
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
+ if (def->cpu &&
|
|
||||||
+ (def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) {
|
|
||||||
+ if (qemuBuildCpuModelArgStr(driver, def, &buf, qemuCaps,
|
|
||||||
+ hasHwVirt, migrating) < 0)
|
|
||||||
+ goto cleanup;
|
|
||||||
have_cpu = true;
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
@@ -6398,11 +6421,6 @@ qemuBuildCpuArgStr(virQEMUDriverPtr driver,
|
|
||||||
ret = 0;
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
- VIR_FREE(compare_msg);
|
|
||||||
- cpuDataFree(data);
|
|
||||||
- virCPUDefFree(guest);
|
|
||||||
- virCPUDefFree(cpu);
|
|
||||||
- virObjectUnref(caps);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
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 6cd0da6..9619d28 100644
|
||||||
|
--- a/src/qemu/qemu_command.c
|
||||||
|
+++ b/src/qemu/qemu_command.c
|
||||||
|
@@ -6217,7 +6217,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,
|
||||||
|
@@ -6232,6 +6234,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;
|
|
@ -1,536 +0,0 @@
|
||||||
From bbdbfbfc03494f5cbba4ee869149cca37c1fd53c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
|
||||||
Date: Tue, 23 Sep 2014 13:07:09 -0400
|
|
||||||
Subject: [PATCH] qemu: Don't compare CPU against host for TCG
|
|
||||||
|
|
||||||
Right now when building the qemu command line, we try to do various
|
|
||||||
unconditional validations of the guest CPU against the host CPU. However
|
|
||||||
this checks are overly applied. The only time we should use the checks
|
|
||||||
are:
|
|
||||||
|
|
||||||
- The user requests host-model/host-passthrough, or
|
|
||||||
|
|
||||||
- When KVM is requsted. CPU features requested in TCG mode are always
|
|
||||||
emulated by qemu and are independent of the host CPU, so no host CPU
|
|
||||||
checks should be performed.
|
|
||||||
|
|
||||||
Right now if trying to specify a CPU for arm on an x86 host, it attempts
|
|
||||||
to do non-sensical validation and falls over.
|
|
||||||
|
|
||||||
Switch all the test cases that were intending to test CPU validation to
|
|
||||||
use KVM, so they continue to test the intended code.
|
|
||||||
|
|
||||||
Amend some aarch64 XML tests with a CPU model, to ensure things work
|
|
||||||
correctly.
|
|
||||||
|
|
||||||
(cherry picked from commit cf7fce8f2fd1c930f357fd4ff93ac35f38eb30c6)
|
|
||||||
---
|
|
||||||
src/qemu/qemu_command.c | 68 +++++++++++++---------
|
|
||||||
.../qemuxml2argv-aarch64-virt-default-nic.args | 3 +-
|
|
||||||
.../qemuxml2argv-aarch64-virt-default-nic.xml | 3 +
|
|
||||||
.../qemuxml2argv-aarch64-virt-virtio.args | 3 +-
|
|
||||||
.../qemuxml2argv-aarch64-virt-virtio.xml | 3 +
|
|
||||||
.../qemuxml2argvdata/qemuxml2argv-cpu-exact1.args | 2 +-
|
|
||||||
tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml | 4 +-
|
|
||||||
.../qemuxml2argv-cpu-exact2-nofallback.args | 2 +-
|
|
||||||
.../qemuxml2argv-cpu-exact2-nofallback.xml | 4 +-
|
|
||||||
.../qemuxml2argvdata/qemuxml2argv-cpu-exact2.args | 2 +-
|
|
||||||
tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml | 4 +-
|
|
||||||
.../qemuxml2argv-cpu-fallback.args | 2 +-
|
|
||||||
.../qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml | 4 +-
|
|
||||||
.../qemuxml2argv-cpu-minimum1.args | 2 +-
|
|
||||||
.../qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml | 4 +-
|
|
||||||
.../qemuxml2argv-cpu-minimum2.args | 2 +-
|
|
||||||
.../qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml | 4 +-
|
|
||||||
.../qemuxml2argv-cpu-nofallback.xml | 2 +-
|
|
||||||
.../qemuxml2argvdata/qemuxml2argv-cpu-strict1.args | 2 +-
|
|
||||||
.../qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml | 4 +-
|
|
||||||
.../qemuxml2argv-graphics-spice-timeout.args | 2 +-
|
|
||||||
.../qemuxml2argv-graphics-spice-timeout.xml | 4 +-
|
|
||||||
.../qemuxml2argv-pseries-cpu-exact.args | 4 +-
|
|
||||||
tests/qemuxml2argvtest.c | 21 +++----
|
|
||||||
.../qemuxml2xmlout-graphics-spice-timeout.xml | 4 +-
|
|
||||||
25 files changed, 90 insertions(+), 69 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
|
||||||
index db5ea35..cd34445 100644
|
|
||||||
--- a/src/qemu/qemu_command.c
|
|
||||||
+++ b/src/qemu/qemu_command.c
|
|
||||||
@@ -6160,6 +6160,8 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
|
||||||
virCPUCompareResult cmp;
|
|
||||||
const char *preferred;
|
|
||||||
virCapsPtr caps = NULL;
|
|
||||||
+ bool compareAgainstHost = (def->virtType == VIR_DOMAIN_VIRT_KVM ||
|
|
||||||
+ def->cpu->mode != VIR_CPU_MODE_CUSTOM);
|
|
||||||
|
|
||||||
if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
|
|
||||||
goto cleanup;
|
|
||||||
@@ -6182,30 +6184,33 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
|
||||||
cpuUpdate(cpu, host) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
- cmp = cpuGuestData(host, cpu, &data, &compare_msg);
|
|
||||||
- switch (cmp) {
|
|
||||||
- case VIR_CPU_COMPARE_INCOMPATIBLE:
|
|
||||||
- if (compare_msg) {
|
|
||||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
||||||
- _("guest and host CPU are not compatible: %s"),
|
|
||||||
- compare_msg);
|
|
||||||
- } else {
|
|
||||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
|
||||||
- _("guest CPU is not compatible with host CPU"));
|
|
||||||
- }
|
|
||||||
- /* fall through */
|
|
||||||
- case VIR_CPU_COMPARE_ERROR:
|
|
||||||
- goto cleanup;
|
|
||||||
+ /* For non-KVM, CPU features are emulated, so host compat doesn't matter */
|
|
||||||
+ if (compareAgainstHost) {
|
|
||||||
+ cmp = cpuGuestData(host, cpu, &data, &compare_msg);
|
|
||||||
+ switch (cmp) {
|
|
||||||
+ case VIR_CPU_COMPARE_INCOMPATIBLE:
|
|
||||||
+ if (compare_msg) {
|
|
||||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
|
||||||
+ _("guest and host CPU are not compatible: %s"),
|
|
||||||
+ compare_msg);
|
|
||||||
+ } else {
|
|
||||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
|
||||||
+ _("guest CPU is not compatible with host CPU"));
|
|
||||||
+ }
|
|
||||||
+ /* fall through */
|
|
||||||
+ case VIR_CPU_COMPARE_ERROR:
|
|
||||||
+ goto cleanup;
|
|
||||||
|
|
||||||
- default:
|
|
||||||
- break;
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Only 'svm' requires --enable-nesting. The nested
|
|
||||||
* 'vmx' patches now simply hook off the CPU features
|
|
||||||
*/
|
|
||||||
- if (def->os.arch == VIR_ARCH_X86_64 ||
|
|
||||||
- def->os.arch == VIR_ARCH_I686) {
|
|
||||||
+ if ((def->os.arch == VIR_ARCH_X86_64 || def->os.arch == VIR_ARCH_I686) &&
|
|
||||||
+ compareAgainstHost) {
|
|
||||||
int hasSVM = cpuHasFeature(data, "svm");
|
|
||||||
if (hasSVM < 0)
|
|
||||||
goto cleanup;
|
|
||||||
@@ -6233,16 +6238,23 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
|
||||||
if (VIR_STRDUP(guest->vendor_id, cpu->vendor_id) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
- guest->arch = host->arch;
|
|
||||||
- if (cpu->match == VIR_CPU_MATCH_MINIMUM)
|
|
||||||
- preferred = host->model;
|
|
||||||
- else
|
|
||||||
- preferred = cpu->model;
|
|
||||||
+ if (compareAgainstHost) {
|
|
||||||
+ guest->arch = host->arch;
|
|
||||||
+ if (cpu->match == VIR_CPU_MATCH_MINIMUM)
|
|
||||||
+ preferred = host->model;
|
|
||||||
+ else
|
|
||||||
+ preferred = cpu->model;
|
|
||||||
|
|
||||||
- guest->type = VIR_CPU_TYPE_GUEST;
|
|
||||||
- guest->fallback = cpu->fallback;
|
|
||||||
- if (cpuDecode(guest, data, (const char **)cpus, ncpus, preferred) < 0)
|
|
||||||
- goto cleanup;
|
|
||||||
+ guest->type = VIR_CPU_TYPE_GUEST;
|
|
||||||
+ guest->fallback = cpu->fallback;
|
|
||||||
+ if (cpuDecode(guest, data,
|
|
||||||
+ (const char **)cpus, ncpus, preferred) < 0)
|
|
||||||
+ goto cleanup;
|
|
||||||
+ } else {
|
|
||||||
+ guest->arch = def->os.arch;
|
|
||||||
+ if (VIR_STRDUP(guest->model, cpu->model) < 0)
|
|
||||||
+ goto cleanup;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
virBufferAdd(buf, guest->model, -1);
|
|
||||||
if (guest->vendor_id)
|
|
||||||
@@ -6259,7 +6271,7 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
-cleanup:
|
|
||||||
+ cleanup:
|
|
||||||
virObjectUnref(caps);
|
|
||||||
VIR_FREE(compare_msg);
|
|
||||||
cpuDataFree(data);
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args
|
|
||||||
index d4d403b..8cb57c5 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.args
|
|
||||||
@@ -1,5 +1,6 @@
|
|
||||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
|
|
||||||
-/usr/bin/qemu-system-aarch64 -S -M virt -m 1024 -smp 1 -nographic \
|
|
||||||
+/usr/bin/qemu-system-aarch64 -S -M virt -cpu cortex-a53 \
|
|
||||||
+-m 1024 -smp 1 -nographic \
|
|
||||||
-nodefconfig -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
|
|
||||||
-boot c -kernel /aarch64.kernel -initrd /aarch64.initrd -append console=ttyAMA0 \
|
|
||||||
-usb -device virtio-net-device,vlan=0,id=net0,mac=52:54:00:09:a4:37 \
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml
|
|
||||||
index 868de94..3a6f098 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-default-nic.xml
|
|
||||||
@@ -7,6 +7,9 @@
|
|
||||||
<features>
|
|
||||||
<acpi/>
|
|
||||||
</features>
|
|
||||||
+ <cpu match='exact'>
|
|
||||||
+ <model>cortex-a53</model>
|
|
||||||
+ </cpu>
|
|
||||||
<os>
|
|
||||||
<type arch="aarch64" machine="virt">hvm</type>
|
|
||||||
<kernel>/aarch64.kernel</kernel>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args
|
|
||||||
index afd6e41..05f3629 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.args
|
|
||||||
@@ -1,5 +1,6 @@
|
|
||||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
|
|
||||||
-/usr/bin/qemu-system-aarch64 -S -M virt -m 1024 -smp 1 -nographic \
|
|
||||||
+/usr/bin/qemu-system-aarch64 -S -M virt -cpu cortex-a53 \
|
|
||||||
+-m 1024 -smp 1 -nographic \
|
|
||||||
-nodefconfig -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
|
|
||||||
-boot c -kernel /aarch64.kernel -initrd /aarch64.initrd -append \
|
|
||||||
'earlyprintk console=ttyAMA0,115200n8 rw root=/dev/vda rootwait' \
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml
|
|
||||||
index 184b62c..ad34615 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-aarch64-virt-virtio.xml
|
|
||||||
@@ -16,6 +16,9 @@
|
|
||||||
<apic/>
|
|
||||||
<pae/>
|
|
||||||
</features>
|
|
||||||
+ <cpu match='exact'>
|
|
||||||
+ <model>cortex-a53</model>
|
|
||||||
+ </cpu>
|
|
||||||
<clock offset="utc"/>
|
|
||||||
<on_poweroff>destroy</on_poweroff>
|
|
||||||
<on_reboot>restart</on_reboot>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args
|
|
||||||
index 76c2c48..0a58616 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.args
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
|
|
||||||
-/usr/bin/qemu -S -M pc \
|
|
||||||
+/usr/bin/qemu-kvm -S -M pc \
|
|
||||||
-cpu qemu64,-svm,-lm,-nx,-syscall,-clflush,-pse36,-mca -m 214 -smp 6 \
|
|
||||||
-nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \
|
|
||||||
none -serial none -parallel none
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml
|
|
||||||
index ddd9d5a..1d1e815 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact1.xml
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-<domain type='qemu'>
|
|
||||||
+<domain type='kvm'>
|
|
||||||
<name>QEMUGuest1</name>
|
|
||||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
|
||||||
<memory unit='KiB'>219100</memory>
|
|
||||||
@@ -23,6 +23,6 @@
|
|
||||||
<on_reboot>restart</on_reboot>
|
|
||||||
<on_crash>destroy</on_crash>
|
|
||||||
<devices>
|
|
||||||
- <emulator>/usr/bin/qemu</emulator>
|
|
||||||
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
|
||||||
</devices>
|
|
||||||
</domain>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args
|
|
||||||
index 0e37379..e46527b 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.args
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
|
|
||||||
-/usr/bin/qemu -S -M pc \
|
|
||||||
+/usr/bin/qemu-kvm -S -M pc \
|
|
||||||
-cpu core2duo,+lahf_lm,+3dnowext,+xtpr,+ds_cpl,+tm,+ht,+ds,-nx -m 214 -smp 6 \
|
|
||||||
-nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \
|
|
||||||
none -serial none -parallel none
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml
|
|
||||||
index de4c8d2..6b9b7d4 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2-nofallback.xml
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-<domain type='qemu'>
|
|
||||||
+<domain type='kvm'>
|
|
||||||
<name>QEMUGuest1</name>
|
|
||||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
|
||||||
<memory unit='KiB'>219100</memory>
|
|
||||||
@@ -30,6 +30,6 @@
|
|
||||||
<on_reboot>restart</on_reboot>
|
|
||||||
<on_crash>destroy</on_crash>
|
|
||||||
<devices>
|
|
||||||
- <emulator>/usr/bin/qemu</emulator>
|
|
||||||
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
|
||||||
</devices>
|
|
||||||
</domain>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args
|
|
||||||
index 0e37379..e46527b 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.args
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
|
|
||||||
-/usr/bin/qemu -S -M pc \
|
|
||||||
+/usr/bin/qemu-kvm -S -M pc \
|
|
||||||
-cpu core2duo,+lahf_lm,+3dnowext,+xtpr,+ds_cpl,+tm,+ht,+ds,-nx -m 214 -smp 6 \
|
|
||||||
-nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net \
|
|
||||||
none -serial none -parallel none
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml
|
|
||||||
index e027e6f..eaea564 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-exact2.xml
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-<domain type='qemu'>
|
|
||||||
+<domain type='kvm'>
|
|
||||||
<name>QEMUGuest1</name>
|
|
||||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
|
||||||
<memory unit='KiB'>219100</memory>
|
|
||||||
@@ -30,6 +30,6 @@
|
|
||||||
<on_reboot>restart</on_reboot>
|
|
||||||
<on_crash>destroy</on_crash>
|
|
||||||
<devices>
|
|
||||||
- <emulator>/usr/bin/qemu</emulator>
|
|
||||||
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
|
||||||
</devices>
|
|
||||||
</domain>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args
|
|
||||||
index 4ee8391..ead561f 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.args
|
|
||||||
@@ -3,7 +3,7 @@ PATH=/bin \
|
|
||||||
HOME=/home/test \
|
|
||||||
USER=test \
|
|
||||||
LOGNAME=test QEMU_AUDIO_DRV=none \
|
|
||||||
-/usr/bin/qemu \
|
|
||||||
+/usr/bin/qemu-kvm \
|
|
||||||
-S \
|
|
||||||
-M pc \
|
|
||||||
-cpu Penryn,-sse4.1 \
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml
|
|
||||||
index 6125f41..85642e9 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-fallback.xml
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-<domain type='qemu'>
|
|
||||||
+<domain type='kvm'>
|
|
||||||
<name>QEMUGuest1</name>
|
|
||||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
|
||||||
<memory unit='KiB'>219100</memory>
|
|
||||||
@@ -20,6 +20,6 @@
|
|
||||||
<on_reboot>restart</on_reboot>
|
|
||||||
<on_crash>destroy</on_crash>
|
|
||||||
<devices>
|
|
||||||
- <emulator>/usr/bin/qemu</emulator>
|
|
||||||
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
|
||||||
</devices>
|
|
||||||
</domain>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args
|
|
||||||
index 0630ef4..d8207e7 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.args
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
|
|
||||||
-/usr/bin/qemu -S -M pc \
|
|
||||||
+/usr/bin/qemu-kvm -S -M pc \
|
|
||||||
-cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,+est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,\
|
|
||||||
+acpi,+ds -m 214 -smp 6 -nographic -monitor unix:/tmp/test-monitor,server,\
|
|
||||||
nowait -no-acpi -boot n -usb -net none -serial none -parallel none
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml
|
|
||||||
index 4ba5d0b..5879d35 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum1.xml
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-<domain type='qemu'>
|
|
||||||
+<domain type='kvm'>
|
|
||||||
<name>QEMUGuest1</name>
|
|
||||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
|
||||||
<memory unit='KiB'>219100</memory>
|
|
||||||
@@ -16,6 +16,6 @@
|
|
||||||
<on_reboot>restart</on_reboot>
|
|
||||||
<on_crash>destroy</on_crash>
|
|
||||||
<devices>
|
|
||||||
- <emulator>/usr/bin/qemu</emulator>
|
|
||||||
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
|
||||||
</devices>
|
|
||||||
</domain>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args
|
|
||||||
index 830994f..17ba256 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.args
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
|
|
||||||
-/usr/bin/qemu -S -M pc \
|
|
||||||
+/usr/bin/qemu-kvm -S -M pc \
|
|
||||||
-cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,+est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,\
|
|
||||||
+acpi,+ds,-lm,-nx,-syscall -m 214 -smp 6 -nographic -monitor \
|
|
||||||
unix:/tmp/test-monitor,server,nowait -no-acpi -boot n -usb -net none -serial none \
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml
|
|
||||||
index c43bf4f..b8bbf25 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-minimum2.xml
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-<domain type='qemu'>
|
|
||||||
+<domain type='kvm'>
|
|
||||||
<name>QEMUGuest1</name>
|
|
||||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
|
||||||
<memory unit='KiB'>219100</memory>
|
|
||||||
@@ -20,6 +20,6 @@
|
|
||||||
<on_reboot>restart</on_reboot>
|
|
||||||
<on_crash>destroy</on_crash>
|
|
||||||
<devices>
|
|
||||||
- <emulator>/usr/bin/qemu</emulator>
|
|
||||||
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
|
||||||
</devices>
|
|
||||||
</domain>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml
|
|
||||||
index 4ae0be8..abb0e9c 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-nofallback.xml
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-<domain type='qemu'>
|
|
||||||
+<domain type='kvm'>
|
|
||||||
<name>QEMUGuest1</name>
|
|
||||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
|
||||||
<memory unit='KiB'>219100</memory>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args
|
|
||||||
index 8b545a7..c500ef7 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.args
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
|
|
||||||
-/usr/bin/qemu -S -M pc \
|
|
||||||
+/usr/bin/qemu-kvm -S -M pc \
|
|
||||||
-cpu core2duo,+lahf_lm,+3dnowext,+xtpr,+est,+vmx,+ds_cpl,+tm,+ht,+acpi,+ds,-nx \
|
|
||||||
-m 214 -smp 6 -nographic -monitor unix:/tmp/test-monitor,server,nowait \
|
|
||||||
-no-acpi -boot n -usb -net none -serial none -parallel none
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml
|
|
||||||
index 935f46f..a9fc9c5 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-strict1.xml
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-<domain type='qemu'>
|
|
||||||
+<domain type='kvm'>
|
|
||||||
<name>QEMUGuest1</name>
|
|
||||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
|
||||||
<memory unit='KiB'>219100</memory>
|
|
||||||
@@ -33,6 +33,6 @@
|
|
||||||
<on_reboot>restart</on_reboot>
|
|
||||||
<on_crash>destroy</on_crash>
|
|
||||||
<devices>
|
|
||||||
- <emulator>/usr/bin/qemu</emulator>
|
|
||||||
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
|
||||||
</devices>
|
|
||||||
</domain>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args
|
|
||||||
index 48744b2..8b5d9ee 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.args
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=spice \
|
|
||||||
-/usr/bin/qemu -S -M pc -cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,\
|
|
||||||
+/usr/bin/qemu-kvm -S -M pc -cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,\
|
|
||||||
+est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,+acpi,+ds \
|
|
||||||
-m 1024 -smp 2 -nodefaults -monitor unix:/tmp/test-monitor,server,nowait \
|
|
||||||
-boot dc -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 \
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml
|
|
||||||
index e6ecbed..3ed864c 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-spice-timeout.xml
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-<domain type='qemu'>
|
|
||||||
+<domain type='kvm'>
|
|
||||||
<name>f14</name>
|
|
||||||
<uuid>553effab-b5e1-2d80-dfe3-da4344826c43</uuid>
|
|
||||||
<memory unit='KiB'>1048576</memory>
|
|
||||||
@@ -38,7 +38,7 @@
|
|
||||||
<on_reboot>restart</on_reboot>
|
|
||||||
<on_crash>restart</on_crash>
|
|
||||||
<devices>
|
|
||||||
- <emulator>/usr/bin/qemu</emulator>
|
|
||||||
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
|
||||||
<disk type='file' device='disk'>
|
|
||||||
<driver name='qemu' type='qcow2'/>
|
|
||||||
<source file='/var/lib/libvirt/images/f14.img'/>
|
|
||||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
|
|
||||||
index 1e09680..9927294 100644
|
|
||||||
--- a/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
|
|
||||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-cpu-exact.args
|
|
||||||
@@ -1,6 +1,6 @@
|
|
||||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \
|
|
||||||
-/usr/bin/qemu-system-ppc64 -S -M pseries -cpu POWER7_v2.3 -m 512 -smp 1 -nographic \
|
|
||||||
--nodefconfig -nodefaults \
|
|
||||||
+QEMU_AUDIO_DRV=none /usr/bin/qemu-system-ppc64 -S -M pseries -cpu POWER7_v2.3 \
|
|
||||||
+-m 512 -smp 1 -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 \
|
|
||||||
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
|
||||||
index b380fd8..483ca90 100644
|
|
||||||
--- a/tests/qemuxml2argvtest.c
|
|
||||||
+++ b/tests/qemuxml2argvtest.c
|
|
||||||
@@ -933,7 +933,7 @@ mymain(void)
|
|
||||||
QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
|
|
||||||
QEMU_CAPS_DEVICE_QXL);
|
|
||||||
DO_TEST("graphics-spice-timeout",
|
|
||||||
- QEMU_CAPS_DRIVE,
|
|
||||||
+ QEMU_CAPS_KVM, QEMU_CAPS_DRIVE,
|
|
||||||
QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL,
|
|
||||||
QEMU_CAPS_DEVICE, QEMU_CAPS_SPICE,
|
|
||||||
QEMU_CAPS_DEVICE_QXL_VGA);
|
|
||||||
@@ -1208,14 +1208,14 @@ mymain(void)
|
|
||||||
DO_TEST("cpu-topology1", QEMU_CAPS_SMP_TOPOLOGY);
|
|
||||||
DO_TEST("cpu-topology2", QEMU_CAPS_SMP_TOPOLOGY);
|
|
||||||
DO_TEST("cpu-topology3", NONE);
|
|
||||||
- DO_TEST("cpu-minimum1", NONE);
|
|
||||||
- DO_TEST("cpu-minimum2", NONE);
|
|
||||||
- DO_TEST("cpu-exact1", NONE);
|
|
||||||
- DO_TEST("cpu-exact2", NONE);
|
|
||||||
- DO_TEST("cpu-exact2-nofallback", NONE);
|
|
||||||
- DO_TEST("cpu-fallback", NONE);
|
|
||||||
- DO_TEST_FAILURE("cpu-nofallback", NONE);
|
|
||||||
- DO_TEST("cpu-strict1", NONE);
|
|
||||||
+ DO_TEST("cpu-minimum1", QEMU_CAPS_KVM);
|
|
||||||
+ DO_TEST("cpu-minimum2", QEMU_CAPS_KVM);
|
|
||||||
+ DO_TEST("cpu-exact1", QEMU_CAPS_KVM);
|
|
||||||
+ DO_TEST("cpu-exact2", QEMU_CAPS_KVM);
|
|
||||||
+ DO_TEST("cpu-exact2-nofallback", QEMU_CAPS_KVM);
|
|
||||||
+ DO_TEST("cpu-fallback", QEMU_CAPS_KVM);
|
|
||||||
+ DO_TEST_FAILURE("cpu-nofallback", QEMU_CAPS_KVM);
|
|
||||||
+ DO_TEST("cpu-strict1", QEMU_CAPS_KVM);
|
|
||||||
DO_TEST("cpu-numa1", NONE);
|
|
||||||
DO_TEST("cpu-numa2", QEMU_CAPS_SMP_TOPOLOGY);
|
|
||||||
DO_TEST_PARSE_ERROR("cpu-numa3", NONE);
|
|
||||||
@@ -1303,7 +1303,8 @@ mymain(void)
|
|
||||||
DO_TEST("pseries-usb-kbd", QEMU_CAPS_PCI_OHCI,
|
|
||||||
QEMU_CAPS_DEVICE_USB_KBD, QEMU_CAPS_CHARDEV,
|
|
||||||
QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
|
||||||
- DO_TEST_FAILURE("pseries-cpu-exact", QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
|
||||||
+ DO_TEST("pseries-cpu-exact", 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);
|
|
||||||
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml
|
|
||||||
index 44c4cf7..73ebcab 100644
|
|
||||||
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml
|
|
||||||
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-graphics-spice-timeout.xml
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-<domain type='qemu'>
|
|
||||||
+<domain type='kvm'>
|
|
||||||
<name>f14</name>
|
|
||||||
<uuid>553effab-b5e1-2d80-dfe3-da4344826c43</uuid>
|
|
||||||
<memory unit='KiB'>1048576</memory>
|
|
||||||
@@ -38,7 +38,7 @@
|
|
||||||
<on_reboot>restart</on_reboot>
|
|
||||||
<on_crash>restart</on_crash>
|
|
||||||
<devices>
|
|
||||||
- <emulator>/usr/bin/qemu</emulator>
|
|
||||||
+ <emulator>/usr/bin/qemu-kvm</emulator>
|
|
||||||
<disk type='file' device='disk'>
|
|
||||||
<driver name='qemu' type='qcow2'/>
|
|
||||||
<source file='/var/lib/libvirt/images/f14.img'/>
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -1,81 +0,0 @@
|
||||||
From 1c20d4a0a608d65d02953b360c6f10397d3c4069 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michal Privoznik <mprivozn@redhat.com>
|
|
||||||
Date: Tue, 7 Oct 2014 16:22:17 +0200
|
|
||||||
Subject: [PATCH] security_selinux: Don't relabel /dev/net/tun
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1147057
|
|
||||||
|
|
||||||
The code for relabelling the TAP FD is there due to a race. When
|
|
||||||
libvirt creates a /dev/tapN device it's labeled as
|
|
||||||
'system_u:object_r:device_t:s0' by default. Later, when
|
|
||||||
udev/systemd reacts to this device, it's relabelled to the
|
|
||||||
expected label 'system_u:object_r:tun_tap_device_t:s0'. Hence, we
|
|
||||||
have a code that relabels the device, to cut the race down. For
|
|
||||||
more info see ae368ebfcc4.
|
|
||||||
|
|
||||||
But the problem is, the relabel function is called on all TUN/TAP
|
|
||||||
devices. Yes, on /dev/net/tun too. This is however a special kind
|
|
||||||
of device - other processes uses it too. We shouldn't touch it's
|
|
||||||
label then.
|
|
||||||
|
|
||||||
Ideally, there would an API in SELinux that would label just the
|
|
||||||
passed FD and not the underlying path. That way, we wouldn't need
|
|
||||||
to care as we would be not labeling /dev/net/tun but the FD
|
|
||||||
passed to the domain. Unfortunately, there's no such API so we
|
|
||||||
have to workaround until then.
|
|
||||||
|
|
||||||
Tested-by: Richard W.M. Jones <rjones@redhat.com>
|
|
||||||
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
|
||||||
(cherry picked from commit ebc05263960f41065fa7d882959ea754b9281ab1)
|
|
||||||
---
|
|
||||||
src/security/security_selinux.c | 23 +++++++++++++++++++++--
|
|
||||||
1 file changed, 21 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c
|
|
||||||
index b7c1015..352f1ab 100644
|
|
||||||
--- a/src/security/security_selinux.c
|
|
||||||
+++ b/src/security/security_selinux.c
|
|
||||||
@@ -2352,7 +2352,7 @@ virSecuritySELinuxSetTapFDLabel(virSecurityManagerPtr mgr,
|
|
||||||
struct stat buf;
|
|
||||||
security_context_t fcon = NULL;
|
|
||||||
virSecurityLabelDefPtr secdef;
|
|
||||||
- char *str = NULL;
|
|
||||||
+ char *str = NULL, *proc = NULL, *fd_path = NULL;
|
|
||||||
int rc = -1;
|
|
||||||
|
|
||||||
secdef = virDomainDefGetSecurityLabelDef(def, SECURITY_SELINUX_NAME);
|
|
||||||
@@ -2370,7 +2370,24 @@ virSecuritySELinuxSetTapFDLabel(virSecurityManagerPtr mgr,
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (getContext(mgr, "/dev/tap.*", buf.st_mode, &fcon) < 0) {
|
|
||||||
+ /* Label /dev/tap.* devices only. Leave /dev/net/tun alone! */
|
|
||||||
+ if (virAsprintf(&proc, "/proc/self/fd/%d", fd) == -1)
|
|
||||||
+ goto cleanup;
|
|
||||||
+
|
|
||||||
+ if (virFileResolveLink(proc, &fd_path) < 0) {
|
|
||||||
+ virReportSystemError(errno,
|
|
||||||
+ _("Unable to resolve link: %s"), proc);
|
|
||||||
+ goto cleanup;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!STRPREFIX(fd_path, "/dev/tap")) {
|
|
||||||
+ VIR_DEBUG("fd=%d points to %s not setting SELinux label",
|
|
||||||
+ fd, fd_path);
|
|
||||||
+ rc = 0;
|
|
||||||
+ goto cleanup;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (getContext(mgr, "/dev/tap*", buf.st_mode, &fcon) < 0) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("cannot lookup default selinux label for tap fd %d"), fd);
|
|
||||||
goto cleanup;
|
|
||||||
@@ -2384,6 +2401,8 @@ virSecuritySELinuxSetTapFDLabel(virSecurityManagerPtr mgr,
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
freecon(fcon);
|
|
||||||
+ VIR_FREE(fd_path);
|
|
||||||
+ VIR_FREE(proc);
|
|
||||||
VIR_FREE(str);
|
|
||||||
return rc;
|
|
||||||
}
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
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 e7b585c..a08af8c 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>
|
||||||
|
+ <cpu mode='host-model'>
|
||||||
|
+ <model>power7</model>
|
||||||
|
+ </cpu>
|
||||||
|
+ ...</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
|
|
@ -1,53 +0,0 @@
|
||||||
From cd1b72fdd821d1fb4d08198833ea782651760e01 Mon Sep 17 00:00:00 2001
|
|
||||||
Message-Id: <cd1b72fdd821d1fb4d08198833ea782651760e01.1414680021.git.crobinso@redhat.com>
|
|
||||||
From: Lubomir Rintel <lkundrak@v3.sk>
|
|
||||||
Date: Thu, 16 Oct 2014 21:28:00 +0200
|
|
||||||
Subject: [PATCH 4/5] qemu: x86_64 is good enough for i686
|
|
||||||
|
|
||||||
virt-manager on Fedora sets up i686 hosts with "/usr/bin/qemu-kvm" emulator,
|
|
||||||
which in turn unconditionally execs qemu-system-x86_64 querying capabilities
|
|
||||||
then fails:
|
|
||||||
|
|
||||||
Error launching details: invalid argument: architecture from emulator 'x86_64' doesn't match given architecture 'i686'
|
|
||||||
|
|
||||||
Traceback (most recent call last):
|
|
||||||
File "/usr/share/virt-manager/virtManager/engine.py", line 748, in _show_vm_helper
|
|
||||||
details = self._get_details_dialog(uri, vm.get_connkey())
|
|
||||||
File "/usr/share/virt-manager/virtManager/engine.py", line 726, in _get_details_dialog
|
|
||||||
obj = vmmDetails(conn.get_vm(connkey))
|
|
||||||
File "/usr/share/virt-manager/virtManager/details.py", line 399, in __init__
|
|
||||||
self.init_details()
|
|
||||||
File "/usr/share/virt-manager/virtManager/details.py", line 784, in init_details
|
|
||||||
domcaps = self.vm.get_domain_capabilities()
|
|
||||||
File "/usr/share/virt-manager/virtManager/domain.py", line 518, in get_domain_capabilities
|
|
||||||
self.get_xmlobj().os.machine, self.get_xmlobj().type)
|
|
||||||
File "/usr/lib/python2.7/site-packages/libvirt.py", line 3492, in getDomainCapabilities
|
|
||||||
if ret is None: raise libvirtError ('virConnectGetDomainCapabilities() failed', conn=self)
|
|
||||||
libvirtError: invalid argument: architecture from emulator 'x86_64' doesn't match given architecture 'i686'
|
|
||||||
|
|
||||||
Journal:
|
|
||||||
|
|
||||||
Oct 16 21:08:26 goatlord.localdomain libvirtd[1530]: invalid argument: architecture from emulator 'x86_64' doesn't match given architecture 'i686'
|
|
||||||
|
|
||||||
(cherry picked from commit afe8f4200f6e80d2510731165dd2cdae741bd9fb)
|
|
||||||
---
|
|
||||||
src/qemu/qemu_driver.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
|
||||||
index e873d45..d379c1f 100644
|
|
||||||
--- a/src/qemu/qemu_driver.c
|
|
||||||
+++ b/src/qemu/qemu_driver.c
|
|
||||||
@@ -17572,7 +17572,8 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
|
|
||||||
|
|
||||||
arch_from_caps = virQEMUCapsGetArch(qemuCaps);
|
|
||||||
|
|
||||||
- if (arch_from_caps != arch) {
|
|
||||||
+ if (arch_from_caps != arch &&
|
|
||||||
+ (arch_from_caps != VIR_ARCH_X86_64 || arch != VIR_ARCH_I686)) {
|
|
||||||
virReportError(VIR_ERR_INVALID_ARG,
|
|
||||||
_("architecture from emulator '%s' doesn't "
|
|
||||||
"match given architecture '%s'"),
|
|
||||||
--
|
|
||||||
2.1.0
|
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
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 cdafa1e..67c6359 100644
|
||||||
|
--- a/tests/qemuxml2argvtest.c
|
||||||
|
+++ b/tests/qemuxml2argvtest.c
|
||||||
|
@@ -1306,6 +1306,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);
|
|
@ -1,50 +0,0 @@
|
||||||
From f4d5340ba116befaa965e14537f42c2ead17d486 Mon Sep 17 00:00:00 2001
|
|
||||||
Message-Id: <f4d5340ba116befaa965e14537f42c2ead17d486.1414680854.git.crobinso@redhat.com>
|
|
||||||
From: Martin Kletzander <mkletzan@redhat.com>
|
|
||||||
Date: Fri, 3 Oct 2014 18:27:01 +0200
|
|
||||||
Subject: [PATCH] util: Prepare URI formatting for libxml2 >= 2.9.2
|
|
||||||
|
|
||||||
Since commit 8eb55d782a2b9afacc7938694891cc6fad7b42a5 libxml2 removes
|
|
||||||
two slashes from the URI when there is no server part. This is fixed
|
|
||||||
with beb7281055dbf0ed4d041022a67c6c5cfd126f25, but only if the calling
|
|
||||||
application calls xmlSaveUri() on URI that xmlURIParse() parsed. And
|
|
||||||
that is not the case in virURIFormat(). virURIFormat() accepts
|
|
||||||
virURIPtr that can be created without parsing it and we do that when we
|
|
||||||
format network storage paths for gluster for example. Even though
|
|
||||||
virStorageSourceParseBackingURI() uses virURIParse(), it throws that data
|
|
||||||
structure right away.
|
|
||||||
|
|
||||||
Since we want to format URIs as URIs and not absolute URIs or opaque
|
|
||||||
URIs (see RFC 3986), we can specify that with a special hack thanks to
|
|
||||||
commit beb7281055dbf0ed4d041022a67c6c5cfd126f25, by setting port to -1.
|
|
||||||
|
|
||||||
This fixes qemuxml2argvtest test where the disk-drive-network-gluster
|
|
||||||
case was failing.
|
|
||||||
|
|
||||||
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
|
|
||||||
(cherry picked from commit 8f17d0eaae7ee2fa3e214b79b188fc14ed5aa1eb)
|
|
||||||
---
|
|
||||||
src/util/viruri.c | 7 +++++++
|
|
||||||
1 file changed, 7 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/util/viruri.c b/src/util/viruri.c
|
|
||||||
index 69e7649..23d86c5 100644
|
|
||||||
--- a/src/util/viruri.c
|
|
||||||
+++ b/src/util/viruri.c
|
|
||||||
@@ -254,6 +254,13 @@ virURIFormat(virURIPtr uri)
|
|
||||||
xmluri.server = tmpserver;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * This helps libxml2 deal with the difference
|
|
||||||
+ * between uri:/absolute/path and uri:///absolute/path.
|
|
||||||
+ */
|
|
||||||
+ if (!xmluri.server && !xmluri.port)
|
|
||||||
+ xmluri.port = -1;
|
|
||||||
+
|
|
||||||
ret = (char *)xmlSaveUri(&xmluri);
|
|
||||||
if (!ret) {
|
|
||||||
virReportOOMError();
|
|
||||||
--
|
|
||||||
2.1.0
|
|
||||||
|
|
29
libvirt.spec
29
libvirt.spec
|
@ -362,8 +362,8 @@
|
||||||
|
|
||||||
Summary: Library providing a simple virtualization API
|
Summary: Library providing a simple virtualization API
|
||||||
Name: libvirt
|
Name: libvirt
|
||||||
Version: 1.2.9
|
Version: 1.2.9.1
|
||||||
Release: 4%{?dist}%{?extra_release}
|
Release: 1%{?dist}%{?extra_release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||||
|
@ -374,15 +374,12 @@ URL: http://libvirt.org/
|
||||||
%endif
|
%endif
|
||||||
Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz
|
Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz
|
||||||
|
|
||||||
# Fix specifying CPU for qemu aarch64
|
# ppc64le fixes (bz #1163439)
|
||||||
Patch0001: 0001-qemu_command-Split-qemuBuildCpuArgStr.patch
|
Patch0001: 0001-Cpu-Add-support-for-Power-LE-Architecture.patch
|
||||||
Patch0002: 0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch
|
Patch0002: 0002-PowerPC-Add-support-for-launching-VM-in-compat-mode.patch
|
||||||
# Fix selinux errors with /dev/net/tun (bz #1147057)
|
Patch0003: 0003-PowerPC-Improve-PVR-handling-to-fall-back-to-cpu-gen.patch
|
||||||
Patch0003: 0003-security_selinux-Don-t-relabel-dev-net-tun.patch
|
Patch0004: 0004-docs-Add-documentation-for-compat-mode.patch
|
||||||
# Fix creating i686 guest with x86_64 emulator (bz #1153797)
|
Patch0005: 0005-Test-Add-a-testcase-for-PowerPC-compat-mode-cpu-spec.patch
|
||||||
Patch0004: 0004-qemu-x86_64-is-good-enough-for-i686.patch
|
|
||||||
# Fix tests with latest libxml2
|
|
||||||
Patch0005: 0005-util-Prepare-URI-formatting-for-libxml2-2.9.2.patch
|
|
||||||
|
|
||||||
%if %{with_libvirtd}
|
%if %{with_libvirtd}
|
||||||
Requires: libvirt-daemon = %{version}-%{release}
|
Requires: libvirt-daemon = %{version}-%{release}
|
||||||
|
@ -1208,14 +1205,11 @@ driver
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
|
|
||||||
# Fix specifying CPU for qemu aarch64
|
# ppc64le fixes (bz #1163439)
|
||||||
%patch0001 -p1
|
%patch0001 -p1
|
||||||
%patch0002 -p1
|
%patch0002 -p1
|
||||||
# Fix selinux errors with /dev/net/tun (bz #1147057)
|
|
||||||
%patch0003 -p1
|
%patch0003 -p1
|
||||||
# Fix creating i686 guest with x86_64 emulator (bz #1153797)
|
|
||||||
%patch0004 -p1
|
%patch0004 -p1
|
||||||
# Fix tests with latest libxml2
|
|
||||||
%patch0005 -p1
|
%patch0005 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
@ -2294,6 +2288,11 @@ exit 0
|
||||||
%doc examples/systemtap
|
%doc examples/systemtap
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Nov 15 2014 Cole Robinson <crobinso@redhat.com> - 1.2.9.1-1
|
||||||
|
- Rebased to version 1.2.9.1
|
||||||
|
- ppc64le fixes (bz #1163439)
|
||||||
|
- Fix caps probing when KVM is disabled (bz #1160318)
|
||||||
|
|
||||||
* Thu Oct 30 2014 Cole Robinson <crobinso@redhat.com> - 1.2.9-4
|
* Thu Oct 30 2014 Cole Robinson <crobinso@redhat.com> - 1.2.9-4
|
||||||
- Fix creating i686 guest with x86_64 emulator (bz #1153797)
|
- Fix creating i686 guest with x86_64 emulator (bz #1153797)
|
||||||
- Fix tests with latest libxml2
|
- Fix tests with latest libxml2
|
||||||
|
|
Loading…
Reference in New Issue