diff --git a/0001-Cpu-Add-support-for-Power-LE-Architecture.patch b/0001-Cpu-Add-support-for-Power-LE-Architecture.patch new file mode 100644 index 0000000..409d636 --- /dev/null +++ b/0001-Cpu-Add-support-for-Power-LE-Architecture.patch @@ -0,0 +1,206 @@ +From: Prerna Saxena +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 +Signed-off-by: Prerna Saxena +Reviewed-by: Michal Privoznik +(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 ||\ diff --git a/0001-qemu_command-Split-qemuBuildCpuArgStr.patch b/0001-qemu_command-Split-qemuBuildCpuArgStr.patch deleted file mode 100644 index e28c9b8..0000000 --- a/0001-qemu_command-Split-qemuBuildCpuArgStr.patch +++ /dev/null @@ -1,291 +0,0 @@ -From 96a7f7fa1953707e1eb9f0f638baf213507a5cb2 Mon Sep 17 00:00:00 2001 -From: Cole Robinson -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; - } - diff --git a/0002-PowerPC-Add-support-for-launching-VM-in-compat-mode.patch b/0002-PowerPC-Add-support-for-launching-VM-in-compat-mode.patch new file mode 100644 index 0000000..fa87886 --- /dev/null +++ b/0002-PowerPC-Add-support-for-launching-VM-in-compat-mode.patch @@ -0,0 +1,99 @@ +From: Prerna Saxena +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 : + + + power7 + + +Signed-off-by: Prerna Saxena +Signed-off-by: Li Zhang +Signed-off-by: Pradipta Kr. Banerjee +Acked-by: Michal Privoznik +(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; diff --git a/0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch b/0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch deleted file mode 100644 index 6bc426c..0000000 --- a/0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch +++ /dev/null @@ -1,536 +0,0 @@ -From bbdbfbfc03494f5cbba4ee869149cca37c1fd53c Mon Sep 17 00:00:00 2001 -From: Cole Robinson -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 @@ - - - -+ -+ cortex-a53 -+ - - hvm - /aarch64.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 @@ - - - -+ -+ cortex-a53 -+ - - destroy - restart -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 @@ -- -+ - QEMUGuest1 - c7a5fdbd-edaf-9455-926a-d65c16db1809 - 219100 -@@ -23,6 +23,6 @@ - restart - destroy - -- /usr/bin/qemu -+ /usr/bin/qemu-kvm - - -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 @@ -- -+ - QEMUGuest1 - c7a5fdbd-edaf-9455-926a-d65c16db1809 - 219100 -@@ -30,6 +30,6 @@ - restart - destroy - -- /usr/bin/qemu -+ /usr/bin/qemu-kvm - - -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 @@ -- -+ - QEMUGuest1 - c7a5fdbd-edaf-9455-926a-d65c16db1809 - 219100 -@@ -30,6 +30,6 @@ - restart - destroy - -- /usr/bin/qemu -+ /usr/bin/qemu-kvm - - -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 @@ -- -+ - QEMUGuest1 - c7a5fdbd-edaf-9455-926a-d65c16db1809 - 219100 -@@ -20,6 +20,6 @@ - restart - destroy - -- /usr/bin/qemu -+ /usr/bin/qemu-kvm - - -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 @@ -- -+ - QEMUGuest1 - c7a5fdbd-edaf-9455-926a-d65c16db1809 - 219100 -@@ -16,6 +16,6 @@ - restart - destroy - -- /usr/bin/qemu -+ /usr/bin/qemu-kvm - - -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 @@ -- -+ - QEMUGuest1 - c7a5fdbd-edaf-9455-926a-d65c16db1809 - 219100 -@@ -20,6 +20,6 @@ - restart - destroy - -- /usr/bin/qemu -+ /usr/bin/qemu-kvm - - -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 @@ -- -+ - QEMUGuest1 - c7a5fdbd-edaf-9455-926a-d65c16db1809 - 219100 -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 @@ -- -+ - QEMUGuest1 - c7a5fdbd-edaf-9455-926a-d65c16db1809 - 219100 -@@ -33,6 +33,6 @@ - restart - destroy - -- /usr/bin/qemu -+ /usr/bin/qemu-kvm - - -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 @@ -- -+ - f14 - 553effab-b5e1-2d80-dfe3-da4344826c43 - 1048576 -@@ -38,7 +38,7 @@ - restart - restart - -- /usr/bin/qemu -+ /usr/bin/qemu-kvm - - - -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 @@ -- -+ - f14 - 553effab-b5e1-2d80-dfe3-da4344826c43 - 1048576 -@@ -38,7 +38,7 @@ - restart - restart - -- /usr/bin/qemu -+ /usr/bin/qemu-kvm - - - diff --git a/0003-PowerPC-Improve-PVR-handling-to-fall-back-to-cpu-gen.patch b/0003-PowerPC-Improve-PVR-handling-to-fall-back-to-cpu-gen.patch new file mode 100644 index 0000000..ff133ed --- /dev/null +++ b/0003-PowerPC-Improve-PVR-handling-to-fall-back-to-cpu-gen.patch @@ -0,0 +1,92 @@ +From: Prerna Saxena +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 +Signed-off-by: Pradipta Kr. Banerjee +Signed-off-by: Anton Blanchard +Reviewed-by: Michal Privoznik +(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 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + +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; + } + diff --git a/0003-security_selinux-Don-t-relabel-dev-net-tun.patch b/0003-security_selinux-Don-t-relabel-dev-net-tun.patch deleted file mode 100644 index 2d9224b..0000000 --- a/0003-security_selinux-Don-t-relabel-dev-net-tun.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 1c20d4a0a608d65d02953b360c6f10397d3c4069 Mon Sep 17 00:00:00 2001 -From: Michal Privoznik -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 -Signed-off-by: Michal Privoznik -(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; - } diff --git a/0004-docs-Add-documentation-for-compat-mode.patch b/0004-docs-Add-documentation-for-compat-mode.patch new file mode 100644 index 0000000..8b4b0e7 --- /dev/null +++ b/0004-docs-Add-documentation-for-compat-mode.patch @@ -0,0 +1,41 @@ +From: Prerna Saxena +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 +Reviewed-by: Michal Privoznik +(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 host-model and use + custom mode with just the CPU model from host +- capabilities XML. ++ capabilities XML. ++ (Since 1.2.11). PowerISA allows ++ processors to run VMs in binary compatibility mode supporting an ++ older version of ISA. Libvirt on PowerPC architecture uses the ++ host-model 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 : ++
++  <cpu mode='host-model'>
++    <model>power7</model>
++  </cpu>
++  ...
++ +
host-passthrough
+
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 diff --git a/0004-qemu-x86_64-is-good-enough-for-i686.patch b/0004-qemu-x86_64-is-good-enough-for-i686.patch deleted file mode 100644 index 191433b..0000000 --- a/0004-qemu-x86_64-is-good-enough-for-i686.patch +++ /dev/null @@ -1,53 +0,0 @@ -From cd1b72fdd821d1fb4d08198833ea782651760e01 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Lubomir Rintel -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 - diff --git a/0005-Test-Add-a-testcase-for-PowerPC-compat-mode-cpu-spec.patch b/0005-Test-Add-a-testcase-for-PowerPC-compat-mode-cpu-spec.patch new file mode 100644 index 0000000..b8b5626 --- /dev/null +++ b/0005-Test-Add-a-testcase-for-PowerPC-compat-mode-cpu-spec.patch @@ -0,0 +1,71 @@ +From: Prerna Saxena +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 +Reviewed-by: Michal Privoznik +(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 @@ ++ ++ QEMUGuest1 ++ 219100 ++ 219100 ++ 4 ++ ++ hvm ++ ++ ++ power7 ++ ++ ++ ++ /usr/bin/qemu-system-ppc64 ++ ++
++ ++ ++ ++ +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); diff --git a/0005-util-Prepare-URI-formatting-for-libxml2-2.9.2.patch b/0005-util-Prepare-URI-formatting-for-libxml2-2.9.2.patch deleted file mode 100644 index 490c3a0..0000000 --- a/0005-util-Prepare-URI-formatting-for-libxml2-2.9.2.patch +++ /dev/null @@ -1,50 +0,0 @@ -From f4d5340ba116befaa965e14537f42c2ead17d486 Mon Sep 17 00:00:00 2001 -Message-Id: -From: Martin Kletzander -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 -(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 - diff --git a/libvirt.spec b/libvirt.spec index 1853355..a2b78f0 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -362,8 +362,8 @@ Summary: Library providing a simple virtualization API Name: libvirt -Version: 1.2.9 -Release: 4%{?dist}%{?extra_release} +Version: 1.2.9.1 +Release: 1%{?dist}%{?extra_release} License: LGPLv2+ Group: Development/Libraries BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root @@ -374,15 +374,12 @@ URL: http://libvirt.org/ %endif Source: http://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.gz -# Fix specifying CPU for qemu aarch64 -Patch0001: 0001-qemu_command-Split-qemuBuildCpuArgStr.patch -Patch0002: 0002-qemu-Don-t-compare-CPU-against-host-for-TCG.patch -# Fix selinux errors with /dev/net/tun (bz #1147057) -Patch0003: 0003-security_selinux-Don-t-relabel-dev-net-tun.patch -# Fix creating i686 guest with x86_64 emulator (bz #1153797) -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 +# ppc64le fixes (bz #1163439) +Patch0001: 0001-Cpu-Add-support-for-Power-LE-Architecture.patch +Patch0002: 0002-PowerPC-Add-support-for-launching-VM-in-compat-mode.patch +Patch0003: 0003-PowerPC-Improve-PVR-handling-to-fall-back-to-cpu-gen.patch +Patch0004: 0004-docs-Add-documentation-for-compat-mode.patch +Patch0005: 0005-Test-Add-a-testcase-for-PowerPC-compat-mode-cpu-spec.patch %if %{with_libvirtd} Requires: libvirt-daemon = %{version}-%{release} @@ -1208,14 +1205,11 @@ driver %prep %setup -q -# Fix specifying CPU for qemu aarch64 +# ppc64le fixes (bz #1163439) %patch0001 -p1 %patch0002 -p1 -# Fix selinux errors with /dev/net/tun (bz #1147057) %patch0003 -p1 -# Fix creating i686 guest with x86_64 emulator (bz #1153797) %patch0004 -p1 -# Fix tests with latest libxml2 %patch0005 -p1 %build @@ -2294,6 +2288,11 @@ exit 0 %doc examples/systemtap %changelog +* Sat Nov 15 2014 Cole Robinson - 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 - 1.2.9-4 - Fix creating i686 guest with x86_64 emulator (bz #1153797) - Fix tests with latest libxml2 diff --git a/sources b/sources index 2f03b1d..3d4e8b8 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -f017075995062ff1d15577b0b093d02e libvirt-1.2.9.tar.gz +c0390a04b3b18d2ed965de89fa9c12dc libvirt-1.2.9.1.tar.gz