Accepting request 495126 from Virtualization
1 OBS-URL: https://build.opensuse.org/request/show/495126 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libvirt?expand=0&rev=228
This commit is contained in:
commit
44f3294ee7
686
04028a9d-qemu-intremap.patch
Normal file
686
04028a9d-qemu-intremap.patch
Normal file
@ -0,0 +1,686 @@
|
||||
commit 04028a9db9f2657e8d57d1e4705073c908aa248c
|
||||
Author: Ján Tomko <jtomko@redhat.com>
|
||||
Date: Wed May 3 15:23:12 2017 +0200
|
||||
|
||||
qemu: format intel-iommu,intremap on the command line
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1427005
|
||||
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_capabilities.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_capabilities.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_capabilities.c
|
||||
@@ -369,6 +369,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAS
|
||||
|
||||
"kernel-irqchip", /* 255 */
|
||||
"kernel-irqchip.split",
|
||||
+ "intel-iommu.intremap",
|
||||
);
|
||||
|
||||
|
||||
@@ -1720,6 +1721,10 @@ static struct virQEMUCapsStringFlags vir
|
||||
{ "p3", QEMU_CAPS_NEC_USB_XHCI_PORTS },
|
||||
};
|
||||
|
||||
+static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsIntelIOMMU[] = {
|
||||
+ { "intremap", QEMU_CAPS_INTEL_IOMMU_INTREMAP },
|
||||
+};
|
||||
+
|
||||
/* see documentation for virQEMUCapsQMPSchemaGetByPath for the query format */
|
||||
static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = {
|
||||
{ "blockdev-add/arg-type/options/+gluster/debug-level", QEMU_CAPS_GLUSTER_DEBUG_LEVEL},
|
||||
@@ -1827,6 +1832,9 @@ static struct virQEMUCapsObjectTypeProps
|
||||
{ "nec-usb-xhci", virQEMUCapsObjectPropsUSBNECXHCI,
|
||||
ARRAY_CARDINALITY(virQEMUCapsObjectPropsUSBNECXHCI),
|
||||
-1 },
|
||||
+ { "intel-iommu", virQEMUCapsObjectPropsIntelIOMMU,
|
||||
+ ARRAY_CARDINALITY(virQEMUCapsObjectPropsIntelIOMMU),
|
||||
+ QEMU_CAPS_DEVICE_INTEL_IOMMU},
|
||||
};
|
||||
|
||||
struct virQEMUCapsPropTypeObjects {
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_capabilities.h
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_capabilities.h
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_capabilities.h
|
||||
@@ -407,6 +407,7 @@ typedef enum {
|
||||
/* 255 */
|
||||
QEMU_CAPS_MACHINE_KERNEL_IRQCHIP, /* -machine kernel_irqchip */
|
||||
QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT, /* -machine kernel_irqchip=split */
|
||||
+ QEMU_CAPS_INTEL_IOMMU_INTREMAP, /* intel-iommu.intremap */
|
||||
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_command.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_command.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_command.c
|
||||
@@ -6685,6 +6685,20 @@ qemuBuildIOMMUCommandLine(virCommandPtr
|
||||
if (!iommu)
|
||||
return 0;
|
||||
|
||||
+ switch (iommu->model) {
|
||||
+ case VIR_DOMAIN_IOMMU_MODEL_INTEL:
|
||||
+ if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT &&
|
||||
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_INTEL_IOMMU_INTREMAP)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("iommu: interrupt remapping is not supported "
|
||||
+ "with this QEMU binary"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+ break;
|
||||
+ case VIR_DOMAIN_IOMMU_MODEL_LAST:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_IOMMU))
|
||||
return 0; /* Already handled via -machine */
|
||||
|
||||
@@ -6705,6 +6719,10 @@ qemuBuildIOMMUCommandLine(virCommandPtr
|
||||
return -1;
|
||||
}
|
||||
virBufferAddLit(&opts, "intel-iommu");
|
||||
+ if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&opts, ",intremap=%s",
|
||||
+ virTristateSwitchTypeToString(iommu->intremap));
|
||||
+ }
|
||||
case VIR_DOMAIN_IOMMU_MODEL_LAST:
|
||||
break;
|
||||
}
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.replies
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.replies
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.replies
|
||||
@@ -3123,6 +3123,16 @@
|
||||
{
|
||||
"return": [
|
||||
{
|
||||
+ "name": "version",
|
||||
+ "type": "uint32"
|
||||
+ }
|
||||
+ ],
|
||||
+ "id": "libvirt-41"
|
||||
+}
|
||||
+
|
||||
+{
|
||||
+ "return": [
|
||||
+ {
|
||||
"name": "pc-i440fx-2.4",
|
||||
"is-default": true,
|
||||
"cpu-max": 255,
|
||||
@@ -3246,7 +3256,7 @@
|
||||
"cpu-max": 255
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-41"
|
||||
+ "id": "libvirt-42"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -3336,21 +3346,21 @@
|
||||
"name": "qemu64"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-42"
|
||||
+ "id": "libvirt-43"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"tpm-tis"
|
||||
],
|
||||
- "id": "libvirt-43"
|
||||
+ "id": "libvirt-44"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"passthrough"
|
||||
],
|
||||
- "id": "libvirt-44"
|
||||
+ "id": "libvirt-45"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -4358,7 +4368,7 @@
|
||||
"option": "drive"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-45"
|
||||
+ "id": "libvirt-46"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -4388,7 +4398,7 @@
|
||||
"capability": "events"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-46"
|
||||
+ "id": "libvirt-47"
|
||||
}
|
||||
|
||||
{
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.replies
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.replies
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.replies
|
||||
@@ -3286,6 +3286,16 @@
|
||||
{
|
||||
"return": [
|
||||
{
|
||||
+ "name": "version",
|
||||
+ "type": "uint32"
|
||||
+ }
|
||||
+ ],
|
||||
+ "id": "libvirt-41"
|
||||
+}
|
||||
+
|
||||
+{
|
||||
+ "return": [
|
||||
+ {
|
||||
"name": "pc-i440fx-2.4",
|
||||
"cpu-max": 255
|
||||
},
|
||||
@@ -3417,7 +3427,7 @@
|
||||
"cpu-max": 255
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-41"
|
||||
+ "id": "libvirt-42"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -3507,21 +3517,21 @@
|
||||
"name": "qemu64"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-42"
|
||||
+ "id": "libvirt-43"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"tpm-tis"
|
||||
],
|
||||
- "id": "libvirt-43"
|
||||
+ "id": "libvirt-44"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"passthrough"
|
||||
],
|
||||
- "id": "libvirt-44"
|
||||
+ "id": "libvirt-45"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -4566,7 +4576,7 @@
|
||||
"option": "drive"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-45"
|
||||
+ "id": "libvirt-46"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -4600,7 +4610,7 @@
|
||||
"capability": "x-postcopy-ram"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-46"
|
||||
+ "id": "libvirt-47"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -12145,7 +12155,7 @@
|
||||
"meta-type": "array"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-47"
|
||||
+ "id": "libvirt-48"
|
||||
}
|
||||
|
||||
{
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.replies
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.replies
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.replies
|
||||
@@ -3368,6 +3368,16 @@
|
||||
{
|
||||
"return": [
|
||||
{
|
||||
+ "name": "version",
|
||||
+ "type": "uint32"
|
||||
+ }
|
||||
+ ],
|
||||
+ "id": "libvirt-41"
|
||||
+}
|
||||
+
|
||||
+{
|
||||
+ "return": [
|
||||
+ {
|
||||
"name": "pc-0.12",
|
||||
"cpu-max": 255
|
||||
},
|
||||
@@ -3475,7 +3485,7 @@
|
||||
"cpu-max": 255
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-41"
|
||||
+ "id": "libvirt-42"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -3565,21 +3575,21 @@
|
||||
"name": "qemu64"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-42"
|
||||
+ "id": "libvirt-43"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"tpm-tis"
|
||||
],
|
||||
- "id": "libvirt-43"
|
||||
+ "id": "libvirt-44"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"passthrough"
|
||||
],
|
||||
- "id": "libvirt-44"
|
||||
+ "id": "libvirt-45"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -4673,7 +4683,7 @@
|
||||
"option": "drive"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-45"
|
||||
+ "id": "libvirt-46"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -4707,7 +4717,7 @@
|
||||
"capability": "postcopy-ram"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-46"
|
||||
+ "id": "libvirt-47"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -12712,7 +12722,7 @@
|
||||
"meta-type": "array"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-47"
|
||||
+ "id": "libvirt-48"
|
||||
}
|
||||
|
||||
{
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.replies
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.replies
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.replies
|
||||
@@ -3559,6 +3559,20 @@
|
||||
{
|
||||
"return": [
|
||||
{
|
||||
+ "name": "version",
|
||||
+ "type": "uint32"
|
||||
+ },
|
||||
+ {
|
||||
+ "name": "intremap",
|
||||
+ "type": "bool"
|
||||
+ }
|
||||
+ ],
|
||||
+ "id": "libvirt-41"
|
||||
+}
|
||||
+
|
||||
+{
|
||||
+ "return": [
|
||||
+ {
|
||||
"hotpluggable-cpus": true,
|
||||
"name": "pc-0.12",
|
||||
"cpu-max": 255
|
||||
@@ -3702,7 +3716,7 @@
|
||||
"cpu-max": 255
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-41"
|
||||
+ "id": "libvirt-42"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -3795,21 +3809,21 @@
|
||||
"name": "qemu64"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-42"
|
||||
+ "id": "libvirt-43"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"tpm-tis"
|
||||
],
|
||||
- "id": "libvirt-43"
|
||||
+ "id": "libvirt-44"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"passthrough"
|
||||
],
|
||||
- "id": "libvirt-44"
|
||||
+ "id": "libvirt-45"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -4907,7 +4921,7 @@
|
||||
"option": "drive"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-45"
|
||||
+ "id": "libvirt-46"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -4941,7 +4955,7 @@
|
||||
"capability": "postcopy-ram"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-46"
|
||||
+ "id": "libvirt-47"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -13297,7 +13311,7 @@
|
||||
"meta-type": "object"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-47"
|
||||
+ "id": "libvirt-48"
|
||||
}
|
||||
|
||||
{
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
|
||||
@@ -204,6 +204,7 @@
|
||||
<flag name='query-named-block-nodes'/>
|
||||
<flag name='kernel-irqchip'/>
|
||||
<flag name='kernel-irqchip.split'/>
|
||||
+ <flag name='intel-iommu.intremap'/>
|
||||
<version>2007000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package> (v2.7.0)</package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.replies
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.replies
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.replies
|
||||
@@ -3692,6 +3692,29 @@
|
||||
{
|
||||
"return": [
|
||||
{
|
||||
+ "name": "eim",
|
||||
+ "description": "on/off/auto",
|
||||
+ "type": "OnOffAuto"
|
||||
+ },
|
||||
+ {
|
||||
+ "name": "x-buggy-eim",
|
||||
+ "type": "bool"
|
||||
+ },
|
||||
+ {
|
||||
+ "name": "intremap",
|
||||
+ "type": "bool"
|
||||
+ },
|
||||
+ {
|
||||
+ "name": "version",
|
||||
+ "type": "uint32"
|
||||
+ }
|
||||
+ ],
|
||||
+ "id": "libvirt-41"
|
||||
+}
|
||||
+
|
||||
+{
|
||||
+ "return": [
|
||||
+ {
|
||||
"hotpluggable-cpus": true,
|
||||
"name": "pc-0.12",
|
||||
"cpu-max": 255
|
||||
@@ -3855,7 +3878,7 @@
|
||||
"cpu-max": 255
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-41"
|
||||
+ "id": "libvirt-42"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -4061,21 +4084,21 @@
|
||||
"static": false
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-42"
|
||||
+ "id": "libvirt-43"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"tpm-tis"
|
||||
],
|
||||
- "id": "libvirt-43"
|
||||
+ "id": "libvirt-44"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"passthrough"
|
||||
],
|
||||
- "id": "libvirt-44"
|
||||
+ "id": "libvirt-45"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -5198,7 +5221,7 @@
|
||||
"option": "drive"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-45"
|
||||
+ "id": "libvirt-46"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -5236,7 +5259,7 @@
|
||||
"capability": "x-colo"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-46"
|
||||
+ "id": "libvirt-47"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -14006,7 +14029,7 @@
|
||||
"meta-type": "object"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-47"
|
||||
+ "id": "libvirt-48"
|
||||
}
|
||||
|
||||
{
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
|
||||
@@ -205,6 +205,7 @@
|
||||
<flag name='query-named-block-nodes'/>
|
||||
<flag name='kernel-irqchip'/>
|
||||
<flag name='kernel-irqchip.split'/>
|
||||
+ <flag name='intel-iommu.intremap'/>
|
||||
<version>2008000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package> (v2.8.0)</package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.replies
|
||||
@@ -4003,6 +4003,37 @@
|
||||
{
|
||||
"return": [
|
||||
{
|
||||
+ "name": "eim",
|
||||
+ "description": "on/off/auto",
|
||||
+ "type": "OnOffAuto"
|
||||
+ },
|
||||
+ {
|
||||
+ "name": "caching-mode",
|
||||
+ "type": "bool"
|
||||
+ },
|
||||
+ {
|
||||
+ "name": "x-buggy-eim",
|
||||
+ "type": "bool"
|
||||
+ },
|
||||
+ {
|
||||
+ "name": "intremap",
|
||||
+ "type": "bool"
|
||||
+ },
|
||||
+ {
|
||||
+ "name": "version",
|
||||
+ "type": "uint32"
|
||||
+ },
|
||||
+ {
|
||||
+ "name": "device-iotlb",
|
||||
+ "type": "bool"
|
||||
+ }
|
||||
+ ],
|
||||
+ "id": "libvirt-41"
|
||||
+}
|
||||
+
|
||||
+{
|
||||
+ "return": [
|
||||
+ {
|
||||
"hotpluggable-cpus": true,
|
||||
"name": "pc-0.12",
|
||||
"cpu-max": 255
|
||||
@@ -4176,7 +4207,7 @@
|
||||
"cpu-max": 255
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-41"
|
||||
+ "id": "libvirt-42"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -4458,21 +4489,21 @@
|
||||
"migration-safe": true
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-42"
|
||||
+ "id": "libvirt-43"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"tpm-tis"
|
||||
],
|
||||
- "id": "libvirt-43"
|
||||
+ "id": "libvirt-44"
|
||||
}
|
||||
|
||||
{
|
||||
"return": [
|
||||
"passthrough"
|
||||
],
|
||||
- "id": "libvirt-44"
|
||||
+ "id": "libvirt-45"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -5721,7 +5752,7 @@
|
||||
"option": "drive"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-45"
|
||||
+ "id": "libvirt-46"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -5763,7 +5794,7 @@
|
||||
"capability": "release-ram"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-46"
|
||||
+ "id": "libvirt-47"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -15049,7 +15080,7 @@
|
||||
"meta-type": "object"
|
||||
}
|
||||
],
|
||||
- "id": "libvirt-47"
|
||||
+ "id": "libvirt-48"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -15228,7 +15259,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
- "id": "libvirt-48"
|
||||
+ "id": "libvirt-49"
|
||||
}
|
||||
|
||||
{
|
||||
@@ -15469,7 +15500,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
- "id": "libvirt-49"
|
||||
+ "id": "libvirt-50"
|
||||
}
|
||||
|
||||
{
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
@@ -212,6 +212,7 @@
|
||||
<flag name='qemu-xhci'/>
|
||||
<flag name='kernel-irqchip'/>
|
||||
<flag name='kernel-irqchip.split'/>
|
||||
+ <flag name='intel-iommu.intremap'/>
|
||||
<version>2009000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package> (v2.9.0)</package>
|
||||
Index: libvirt-3.3.0/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.args
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.args
|
||||
+++ libvirt-3.3.0/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.args
|
||||
@@ -16,4 +16,4 @@ QEMU_AUDIO_DRV=none \
|
||||
-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \
|
||||
-no-acpi \
|
||||
-boot c \
|
||||
--device intel-iommu
|
||||
+-device intel-iommu,intremap=on
|
||||
Index: libvirt-3.3.0/tests/qemuxml2argvtest.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemuxml2argvtest.c
|
||||
+++ libvirt-3.3.0/tests/qemuxml2argvtest.c
|
||||
@@ -2513,6 +2513,7 @@ mymain(void)
|
||||
QEMU_CAPS_MACHINE_OPT,
|
||||
QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
|
||||
QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
|
||||
+ QEMU_CAPS_INTEL_IOMMU_INTREMAP,
|
||||
QEMU_CAPS_DEVICE_INTEL_IOMMU);
|
||||
|
||||
DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
|
185
2020e2c6-conf-intremap.patch
Normal file
185
2020e2c6-conf-intremap.patch
Normal file
@ -0,0 +1,185 @@
|
||||
commit 2020e2c6f2656ca1aa9032859ccde76185c37c39
|
||||
Author: Ján Tomko <jtomko@redhat.com>
|
||||
Date: Fri Mar 17 08:35:22 2017 +0100
|
||||
|
||||
conf: add <driver intremap> to <iommu>
|
||||
|
||||
Add a new attribute to control interrupt remapping.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1427005
|
||||
|
||||
Index: libvirt-3.3.0/docs/formatdomain.html.in
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/docs/formatdomain.html.in
|
||||
+++ libvirt-3.3.0/docs/formatdomain.html.in
|
||||
@@ -7396,7 +7396,9 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<pre>
|
||||
...
|
||||
<devices>
|
||||
- <iommu model='intel'/>
|
||||
+ <iommu model='intel'>
|
||||
+ <driver intremap='on'/>
|
||||
+ </iommu>
|
||||
</devices>
|
||||
...
|
||||
</pre>
|
||||
@@ -7407,6 +7409,26 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
Currently only the <code>intel</code> model is supported.
|
||||
</p>
|
||||
</dd>
|
||||
+ <dt><code>driver</code></dt>
|
||||
+ <dd>
|
||||
+ <p>
|
||||
+ The <code>driver</code> subelement can be used to configure
|
||||
+ additional options:
|
||||
+ </p>
|
||||
+ <dl>
|
||||
+ <dt><code>intremap</code></dt>
|
||||
+ <dd>
|
||||
+ <p>
|
||||
+ The <code>intremap</code> attribute with possible values
|
||||
+ <code>on</code> and <code>off</code> can be used to
|
||||
+ turn on interrupt remapping, a part of the VT-d functionality.
|
||||
+ Currently this requires split I/O APIC
|
||||
+ (<code><ioapic driver='qemu'/></code>).
|
||||
+ <span class="since">Since 3.4.0</span> (QEMU/KVM only)
|
||||
+ </p>
|
||||
+ </dd>
|
||||
+ </dl>
|
||||
+ </dd>
|
||||
</dl>
|
||||
|
||||
<h3><a name="seclabel">Security label</a></h3>
|
||||
Index: libvirt-3.3.0/docs/schemas/domaincommon.rng
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/docs/schemas/domaincommon.rng
|
||||
+++ libvirt-3.3.0/docs/schemas/domaincommon.rng
|
||||
@@ -3947,6 +3947,15 @@
|
||||
<attribute name="model">
|
||||
<value>intel</value>
|
||||
</attribute>
|
||||
+ <optional>
|
||||
+ <element name="driver">
|
||||
+ <optional>
|
||||
+ <attribute name="intremap">
|
||||
+ <ref name="virOnOff"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
+ </element>
|
||||
+ </optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
Index: libvirt-3.3.0/src/conf/domain_conf.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/conf/domain_conf.c
|
||||
+++ libvirt-3.3.0/src/conf/domain_conf.c
|
||||
@@ -14141,12 +14141,16 @@ virDomainMemoryDefParseXML(xmlNodePtr me
|
||||
|
||||
|
||||
static virDomainIOMMUDefPtr
|
||||
-virDomainIOMMUDefParseXML(xmlNodePtr node)
|
||||
+virDomainIOMMUDefParseXML(xmlNodePtr node,
|
||||
+ xmlXPathContextPtr ctxt)
|
||||
{
|
||||
virDomainIOMMUDefPtr iommu = NULL, ret = NULL;
|
||||
+ xmlNodePtr save = ctxt->node;
|
||||
char *tmp = NULL;
|
||||
int val;
|
||||
|
||||
+ ctxt->node = node;
|
||||
+
|
||||
if (VIR_ALLOC(iommu) < 0)
|
||||
goto cleanup;
|
||||
|
||||
@@ -14163,10 +14167,20 @@ virDomainIOMMUDefParseXML(xmlNodePtr nod
|
||||
|
||||
iommu->model = val;
|
||||
|
||||
+ VIR_FREE(tmp);
|
||||
+ if ((tmp = virXPathString("string(./driver/@intremap)", ctxt))) {
|
||||
+ if ((val = virTristateSwitchTypeFromString(tmp)) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, _("unknown intremap value: %s"), tmp);
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ iommu->intremap = val;
|
||||
+ }
|
||||
+
|
||||
ret = iommu;
|
||||
iommu = NULL;
|
||||
|
||||
cleanup:
|
||||
+ ctxt->node = save;
|
||||
VIR_FREE(iommu);
|
||||
VIR_FREE(tmp);
|
||||
return ret;
|
||||
@@ -14319,7 +14333,7 @@ virDomainDeviceDefParse(const char *xmlS
|
||||
goto error;
|
||||
break;
|
||||
case VIR_DOMAIN_DEVICE_IOMMU:
|
||||
- if (!(dev->data.iommu = virDomainIOMMUDefParseXML(node)))
|
||||
+ if (!(dev->data.iommu = virDomainIOMMUDefParseXML(node, ctxt)))
|
||||
goto error;
|
||||
break;
|
||||
case VIR_DOMAIN_DEVICE_NONE:
|
||||
@@ -18449,7 +18463,7 @@ virDomainDefParseXML(xmlDocPtr xml,
|
||||
}
|
||||
|
||||
if (n > 0) {
|
||||
- if (!(def->iommu = virDomainIOMMUDefParseXML(nodes[0])))
|
||||
+ if (!(def->iommu = virDomainIOMMUDefParseXML(nodes[0], ctxt)))
|
||||
goto error;
|
||||
}
|
||||
VIR_FREE(nodes);
|
||||
@@ -24125,8 +24139,24 @@ static void
|
||||
virDomainIOMMUDefFormat(virBufferPtr buf,
|
||||
const virDomainIOMMUDef *iommu)
|
||||
{
|
||||
- virBufferAsprintf(buf, "<iommu model='%s'/>\n",
|
||||
+ virBuffer childBuf = VIR_BUFFER_INITIALIZER;
|
||||
+
|
||||
+ virBufferAdjustIndent(&childBuf, virBufferGetIndent(buf, false) + 2);
|
||||
+
|
||||
+ if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&childBuf, "<driver intremap='%s'/>\n",
|
||||
+ virTristateSwitchTypeToString(iommu->intremap));
|
||||
+ }
|
||||
+
|
||||
+ virBufferAsprintf(buf, "<iommu model='%s'",
|
||||
virDomainIOMMUModelTypeToString(iommu->model));
|
||||
+ if (virBufferUse(&childBuf)) {
|
||||
+ virBufferAddLit(buf, ">\n");
|
||||
+ virBufferAddBuffer(buf, &childBuf);
|
||||
+ virBufferAddLit(buf, "</iommu>\n");
|
||||
+ } else {
|
||||
+ virBufferAddLit(buf, "/>\n");
|
||||
+ }
|
||||
}
|
||||
|
||||
|
||||
Index: libvirt-3.3.0/src/conf/domain_conf.h
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/conf/domain_conf.h
|
||||
+++ libvirt-3.3.0/src/conf/domain_conf.h
|
||||
@@ -2209,6 +2209,7 @@ typedef enum {
|
||||
|
||||
struct _virDomainIOMMUDef {
|
||||
virDomainIOMMUModel model;
|
||||
+ virTristateSwitch intremap;
|
||||
};
|
||||
/*
|
||||
* Guest VM main configuration
|
||||
Index: libvirt-3.3.0/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.xml
|
||||
+++ libvirt-3.3.0/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.xml
|
||||
@@ -24,6 +24,8 @@
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<memballoon model='none'/>
|
||||
- <iommu model='intel'/>
|
||||
+ <iommu model='intel'>
|
||||
+ <driver intremap='on'/>
|
||||
+ </iommu>
|
||||
</devices>
|
||||
</domain>
|
49
3a276c65-conf-iommu-def-stability-check.patch
Normal file
49
3a276c65-conf-iommu-def-stability-check.patch
Normal file
@ -0,0 +1,49 @@
|
||||
commit 3a276c6524026b661ed7bee4539fc5387b963611
|
||||
Author: Ján Tomko <jtomko@redhat.com>
|
||||
Date: Fri May 12 16:59:09 2017 +0200
|
||||
|
||||
conf: split out virDomainIOMMUDefCheckABIStability
|
||||
|
||||
Index: libvirt-3.3.0/src/conf/domain_conf.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/conf/domain_conf.c
|
||||
+++ libvirt-3.3.0/src/conf/domain_conf.c
|
||||
@@ -19819,6 +19819,22 @@ virDomainMemoryDefCheckABIStability(virD
|
||||
|
||||
|
||||
static bool
|
||||
+virDomainIOMMUDefCheckABIStability(virDomainIOMMUDefPtr src,
|
||||
+ virDomainIOMMUDefPtr dst)
|
||||
+{
|
||||
+ if (src->model != dst->model) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("Target domain IOMMU device model '%s' "
|
||||
+ "does not match source '%s'"),
|
||||
+ virDomainIOMMUModelTypeToString(dst->model),
|
||||
+ virDomainIOMMUModelTypeToString(src->model));
|
||||
+ return false;
|
||||
+ }
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static bool
|
||||
virDomainDefVcpuCheckAbiStability(virDomainDefPtr src,
|
||||
virDomainDefPtr dst)
|
||||
{
|
||||
@@ -20284,14 +20300,8 @@ virDomainDefCheckABIStabilityFlags(virDo
|
||||
}
|
||||
|
||||
if (src->iommu &&
|
||||
- src->iommu->model != dst->iommu->model) {
|
||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
- _("Target domain IOMMU device model '%s' "
|
||||
- "does not match source '%s'"),
|
||||
- virDomainIOMMUModelTypeToString(dst->iommu->model),
|
||||
- virDomainIOMMUModelTypeToString(src->iommu->model));
|
||||
+ !virDomainIOMMUDefCheckABIStability(src->iommu, dst->iommu))
|
||||
goto error;
|
||||
- }
|
||||
|
||||
/* Coverity is not very happy with this - all dead_error_condition */
|
||||
#if !STATIC_ANALYSIS
|
363
6b5c6314-qemu-irqchip.patch
Normal file
363
6b5c6314-qemu-irqchip.patch
Normal file
@ -0,0 +1,363 @@
|
||||
commit 6b5c6314b2f7a3b54c94a591e6b0dcd13ef1c6ce
|
||||
Author: Ján Tomko <jtomko@redhat.com>
|
||||
Date: Fri Mar 17 08:26:49 2017 +0100
|
||||
|
||||
qemu: format kernel_irqchip on the command line
|
||||
|
||||
Add kernel_irqchip=split/on to the QEMU command line
|
||||
and a capability that looks for it in query-command-line-options
|
||||
output. For the 'split' option, use a version check
|
||||
since it cannot be reasonably probed.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1427005
|
||||
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_capabilities.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_capabilities.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_capabilities.c
|
||||
@@ -366,6 +366,9 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAS
|
||||
"query-named-block-nodes",
|
||||
"cpu-cache",
|
||||
"qemu-xhci",
|
||||
+
|
||||
+ "kernel-irqchip", /* 255 */
|
||||
+ "kernel-irqchip.split",
|
||||
);
|
||||
|
||||
|
||||
@@ -3127,6 +3130,7 @@ static struct virQEMUCapsCommandLineProp
|
||||
{ "drive", "throttling.bps-total-max-length", QEMU_CAPS_DRIVE_IOTUNE_MAX_LENGTH },
|
||||
{ "drive", "throttling.group", QEMU_CAPS_DRIVE_IOTUNE_GROUP },
|
||||
{ "spice", "rendernode", QEMU_CAPS_SPICE_RENDERNODE },
|
||||
+ { "machine", "kernel_irqchip", QEMU_CAPS_MACHINE_KERNEL_IRQCHIP },
|
||||
};
|
||||
|
||||
static int
|
||||
@@ -4739,6 +4743,10 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr
|
||||
if (qemuCaps->version >= 2004050)
|
||||
virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACH_VIRT_GIC_VERSION);
|
||||
|
||||
+ /* no way to query if -machine kernel_irqchip supports split */
|
||||
+ if (qemuCaps->version >= 2006000)
|
||||
+ virQEMUCapsSet(qemuCaps, QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT);
|
||||
+
|
||||
if (virQEMUCapsProbeQMPCommands(qemuCaps, mon) < 0)
|
||||
goto cleanup;
|
||||
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_capabilities.h
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_capabilities.h
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_capabilities.h
|
||||
@@ -404,6 +404,10 @@ typedef enum {
|
||||
QEMU_CAPS_CPU_CACHE, /* -cpu supports host-cache-info and l3-cache properties */
|
||||
QEMU_CAPS_DEVICE_QEMU_XHCI, /* -device qemu-xhci */
|
||||
|
||||
+ /* 255 */
|
||||
+ QEMU_CAPS_MACHINE_KERNEL_IRQCHIP, /* -machine kernel_irqchip */
|
||||
+ QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT, /* -machine kernel_irqchip=split */
|
||||
+
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_command.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_command.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_command.c
|
||||
@@ -7422,6 +7422,31 @@ qemuBuildMachineCommandLine(virCommandPt
|
||||
}
|
||||
}
|
||||
|
||||
+ if (def->features[VIR_DOMAIN_FEATURE_IOAPIC] == VIR_TRISTATE_SWITCH_ON) {
|
||||
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_KERNEL_IRQCHIP)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("I/O APIC tuning is not supported by this "
|
||||
+ "QEMU binary"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ switch (def->ioapic) {
|
||||
+ case VIR_DOMAIN_IOAPIC_QEMU:
|
||||
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("split I/O APIC is not supported by this "
|
||||
+ "QEMU binary"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ virBufferAddLit(&buf, ",kernel_irqchip=split");
|
||||
+ break;
|
||||
+ case VIR_DOMAIN_IOAPIC_KVM:
|
||||
+ virBufferAddLit(&buf, ",kernel_irqchip=on");
|
||||
+ break;
|
||||
+ case VIR_DOMAIN_IOAPIC_LAST:
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
virCommandAddArgBuffer(cmd, &buf);
|
||||
}
|
||||
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_domain.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_domain.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_domain.c
|
||||
@@ -2807,6 +2807,22 @@ qemuDomainDefCPUPostParse(virDomainDefPt
|
||||
|
||||
|
||||
static int
|
||||
+qemuDomainDefVerifyFeatures(const virDomainDef *def)
|
||||
+{
|
||||
+ if (def->features[VIR_DOMAIN_FEATURE_IOAPIC] == VIR_TRISTATE_SWITCH_ON &&
|
||||
+ !ARCH_IS_X86(def->os.arch)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("I/O APIC tuning is not supported "
|
||||
+ "for '%s' architecture"),
|
||||
+ virArchToString(def->os.arch));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
qemuDomainDefPostParse(virDomainDefPtr def,
|
||||
virCapsPtr caps,
|
||||
unsigned int parseFlags,
|
||||
@@ -2861,6 +2877,9 @@ qemuDomainDefPostParse(virDomainDefPtr d
|
||||
|
||||
qemuDomainDefEnableDefaultFeatures(def, qemuCaps);
|
||||
|
||||
+ if (qemuDomainDefVerifyFeatures(def) < 0)
|
||||
+ goto cleanup;
|
||||
+
|
||||
if (qemuDomainRecheckInternalPaths(def, cfg, parseFlags) < 0)
|
||||
goto cleanup;
|
||||
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
|
||||
@@ -140,6 +140,7 @@
|
||||
<flag name='display'/>
|
||||
<flag name='vhost-scsi'/>
|
||||
<flag name='query-cpu-definitions'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
<version>1005003</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
|
||||
@@ -145,6 +145,7 @@
|
||||
<flag name='display'/>
|
||||
<flag name='vhost-scsi'/>
|
||||
<flag name='query-cpu-definitions'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
<version>1006000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
|
||||
@@ -147,6 +147,7 @@
|
||||
<flag name='display'/>
|
||||
<flag name='vhost-scsi'/>
|
||||
<flag name='query-cpu-definitions'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
<version>1007000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
|
||||
@@ -163,6 +163,7 @@
|
||||
<flag name='vhost-scsi'/>
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
<version>2001001</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
|
||||
@@ -185,6 +185,7 @@
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='block-write-threshold'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
<version>2004000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
|
||||
@@ -191,6 +191,7 @@
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='block-write-threshold'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
<version>2005000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml
|
||||
@@ -168,6 +168,8 @@
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='block-write-threshold'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
+ <flag name='kernel-irqchip.split'/>
|
||||
<version>2006000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml
|
||||
@@ -168,6 +168,8 @@
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='block-write-threshold'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
+ <flag name='kernel-irqchip.split'/>
|
||||
<version>2006000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml
|
||||
@@ -162,6 +162,8 @@
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='block-write-threshold'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
+ <flag name='kernel-irqchip.split'/>
|
||||
<version>2006000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
|
||||
@@ -200,6 +200,8 @@
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='block-write-threshold'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
+ <flag name='kernel-irqchip.split'/>
|
||||
<version>2006000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml
|
||||
@@ -130,6 +130,8 @@
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='block-write-threshold'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
+ <flag name='kernel-irqchip.split'/>
|
||||
<version>2007000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
|
||||
@@ -202,6 +202,8 @@
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='block-write-threshold'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
+ <flag name='kernel-irqchip.split'/>
|
||||
<version>2007000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package> (v2.7.0)</package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml
|
||||
@@ -132,6 +132,8 @@
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='block-write-threshold'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
+ <flag name='kernel-irqchip.split'/>
|
||||
<version>2007093</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package></package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
|
||||
@@ -203,6 +203,8 @@
|
||||
<flag name='query-cpu-definitions'/>
|
||||
<flag name='block-write-threshold'/>
|
||||
<flag name='query-named-block-nodes'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
+ <flag name='kernel-irqchip.split'/>
|
||||
<version>2008000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package> (v2.8.0)</package>
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
@@ -210,6 +210,8 @@
|
||||
<flag name='query-named-block-nodes'/>
|
||||
<flag name='cpu-cache'/>
|
||||
<flag name='qemu-xhci'/>
|
||||
+ <flag name='kernel-irqchip'/>
|
||||
+ <flag name='kernel-irqchip.split'/>
|
||||
<version>2009000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package> (v2.9.0)</package>
|
||||
Index: libvirt-3.3.0/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.args
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-3.3.0/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.args
|
||||
@@ -0,0 +1,19 @@
|
||||
+LC_ALL=C \
|
||||
+PATH=/bin \
|
||||
+HOME=/home/test \
|
||||
+USER=test \
|
||||
+LOGNAME=test \
|
||||
+QEMU_AUDIO_DRV=none \
|
||||
+/usr/bin/qemu-system-x86_64 \
|
||||
+-name QEMUGuest1 \
|
||||
+-S \
|
||||
+-machine q35,accel=kvm,kernel_irqchip=split \
|
||||
+-m 214 \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
+-nographic \
|
||||
+-nodefaults \
|
||||
+-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \
|
||||
+-no-acpi \
|
||||
+-boot c \
|
||||
+-device intel-iommu
|
||||
Index: libvirt-3.3.0/tests/qemuxml2argvtest.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemuxml2argvtest.c
|
||||
+++ libvirt-3.3.0/tests/qemuxml2argvtest.c
|
||||
@@ -2509,6 +2509,11 @@ mymain(void)
|
||||
DO_TEST("intel-iommu-machine",
|
||||
QEMU_CAPS_MACHINE_OPT,
|
||||
QEMU_CAPS_MACHINE_IOMMU);
|
||||
+ DO_TEST("intel-iommu-ioapic",
|
||||
+ QEMU_CAPS_MACHINE_OPT,
|
||||
+ QEMU_CAPS_MACHINE_KERNEL_IRQCHIP,
|
||||
+ QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
|
||||
+ QEMU_CAPS_DEVICE_INTEL_IOMMU);
|
||||
|
||||
DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
|
||||
|
229
8023b21a-conf-ioapic.patch
Normal file
229
8023b21a-conf-ioapic.patch
Normal file
@ -0,0 +1,229 @@
|
||||
commit 8023b21a95f271e51810de7f1362e609eaadc1e4
|
||||
Author: Ján Tomko <jtomko@redhat.com>
|
||||
Date: Fri Mar 17 08:26:35 2017 +0100
|
||||
|
||||
conf: add <ioapic driver> to <features>
|
||||
|
||||
Add a new <ioapic> element with a driver attribute.
|
||||
|
||||
Possible values are qemu and kvm. With 'qemu', the I/O
|
||||
APIC can be put in the userspace even for KVM domains.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1427005
|
||||
|
||||
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
|
||||
index 8c884f4af..bfc1df390 100644
|
||||
--- a/docs/formatdomain.html.in
|
||||
+++ b/docs/formatdomain.html.in
|
||||
@@ -1678,6 +1678,7 @@
|
||||
</kvm>
|
||||
<pvspinlock state='on'/>
|
||||
<gic version='2'/>
|
||||
+ <ioapic driver='qemu'/>
|
||||
|
||||
</features>
|
||||
...</pre>
|
||||
@@ -1839,6 +1840,14 @@
|
||||
for hypervisor to decide.
|
||||
<span class="since">Since 2.1.0</span>
|
||||
</dd>
|
||||
+ <dt><code>ioapic</code></dt>
|
||||
+ <dd>Tune the I/O APIC. Possible values for the
|
||||
+ <code>driver</code> attribute are:
|
||||
+ <code>kvm</code> (default for KVM domains)
|
||||
+ and <code>qemu</code> which puts I/O APIC in userspace
|
||||
+ which is also known as a split I/O APIC mode.
|
||||
+ <span class="since">Since 3.4.0</span> (QEMU/KVM only)
|
||||
+ </dd>
|
||||
</dl>
|
||||
|
||||
<h3><a name="elementsTime">Time keeping</a></h3>
|
||||
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
|
||||
index 281309ec0..64f718b70 100644
|
||||
--- a/docs/schemas/domaincommon.rng
|
||||
+++ b/docs/schemas/domaincommon.rng
|
||||
@@ -4569,6 +4569,9 @@
|
||||
</optional>
|
||||
</element>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <ref name="ioapic"/>
|
||||
+ </optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</optional>
|
||||
@@ -4747,6 +4750,18 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
+ <define name="ioapic">
|
||||
+ <element name="ioapic">
|
||||
+ <attribute name="driver">
|
||||
+ <choice>
|
||||
+ <value>qemu</value>
|
||||
+ <value>kvm</value>
|
||||
+ </choice>
|
||||
+ </attribute>
|
||||
+ <empty/>
|
||||
+ </element>
|
||||
+ </define>
|
||||
+
|
||||
<define name="address">
|
||||
<element name="address">
|
||||
<choice>
|
||||
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
|
||||
index 0ff216e3a..29b04d362 100644
|
||||
--- a/src/conf/domain_conf.c
|
||||
+++ b/src/conf/domain_conf.c
|
||||
@@ -141,7 +141,8 @@ VIR_ENUM_IMPL(virDomainFeature, VIR_DOMAIN_FEATURE_LAST,
|
||||
"pmu",
|
||||
"vmport",
|
||||
"gic",
|
||||
- "smm")
|
||||
+ "smm",
|
||||
+ "ioapic")
|
||||
|
||||
VIR_ENUM_IMPL(virDomainCapabilitiesPolicy, VIR_DOMAIN_CAPABILITIES_POLICY_LAST,
|
||||
"default",
|
||||
@@ -859,6 +860,11 @@ VIR_ENUM_IMPL(virDomainLoader,
|
||||
"rom",
|
||||
"pflash")
|
||||
|
||||
+VIR_ENUM_IMPL(virDomainIOAPIC,
|
||||
+ VIR_DOMAIN_IOAPIC_LAST,
|
||||
+ "qemu",
|
||||
+ "kvm")
|
||||
+
|
||||
/* Internal mapping: subset of block job types that can be present in
|
||||
* <mirror> XML (remaining types are not two-phase). */
|
||||
VIR_ENUM_DECL(virDomainBlockJob)
|
||||
@@ -17527,6 +17533,24 @@ virDomainDefParseXML(xmlDocPtr xml,
|
||||
ctxt->node = node;
|
||||
break;
|
||||
|
||||
+ case VIR_DOMAIN_FEATURE_IOAPIC:
|
||||
+ node = ctxt->node;
|
||||
+ ctxt->node = nodes[i];
|
||||
+ tmp = virXPathString("string(./@driver)", ctxt);
|
||||
+ if (tmp) {
|
||||
+ int value = virDomainIOAPICTypeFromString(tmp);
|
||||
+ if (value < 0) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("Unknown driver mode: %s"),
|
||||
+ tmp);
|
||||
+ goto error;
|
||||
+ }
|
||||
+ def->ioapic = value;
|
||||
+ def->features[val] = VIR_TRISTATE_SWITCH_ON;
|
||||
+ }
|
||||
+ ctxt->node = node;
|
||||
+ break;
|
||||
+
|
||||
/* coverity[dead_error_begin] */
|
||||
case VIR_DOMAIN_FEATURE_LAST:
|
||||
break;
|
||||
@@ -24627,6 +24651,13 @@ virDomainDefFormatInternal(virDomainDefPtr def,
|
||||
}
|
||||
break;
|
||||
|
||||
+ case VIR_DOMAIN_FEATURE_IOAPIC:
|
||||
+ if (def->features[i] == VIR_TRISTATE_SWITCH_ON) {
|
||||
+ virBufferAsprintf(buf, "<ioapic driver='%s'/>\n",
|
||||
+ virDomainIOAPICTypeToString(def->ioapic));
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
/* coverity[dead_error_begin] */
|
||||
case VIR_DOMAIN_FEATURE_LAST:
|
||||
break;
|
||||
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
|
||||
index 09fb7aada..82b4785a6 100644
|
||||
--- a/src/conf/domain_conf.h
|
||||
+++ b/src/conf/domain_conf.h
|
||||
@@ -1670,6 +1670,7 @@ typedef enum {
|
||||
VIR_DOMAIN_FEATURE_VMPORT,
|
||||
VIR_DOMAIN_FEATURE_GIC,
|
||||
VIR_DOMAIN_FEATURE_SMM,
|
||||
+ VIR_DOMAIN_FEATURE_IOAPIC,
|
||||
|
||||
VIR_DOMAIN_FEATURE_LAST
|
||||
} virDomainFeature;
|
||||
@@ -1809,6 +1810,15 @@ struct _virDomainLoaderDef {
|
||||
|
||||
void virDomainLoaderDefFree(virDomainLoaderDefPtr loader);
|
||||
|
||||
+typedef enum {
|
||||
+ VIR_DOMAIN_IOAPIC_QEMU = 0,
|
||||
+ VIR_DOMAIN_IOAPIC_KVM,
|
||||
+
|
||||
+ VIR_DOMAIN_IOAPIC_LAST
|
||||
+} virDomainIOAPIC;
|
||||
+
|
||||
+VIR_ENUM_DECL(virDomainIOAPIC);
|
||||
+
|
||||
/* Operating system configuration data & machine / arch */
|
||||
typedef struct _virDomainOSDef virDomainOSDef;
|
||||
typedef virDomainOSDef *virDomainOSDefPtr;
|
||||
@@ -2258,6 +2268,7 @@ struct _virDomainDef {
|
||||
unsigned int hyperv_spinlocks;
|
||||
virGICVersion gic_version;
|
||||
char *hyperv_vendor_id;
|
||||
+ virDomainIOAPIC ioapic;
|
||||
|
||||
/* These options are of type virTristateSwitch: ON = keep, OFF = drop */
|
||||
int caps_features[VIR_DOMAIN_CAPS_FEATURE_LAST];
|
||||
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.xml b/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.xml
|
||||
new file mode 100644
|
||||
index 000000000..284d63a30
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.xml
|
||||
@@ -0,0 +1,29 @@
|
||||
+<domain type='kvm'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='q35'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <features>
|
||||
+ <ioapic driver='qemu'/>
|
||||
+ </features>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <controller type='pci' index='0' model='pcie-root'/>
|
||||
+ <controller type='sata' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ <iommu model='intel'/>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-intel-iommu-ioapic.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-intel-iommu-ioapic.xml
|
||||
new file mode 120000
|
||||
index 000000000..42d17b2c0
|
||||
--- /dev/null
|
||||
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-intel-iommu-ioapic.xml
|
||||
@@ -0,0 +1 @@
|
||||
+../qemuxml2argvdata/qemuxml2argv-intel-iommu-ioapic.xml
|
||||
\ No newline at end of file
|
||||
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
|
||||
index 2dccde746..0f00b20d3 100644
|
||||
--- a/tests/qemuxml2xmltest.c
|
||||
+++ b/tests/qemuxml2xmltest.c
|
||||
@@ -1122,6 +1122,7 @@ mymain(void)
|
||||
DO_TEST("intel-iommu-machine",
|
||||
QEMU_CAPS_MACHINE_OPT,
|
||||
QEMU_CAPS_MACHINE_IOMMU);
|
||||
+ DO_TEST("intel-iommu-ioapic", NONE);
|
||||
|
||||
DO_TEST("cpu-check-none", NONE);
|
||||
DO_TEST("cpu-check-partial", NONE);
|
52
935d927a-conf-iommu-ABI-stability-check.patch
Normal file
52
935d927a-conf-iommu-ABI-stability-check.patch
Normal file
@ -0,0 +1,52 @@
|
||||
commit 935d927aa881753fff30f6236eedcf9680bca638
|
||||
Author: Ján Tomko <jtomko@redhat.com>
|
||||
Date: Fri May 12 16:59:45 2017 +0200
|
||||
|
||||
conf: add ABI stability checks for IOMMU options
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1427005
|
||||
|
||||
Index: libvirt-3.3.0/src/conf/domain_conf.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/conf/domain_conf.c
|
||||
+++ libvirt-3.3.0/src/conf/domain_conf.c
|
||||
@@ -19691,6 +19691,16 @@ virDomainDefFeaturesCheckABIStability(vi
|
||||
}
|
||||
}
|
||||
|
||||
+ /* ioapic */
|
||||
+ if (src->ioapic != dst->ioapic) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("State of ioapic differs: "
|
||||
+ "source: '%s', destination: '%s'"),
|
||||
+ virDomainIOAPICTypeToString(src->ioapic),
|
||||
+ virDomainIOAPICTypeToString(dst->ioapic));
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -19830,6 +19840,22 @@ virDomainIOMMUDefCheckABIStability(virDo
|
||||
virDomainIOMMUModelTypeToString(src->model));
|
||||
return false;
|
||||
}
|
||||
+ if (src->intremap != dst->intremap) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("Target domain IOMMU device intremap value '%s' "
|
||||
+ "does not match source '%s'"),
|
||||
+ virTristateSwitchTypeToString(dst->intremap),
|
||||
+ virTristateSwitchTypeToString(src->intremap));
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (src->caching_mode != dst->caching_mode) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
+ _("Target domain IOMMU device caching mode '%s' "
|
||||
+ "does not match source '%s'"),
|
||||
+ virTristateSwitchTypeToString(dst->caching_mode),
|
||||
+ virTristateSwitchTypeToString(src->caching_mode));
|
||||
+ return false;
|
||||
+ }
|
||||
return true;
|
||||
}
|
||||
|
136
a5691448-qemu-iommu-cache-mode.patch
Normal file
136
a5691448-qemu-iommu-cache-mode.patch
Normal file
@ -0,0 +1,136 @@
|
||||
commit a56914486ca67f921ee6e3ce26b5787fccb47155
|
||||
Author: Ján Tomko <jtomko@redhat.com>
|
||||
Date: Fri Mar 17 08:28:04 2017 +0100
|
||||
|
||||
qemu: format caching-mode on iommu command line
|
||||
|
||||
Format the caching-mode option for the intel-iommu device,
|
||||
based on its <driver caching> attribute value.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1427005
|
||||
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_capabilities.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_capabilities.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_capabilities.c
|
||||
@@ -370,6 +370,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAS
|
||||
"kernel-irqchip", /* 255 */
|
||||
"kernel-irqchip.split",
|
||||
"intel-iommu.intremap",
|
||||
+ "intel-iommu.caching-mode",
|
||||
);
|
||||
|
||||
|
||||
@@ -1723,6 +1724,7 @@ static struct virQEMUCapsStringFlags vir
|
||||
|
||||
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsIntelIOMMU[] = {
|
||||
{ "intremap", QEMU_CAPS_INTEL_IOMMU_INTREMAP },
|
||||
+ { "caching-mode", QEMU_CAPS_INTEL_IOMMU_CACHING_MODE },
|
||||
};
|
||||
|
||||
/* see documentation for virQEMUCapsQMPSchemaGetByPath for the query format */
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_capabilities.h
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_capabilities.h
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_capabilities.h
|
||||
@@ -408,6 +408,7 @@ typedef enum {
|
||||
QEMU_CAPS_MACHINE_KERNEL_IRQCHIP, /* -machine kernel_irqchip */
|
||||
QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT, /* -machine kernel_irqchip=split */
|
||||
QEMU_CAPS_INTEL_IOMMU_INTREMAP, /* intel-iommu.intremap */
|
||||
+ QEMU_CAPS_INTEL_IOMMU_CACHING_MODE, /* intel-iommu.caching-mode */
|
||||
|
||||
QEMU_CAPS_LAST /* this must always be the last item */
|
||||
} virQEMUCapsFlags;
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_command.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_command.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_command.c
|
||||
@@ -6694,6 +6694,13 @@ qemuBuildIOMMUCommandLine(virCommandPtr
|
||||
"with this QEMU binary"));
|
||||
return -1;
|
||||
}
|
||||
+ if (iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT &&
|
||||
+ !virQEMUCapsGet(qemuCaps, QEMU_CAPS_INTEL_IOMMU_CACHING_MODE)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("iommu: caching mode is not supported "
|
||||
+ "with this QEMU binary"));
|
||||
+ return -1;
|
||||
+ }
|
||||
break;
|
||||
case VIR_DOMAIN_IOMMU_MODEL_LAST:
|
||||
break;
|
||||
@@ -6723,6 +6730,10 @@ qemuBuildIOMMUCommandLine(virCommandPtr
|
||||
virBufferAsprintf(&opts, ",intremap=%s",
|
||||
virTristateSwitchTypeToString(iommu->intremap));
|
||||
}
|
||||
+ if (iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&opts, ",caching-mode=%s",
|
||||
+ virTristateSwitchTypeToString(iommu->caching_mode));
|
||||
+ }
|
||||
case VIR_DOMAIN_IOMMU_MODEL_LAST:
|
||||
break;
|
||||
}
|
||||
Index: libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
+++ libvirt-3.3.0/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
|
||||
@@ -213,6 +213,7 @@
|
||||
<flag name='kernel-irqchip'/>
|
||||
<flag name='kernel-irqchip.split'/>
|
||||
<flag name='intel-iommu.intremap'/>
|
||||
+ <flag name='intel-iommu.caching-mode'/>
|
||||
<version>2009000</version>
|
||||
<kvmVersion>0</kvmVersion>
|
||||
<package> (v2.9.0)</package>
|
||||
Index: libvirt-3.3.0/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-caching-mode.args
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-3.3.0/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-caching-mode.args
|
||||
@@ -0,0 +1,25 @@
|
||||
+LC_ALL=C \
|
||||
+PATH=/bin \
|
||||
+HOME=/home/test \
|
||||
+USER=test \
|
||||
+LOGNAME=test \
|
||||
+QEMU_AUDIO_DRV=none \
|
||||
+/usr/bin/qemu-system-x86_64 \
|
||||
+-name QEMUGuest1 \
|
||||
+-S \
|
||||
+-machine q35,accel=tcg \
|
||||
+-m 214 \
|
||||
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
+-nographic \
|
||||
+-nodefaults \
|
||||
+-monitor unix:/tmp/lib/domain--1-QEMUGuest1/monitor.sock,server,nowait \
|
||||
+-no-acpi \
|
||||
+-boot c \
|
||||
+-device intel-iommu,intremap=on,caching-mode=on \
|
||||
+-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e \
|
||||
+-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x0 \
|
||||
+-device ioh3420,port=0x10,chassis=3,id=pci.3,bus=pcie.0,addr=0x2 \
|
||||
+-device ich9-usb-ehci1,id=usb,bus=pci.2,addr=0x2.0x7 \
|
||||
+-device rtl8139,vlan=0,id=net0,mac=52:54:00:ab:0c:5c,bus=pci.2,addr=0x1 \
|
||||
+-net user,vlan=0,name=hostnet0
|
||||
Index: libvirt-3.3.0/tests/qemuxml2argvtest.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemuxml2argvtest.c
|
||||
+++ libvirt-3.3.0/tests/qemuxml2argvtest.c
|
||||
@@ -2515,6 +2515,17 @@ mymain(void)
|
||||
QEMU_CAPS_MACHINE_KERNEL_IRQCHIP_SPLIT,
|
||||
QEMU_CAPS_INTEL_IOMMU_INTREMAP,
|
||||
QEMU_CAPS_DEVICE_INTEL_IOMMU);
|
||||
+ DO_TEST("intel-iommu-caching-mode",
|
||||
+ QEMU_CAPS_MACHINE_OPT,
|
||||
+ QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
||||
+ QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
||||
+ QEMU_CAPS_DEVICE_IOH3420,
|
||||
+ QEMU_CAPS_ICH9_AHCI,
|
||||
+ QEMU_CAPS_PCI_MULTIFUNCTION,
|
||||
+ QEMU_CAPS_ICH9_USB_EHCI1,
|
||||
+ QEMU_CAPS_DEVICE_INTEL_IOMMU,
|
||||
+ QEMU_CAPS_INTEL_IOMMU_INTREMAP,
|
||||
+ QEMU_CAPS_INTEL_IOMMU_CACHING_MODE);
|
||||
|
||||
DO_TEST("cpu-hotplug-startup", QEMU_CAPS_QUERY_HOTPLUGGABLE_CPUS);
|
||||
|
55
aeda1b8c-qemu-no-error-shutdown.patch
Normal file
55
aeda1b8c-qemu-no-error-shutdown.patch
Normal file
@ -0,0 +1,55 @@
|
||||
commit aeda1b8c56dc58b0a413acc61bbea938b40499e1
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Date: Thu Mar 9 10:54:32 2017 +0100
|
||||
|
||||
qemu: monitor: do not report error on shutdown
|
||||
|
||||
If a shutdown is expected because it was triggered via libvirt we can
|
||||
also expect the monitor to close. In those cases do not report an
|
||||
internal error like:
|
||||
"internal error: End of file from qemu monitor"
|
||||
|
||||
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_monitor.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_monitor.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_monitor.c
|
||||
@@ -63,6 +63,7 @@ struct _qemuMonitor {
|
||||
int fd;
|
||||
int watch;
|
||||
int hasSendFD;
|
||||
+ int willhangup;
|
||||
|
||||
virDomainObjPtr vm;
|
||||
|
||||
@@ -693,8 +694,10 @@ qemuMonitorIO(int watch, int fd, int eve
|
||||
if (events & VIR_EVENT_HANDLE_HANGUP) {
|
||||
hangup = true;
|
||||
if (!error) {
|
||||
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
- _("End of file from qemu monitor"));
|
||||
+ if (!mon->willhangup) {
|
||||
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
+ _("End of file from qemu monitor"));
|
||||
+ }
|
||||
eof = true;
|
||||
events &= ~VIR_EVENT_HANDLE_HANGUP;
|
||||
}
|
||||
@@ -733,7 +736,7 @@ qemuMonitorIO(int watch, int fd, int eve
|
||||
if (mon->lastError.code != VIR_ERR_OK) {
|
||||
/* Already have an error, so clear any new error */
|
||||
virResetLastError();
|
||||
- } else {
|
||||
+ } else if (!mon->willhangup) {
|
||||
virErrorPtr err = virGetLastError();
|
||||
if (!err)
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
@@ -1327,6 +1330,7 @@ qemuMonitorEmitShutdown(qemuMonitorPtr m
|
||||
{
|
||||
int ret = -1;
|
||||
VIR_DEBUG("mon=%p", mon);
|
||||
+ mon->willhangup = 1;
|
||||
|
||||
QEMU_MONITOR_CALLBACK(mon, ret, domainShutdown, mon->vm);
|
||||
return ret;
|
222
d12781b4-conf-iommu-cache-mode-attr.patch
Normal file
222
d12781b4-conf-iommu-cache-mode-attr.patch
Normal file
@ -0,0 +1,222 @@
|
||||
commit d12781b47eb0c9f3a498d88b632c327aa08aaf8a
|
||||
Author: Ján Tomko <jtomko@redhat.com>
|
||||
Date: Fri Mar 17 08:27:49 2017 +0100
|
||||
|
||||
conf: add caching_mode attribute to iommu device
|
||||
|
||||
Add a new attribute to control the caching mode.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1427005
|
||||
|
||||
Index: libvirt-3.3.0/docs/formatdomain.html.in
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/docs/formatdomain.html.in
|
||||
+++ libvirt-3.3.0/docs/formatdomain.html.in
|
||||
@@ -7427,6 +7427,15 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<span class="since">Since 3.4.0</span> (QEMU/KVM only)
|
||||
</p>
|
||||
</dd>
|
||||
+ <dt><code>caching_mode</code></dt>
|
||||
+ <dd>
|
||||
+ <p>
|
||||
+ The <code>caching_mode</code> attribute with possible values
|
||||
+ <code>on</code> and <code>off</code> can be used to
|
||||
+ turn on the VT-d caching mode (useful for assigned devices).
|
||||
+ <span class="since">Since 3.4.0</span> (QEMU/KVM only)
|
||||
+ </p>
|
||||
+ </dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
Index: libvirt-3.3.0/docs/schemas/domaincommon.rng
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/docs/schemas/domaincommon.rng
|
||||
+++ libvirt-3.3.0/docs/schemas/domaincommon.rng
|
||||
@@ -3954,6 +3954,11 @@
|
||||
<ref name="virOnOff"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
+ <optional>
|
||||
+ <attribute name="caching_mode">
|
||||
+ <ref name="virOnOff"/>
|
||||
+ </attribute>
|
||||
+ </optional>
|
||||
</element>
|
||||
</optional>
|
||||
</element>
|
||||
Index: libvirt-3.3.0/src/conf/domain_conf.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/conf/domain_conf.c
|
||||
+++ libvirt-3.3.0/src/conf/domain_conf.c
|
||||
@@ -14176,6 +14176,15 @@ virDomainIOMMUDefParseXML(xmlNodePtr nod
|
||||
iommu->intremap = val;
|
||||
}
|
||||
|
||||
+ VIR_FREE(tmp);
|
||||
+ if ((tmp = virXPathString("string(./driver/@caching_mode)", ctxt))) {
|
||||
+ if ((val = virTristateSwitchTypeFromString(tmp)) < 0) {
|
||||
+ virReportError(VIR_ERR_XML_ERROR, _("unknown caching_mode value: %s"), tmp);
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ iommu->caching_mode = val;
|
||||
+ }
|
||||
+
|
||||
ret = iommu;
|
||||
iommu = NULL;
|
||||
|
||||
@@ -24143,9 +24152,18 @@ virDomainIOMMUDefFormat(virBufferPtr buf
|
||||
|
||||
virBufferAdjustIndent(&childBuf, virBufferGetIndent(buf, false) + 2);
|
||||
|
||||
- if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
- virBufferAsprintf(&childBuf, "<driver intremap='%s'/>\n",
|
||||
- virTristateSwitchTypeToString(iommu->intremap));
|
||||
+ if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT ||
|
||||
+ iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAddLit(&childBuf, "<driver");
|
||||
+ if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&childBuf, " intremap='%s'",
|
||||
+ virTristateSwitchTypeToString(iommu->intremap));
|
||||
+ }
|
||||
+ if (iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT) {
|
||||
+ virBufferAsprintf(&childBuf, " caching_mode='%s'",
|
||||
+ virTristateSwitchTypeToString(iommu->caching_mode));
|
||||
+ }
|
||||
+ virBufferAddLit(&childBuf, "/>\n");
|
||||
}
|
||||
|
||||
virBufferAsprintf(buf, "<iommu model='%s'",
|
||||
Index: libvirt-3.3.0/src/conf/domain_conf.h
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/conf/domain_conf.h
|
||||
+++ libvirt-3.3.0/src/conf/domain_conf.h
|
||||
@@ -2210,6 +2210,7 @@ typedef enum {
|
||||
struct _virDomainIOMMUDef {
|
||||
virDomainIOMMUModel model;
|
||||
virTristateSwitch intremap;
|
||||
+ virTristateSwitch caching_mode;
|
||||
};
|
||||
/*
|
||||
* Guest VM main configuration
|
||||
Index: libvirt-3.3.0/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-caching-mode.xml
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-3.3.0/tests/qemuxml2argvdata/qemuxml2argv-intel-iommu-caching-mode.xml
|
||||
@@ -0,0 +1,50 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='q35'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <controller type='pci' index='0' model='pcie-root'/>
|
||||
+ <controller type='pci' index='1' model='dmi-to-pci-bridge'>
|
||||
+ <model name='i82801b11-bridge'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='2' model='pci-bridge'>
|
||||
+ <model name='pci-bridge'/>
|
||||
+ <target chassisNr='2'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='3' model='pcie-root-port'>
|
||||
+ <model name='ioh3420'/>
|
||||
+ <target chassis='3' port='0x10'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='sata' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='usb' index='0' model='ich9-ehci1'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x7'/>
|
||||
+ </controller>
|
||||
+ <interface type='user'>
|
||||
+ <mac address='52:54:00:ab:0c:5c'/>
|
||||
+ <model type='rtl8139'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ <iommu model='intel'>
|
||||
+ <driver intremap='on' caching_mode='on'/>
|
||||
+ </iommu>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
Index: libvirt-3.3.0/tests/qemuxml2xmloutdata/qemuxml2xmlout-intel-iommu-caching-mode.xml
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-3.3.0/tests/qemuxml2xmloutdata/qemuxml2xmlout-intel-iommu-caching-mode.xml
|
||||
@@ -0,0 +1,50 @@
|
||||
+<domain type='qemu'>
|
||||
+ <name>QEMUGuest1</name>
|
||||
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
+ <memory unit='KiB'>219100</memory>
|
||||
+ <currentMemory unit='KiB'>219100</currentMemory>
|
||||
+ <vcpu placement='static'>1</vcpu>
|
||||
+ <os>
|
||||
+ <type arch='x86_64' machine='q35'>hvm</type>
|
||||
+ <boot dev='hd'/>
|
||||
+ </os>
|
||||
+ <clock offset='utc'/>
|
||||
+ <on_poweroff>destroy</on_poweroff>
|
||||
+ <on_reboot>restart</on_reboot>
|
||||
+ <on_crash>destroy</on_crash>
|
||||
+ <devices>
|
||||
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||
+ <controller type='pci' index='0' model='pcie-root'/>
|
||||
+ <controller type='pci' index='1' model='dmi-to-pci-bridge'>
|
||||
+ <model name='i82801b11-bridge'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='2' model='pci-bridge'>
|
||||
+ <model name='pci-bridge'/>
|
||||
+ <target chassisNr='2'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='pci' index='3' model='pcie-root-port'>
|
||||
+ <model name='ioh3420'/>
|
||||
+ <target chassis='3' port='0x10'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
||||
+ </controller>
|
||||
+ <controller type='sata' index='0'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
|
||||
+ </controller>
|
||||
+ <controller type='usb' index='0' model='ich9-ehci1'>
|
||||
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x7'/>
|
||||
+ </controller>
|
||||
+ <interface type='user'>
|
||||
+ <mac address='52:54:00:ab:0c:5c'/>
|
||||
+ <model type='rtl8139'/>
|
||||
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
|
||||
+ </interface>
|
||||
+ <input type='mouse' bus='ps2'/>
|
||||
+ <input type='keyboard' bus='ps2'/>
|
||||
+ <memballoon model='none'/>
|
||||
+ <iommu model='intel'>
|
||||
+ <driver intremap='on' caching_mode='on'/>
|
||||
+ </iommu>
|
||||
+ </devices>
|
||||
+</domain>
|
||||
Index: libvirt-3.3.0/tests/qemuxml2xmltest.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tests/qemuxml2xmltest.c
|
||||
+++ libvirt-3.3.0/tests/qemuxml2xmltest.c
|
||||
@@ -1123,6 +1123,7 @@ mymain(void)
|
||||
QEMU_CAPS_MACHINE_OPT,
|
||||
QEMU_CAPS_MACHINE_IOMMU);
|
||||
DO_TEST("intel-iommu-ioapic", NONE);
|
||||
+ DO_TEST("intel-iommu-caching-mode", NONE);
|
||||
|
||||
DO_TEST("cpu-check-none", NONE);
|
||||
DO_TEST("cpu-check-partial", NONE);
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ad7af06eca75aee2e347618157fd392f1fef3f4eec275110a6cf1b61b5ca446f
|
||||
size 13985032
|
||||
oid sha256:29e00984174e33cf2183b478382c017de26860452ffee17b73871051264ebb1b
|
||||
size 14043384
|
||||
|
@ -1,11 +1,10 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQEzBAABCAAdFiEEjUiKECNx2wGgDcvNZNVaFdrgLsAFAlkDS5gACgkQZNVaFdrg
|
||||
LsDmOwf/eajUbk983Ka+iLGHgCul13X3u90UeOkCeqF1Ek95/driVMTOrY9sAHLP
|
||||
luBavdmsCUQS3y3mzv5h/pJMt9IQq7NSA01PxLExEJWbULIzULr7ac+SoNZe6l9v
|
||||
DPKmW9x/Zg0C5G4i0AFfq6exitjPKOA/p+kukHEHCQ5r1jkgSv09zxch9nEfa0PU
|
||||
VuJ/nQga/ePLpW2Kk8yvawY0JjCaU6FTdk5u+iHAY+U4Z/ryYqe+35cbDQHSkgbg
|
||||
jHgY0WZC22fxq+BIyBNO/bxawdIeDQcv66HYJodLZxM4HdvcpNuBF67zEO7vF0XF
|
||||
lKFyN94x5uBpqjT0JVbhkHbWENkp9w==
|
||||
=0rmS
|
||||
iQEcBAABAgAGBQJZDNY6AAoJEBVYiyZZa+pdBgEIAKfTozMEi/ZI2NTtpjoZXzDn
|
||||
gGcSEAZUJj3Chp9LkY/daAgL8RCNKU3c9Y/QgmTflJYEsAZsIRW9rJ3zsCHfPnC1
|
||||
rty3NulfCujrsLsZEqXHADjbmiTQ/H7WUoStIPBYLkERxrZ+qQ0egsA6qSqe8hy5
|
||||
6u/cXm8Yav9QvIfp8ikdKcJl+SUQT/yGXXzR7udr/ra8rCfqgvJqKkg+NDLNXB17
|
||||
kAz4guvjivfAOEel1RASoTyvnXjLzMtG4InfTz0+8cGomLDS1sWmCW+gW519juPm
|
||||
6TaHbQ1hDnLZvCy3h7TmeUJxLgvyV8Ul2VlZRCytXlJ//IcVlvgDq2+7SpBvjgA=
|
||||
=fQOM
|
||||
-----END PGP SIGNATURE-----
|
||||
|
@ -1,3 +1,34 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon May 15 21:21:56 UTC 2017 - jfehlig@suse.com
|
||||
|
||||
- qemu: add support for 288 VCPUS
|
||||
aeda1b8c-qemu-no-error-shutdown.patch,
|
||||
8023b21a-conf-ioapic.patch,
|
||||
6b5c6314-qemu-irqchip.patch,
|
||||
2020e2c6-conf-intremap.patch,
|
||||
04028a9d-qemu-intremap.patch,
|
||||
d12781b4-conf-iommu-cache-mode-attr.patch,
|
||||
a5691448-qemu-iommu-cache-mode.patch,
|
||||
3a276c65-conf-iommu-def-stability-check.patch,
|
||||
935d927a-conf-iommu-ABI-stability-check.patch
|
||||
FATE#321335
|
||||
- revert commit 2841e675: qemu: propagate bridge MTU into qemu
|
||||
"host_mtu"
|
||||
revert-2841e675-mtu.patch
|
||||
bsc#1037774
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon May 8 16:44:59 UTC 2017 - jfehlig@suse.com
|
||||
|
||||
- Update to libvirt 3.3.0
|
||||
- Many incremental improvements and bug fixes, see
|
||||
http://libvirt.org/news.html
|
||||
- Bug fixes:
|
||||
bsc#978121, bsc#1017017, bsc#1032863, bsc#1033117, bsc#1034024,
|
||||
bsc#1034146, bsc#1035995
|
||||
- libxl: updated libxl-def-usbctrl.patch
|
||||
bsc#1031056
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 28 03:30:51 UTC 2017 - jfehlig@suse.com
|
||||
|
||||
|
20
libvirt.spec
20
libvirt.spec
@ -317,6 +317,15 @@ Source4: libvirtd-relocation-server.fw
|
||||
Source99: baselibs.conf
|
||||
Source100: %{name}-rpmlintrc
|
||||
# Upstream patches
|
||||
Patch0: aeda1b8c-qemu-no-error-shutdown.patch
|
||||
Patch1: 8023b21a-conf-ioapic.patch
|
||||
Patch2: 6b5c6314-qemu-irqchip.patch
|
||||
Patch3: 2020e2c6-conf-intremap.patch
|
||||
Patch4: 04028a9d-qemu-intremap.patch
|
||||
Patch5: d12781b4-conf-iommu-cache-mode-attr.patch
|
||||
Patch6: a5691448-qemu-iommu-cache-mode.patch
|
||||
Patch7: 3a276c65-conf-iommu-def-stability-check.patch
|
||||
Patch8: 935d927a-conf-iommu-ABI-stability-check.patch
|
||||
# Patches pending upstream review
|
||||
Patch100: libxl-dom-reset.patch
|
||||
Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch
|
||||
@ -329,6 +338,7 @@ Patch153: ppc64le-canonical-name.patch
|
||||
Patch154: libxl-set-migration-constraints.patch
|
||||
Patch155: libxl-set-cach-mode.patch
|
||||
Patch156: apparmor-fixes.patch
|
||||
Patch157: revert-2841e675-mtu.patch
|
||||
# Our patches
|
||||
Patch200: libvirtd-defaults.patch
|
||||
Patch201: libvirtd-init-script.patch
|
||||
@ -886,6 +896,15 @@ libvirt plugin for NSS for translating domain names into IP addresses.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch100 -p1
|
||||
%patch101 -p1
|
||||
%patch102 -p1
|
||||
@ -896,6 +915,7 @@ libvirt plugin for NSS for translating domain names into IP addresses.
|
||||
%patch154 -p1
|
||||
%patch155 -p1
|
||||
%patch156 -p1
|
||||
%patch157 -p1
|
||||
%patch200 -p1
|
||||
%patch201 -p1
|
||||
%patch202 -p1
|
||||
|
@ -1,29 +1,33 @@
|
||||
commit b020800a3930aa2bd40855548c442846716d88f1
|
||||
Author: Jim Fehlig <jfehlig@suse.com>
|
||||
Date: Tue Mar 28 17:34:16 2017 -0600
|
||||
From c55c2ba0a26b0074e73f281810ad3e4a70bc4910 Mon Sep 17 00:00:00 2001
|
||||
From: Jim Fehlig <jfehlig@suse.com>
|
||||
Date: Tue, 28 Mar 2017 17:34:16 -0600
|
||||
Subject: [PATCH] libxl: add default controllers for USB devices
|
||||
|
||||
libxl: add default controllers for USB devices
|
||||
|
||||
Attempting to start a domain with USB hostdevs but no USB controllers
|
||||
fails with the rather cryptic error
|
||||
|
||||
libxl: error: libxl_qmp.c:287:qmp_handle_error_response: received an
|
||||
error message from QMP server: Bus 'xenusb-0.0' not found
|
||||
|
||||
This can be fixed by creating default USB controllers. When no USB
|
||||
controllers are defined, create the number of 8 port controllers
|
||||
necessary to accommodate the number of defined USB devices.
|
||||
|
||||
Note that USB controllers are already created as needed in the
|
||||
domainAttachDevice code path. E.g. a USB controller will be created,
|
||||
if necessary, when attaching a USB device with
|
||||
'virsh attach-device dom usbdev.xml'.
|
||||
Attempting to start a domain with USB hostdevs but no USB controllers
|
||||
fails with the rather cryptic error
|
||||
|
||||
libxl: error: libxl_qmp.c:287:qmp_handle_error_response: received an
|
||||
error message from QMP server: Bus 'xenusb-0.0' not found
|
||||
|
||||
This can be fixed by creating default USB controllers. When no USB
|
||||
controllers are defined, create the number of 8 port controllers
|
||||
necessary to accommodate the number of defined USB devices.
|
||||
|
||||
Note that USB controllers are already created as needed in the
|
||||
domainAttachDevice code path. E.g. a USB controller will be created,
|
||||
if necessary, when attaching a USB device with
|
||||
'virsh attach-device dom usbdev.xml'.
|
||||
|
||||
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||
---
|
||||
src/libxl/libxl_conf.c | 82 +++++++++++++++++++++++++++++++++++++++++++-------
|
||||
1 file changed, 71 insertions(+), 11 deletions(-)
|
||||
|
||||
Index: libvirt-3.3.0/src/libxl/libxl_conf.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/libxl/libxl_conf.c
|
||||
+++ libvirt-3.3.0/src/libxl/libxl_conf.c
|
||||
@@ -1822,34 +1822,92 @@ libxlMakeUSBController(virDomainControll
|
||||
@@ -1822,34 +1822,94 @@ libxlMakeUSBController(virDomainControll
|
||||
}
|
||||
|
||||
static int
|
||||
@ -64,7 +68,9 @@ Index: libvirt-3.3.0/src/libxl/libxl_conf.c
|
||||
+ if (libxlMakeUSBController(l_controller, &x_controllers[i]) < 0)
|
||||
+ goto error;
|
||||
+
|
||||
+ virDomainControllerInsertPreAlloced(def, l_controller);
|
||||
+ if (virDomainControllerInsert(def, l_controller) < 0)
|
||||
+ goto error;
|
||||
+
|
||||
+ l_controller = NULL;
|
||||
+ }
|
||||
+
|
||||
|
@ -378,7 +378,7 @@ Index: libvirt-3.3.0/tools/virsh.pod
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/tools/virsh.pod
|
||||
+++ libvirt-3.3.0/tools/virsh.pod
|
||||
@@ -1752,6 +1752,14 @@ compression. I<--comp-mt-threads> and I<
|
||||
@@ -1753,6 +1753,14 @@ compression. I<--comp-mt-threads> and I<
|
||||
of compress threads on source and the number of decompress threads on target
|
||||
respectively. I<--comp-xbzrle-cache> sets size of page cache in bytes.
|
||||
|
||||
|
181
revert-2841e675-mtu.patch
Normal file
181
revert-2841e675-mtu.patch
Normal file
@ -0,0 +1,181 @@
|
||||
From 306b412857870d1952850b511011909066089af7 Mon Sep 17 00:00:00 2001
|
||||
From: Jim Fehlig <jfehlig@suse.com>
|
||||
Date: Mon, 15 May 2017 09:47:39 -0600
|
||||
Subject: [PATCH] Revert "qemu: propagate bridge MTU into qemu "host_mtu"
|
||||
option"
|
||||
|
||||
This reverts commit 2841e6756d5807a4119e004bc5fb8e7d70806458.
|
||||
|
||||
The change causes a guest ABI change. See following bugs for details
|
||||
|
||||
https://bugzilla.suse.com/show_bug.cgi?id=1037774
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1449346
|
||||
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
||||
---
|
||||
src/qemu/qemu_command.c | 32 ++++++++++----------------------
|
||||
src/qemu/qemu_command.h | 3 +--
|
||||
src/qemu/qemu_hotplug.c | 5 ++---
|
||||
src/qemu/qemu_interface.c | 5 ++---
|
||||
src/qemu/qemu_interface.h | 3 +--
|
||||
5 files changed, 16 insertions(+), 32 deletions(-)
|
||||
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_command.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_command.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_command.c
|
||||
@@ -3633,8 +3633,7 @@ qemuBuildNicDevStr(virDomainDefPtr def,
|
||||
int vlan,
|
||||
unsigned int bootindex,
|
||||
size_t vhostfdSize,
|
||||
- virQEMUCapsPtr qemuCaps,
|
||||
- unsigned int mtu)
|
||||
+ virQEMUCapsPtr qemuCaps)
|
||||
{
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
const char *nic = net->model;
|
||||
@@ -3758,23 +3757,13 @@ qemuBuildNicDevStr(virDomainDefPtr def,
|
||||
virBufferAsprintf(&buf, ",rx_queue_size=%u", net->driver.virtio.rx_queue_size);
|
||||
}
|
||||
|
||||
- if (usingVirtio && mtu) {
|
||||
- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_NET_HOST_MTU)) {
|
||||
-
|
||||
- virBufferAsprintf(&buf, ",host_mtu=%u", mtu);
|
||||
-
|
||||
- } else {
|
||||
- /* log an error if mtu was requested specifically for this
|
||||
- * interface, otherwise, if it's just what was reported by
|
||||
- * the attached network, ignore it.
|
||||
- */
|
||||
- if (net->mtu) {
|
||||
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
- _("setting MTU is not supported with "
|
||||
- "this QEMU binary"));
|
||||
- goto error;
|
||||
- }
|
||||
+ if (usingVirtio && net->mtu) {
|
||||
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_NET_HOST_MTU)) {
|
||||
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
+ _("setting MTU is not supported with this QEMU binary"));
|
||||
+ goto error;
|
||||
}
|
||||
+ virBufferAsprintf(&buf, ",host_mtu=%u", net->mtu);
|
||||
}
|
||||
|
||||
if (vlan == -1)
|
||||
@@ -8320,7 +8309,7 @@ qemuBuildVhostuserCommandLine(virQEMUDri
|
||||
VIR_FREE(netdev);
|
||||
|
||||
if (!(nic = qemuBuildNicDevStr(def, net, -1, bootindex,
|
||||
- queues, qemuCaps, net->mtu))) {
|
||||
+ queues, qemuCaps))) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
"%s", _("Error generating NIC -device string"));
|
||||
goto error;
|
||||
@@ -8366,7 +8355,6 @@ qemuBuildInterfaceCommandLine(virQEMUDri
|
||||
virDomainNetType actualType = virDomainNetGetActualType(net);
|
||||
virNetDevBandwidthPtr actualBandwidth;
|
||||
size_t i;
|
||||
- unsigned int mtu = net->mtu;
|
||||
|
||||
|
||||
if (!bootindex)
|
||||
@@ -8421,7 +8409,7 @@ qemuBuildInterfaceCommandLine(virQEMUDri
|
||||
memset(tapfd, -1, tapfdSize * sizeof(tapfd[0]));
|
||||
|
||||
if (qemuInterfaceBridgeConnect(def, driver, net,
|
||||
- tapfd, &tapfdSize, &mtu) < 0)
|
||||
+ tapfd, &tapfdSize) < 0)
|
||||
goto cleanup;
|
||||
break;
|
||||
|
||||
@@ -8601,7 +8589,7 @@ qemuBuildInterfaceCommandLine(virQEMUDri
|
||||
}
|
||||
if (qemuDomainSupportsNicdev(def, net)) {
|
||||
if (!(nic = qemuBuildNicDevStr(def, net, vlan, bootindex,
|
||||
- vhostfdSize, qemuCaps, mtu)))
|
||||
+ vhostfdSize, qemuCaps)))
|
||||
goto cleanup;
|
||||
virCommandAddArgList(cmd, "-device", nic, NULL);
|
||||
} else {
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_command.h
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_command.h
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_command.h
|
||||
@@ -101,8 +101,7 @@ char *qemuBuildNicDevStr(virDomainDefPtr
|
||||
int vlan,
|
||||
unsigned int bootindex,
|
||||
size_t vhostfdSize,
|
||||
- virQEMUCapsPtr qemuCaps,
|
||||
- unsigned int mtu);
|
||||
+ virQEMUCapsPtr qemuCaps);
|
||||
|
||||
char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk);
|
||||
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_hotplug.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_hotplug.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_hotplug.c
|
||||
@@ -968,7 +968,6 @@ qemuDomainAttachNetDevice(virQEMUDriverP
|
||||
bool charDevPlugged = false;
|
||||
bool netdevPlugged = false;
|
||||
bool hostPlugged = false;
|
||||
- unsigned int mtu = net->mtu;
|
||||
|
||||
/* preallocate new slot for device */
|
||||
if (VIR_REALLOC_N(vm->def->nets, vm->def->nnets + 1) < 0)
|
||||
@@ -1025,7 +1024,7 @@ qemuDomainAttachNetDevice(virQEMUDriverP
|
||||
goto cleanup;
|
||||
memset(vhostfd, -1, sizeof(*vhostfd) * vhostfdSize);
|
||||
if (qemuInterfaceBridgeConnect(vm->def, driver, net,
|
||||
- tapfd, &tapfdSize, &mtu) < 0)
|
||||
+ tapfd, &tapfdSize) < 0)
|
||||
goto cleanup;
|
||||
iface_connected = true;
|
||||
if (qemuInterfaceOpenVhostNet(vm->def, net, priv->qemuCaps,
|
||||
@@ -1239,7 +1238,7 @@ qemuDomainAttachNetDevice(virQEMUDriverP
|
||||
VIR_FORCE_CLOSE(vhostfd[i]);
|
||||
|
||||
if (!(nicstr = qemuBuildNicDevStr(vm->def, net, vlan, 0,
|
||||
- queueSize, priv->qemuCaps, mtu)))
|
||||
+ queueSize, priv->qemuCaps)))
|
||||
goto try_remove;
|
||||
|
||||
qemuDomainObjEnterMonitor(driver, vm);
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_interface.c
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_interface.c
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_interface.c
|
||||
@@ -503,8 +503,7 @@ qemuInterfaceBridgeConnect(virDomainDefP
|
||||
virQEMUDriverPtr driver,
|
||||
virDomainNetDefPtr net,
|
||||
int *tapfd,
|
||||
- size_t *tapfdSize,
|
||||
- unsigned int *mtu)
|
||||
+ size_t *tapfdSize)
|
||||
{
|
||||
const char *brname;
|
||||
int ret = -1;
|
||||
@@ -545,7 +544,7 @@ qemuInterfaceBridgeConnect(virDomainDefP
|
||||
def->uuid, tunpath, tapfd, *tapfdSize,
|
||||
virDomainNetGetActualVirtPortProfile(net),
|
||||
virDomainNetGetActualVlan(net),
|
||||
- net->coalesce, net->mtu, mtu,
|
||||
+ NULL, 0, NULL,
|
||||
tap_create_flags) < 0) {
|
||||
virDomainAuditNetDevice(def, net, tunpath, false);
|
||||
goto cleanup;
|
||||
Index: libvirt-3.3.0/src/qemu/qemu_interface.h
|
||||
===================================================================
|
||||
--- libvirt-3.3.0.orig/src/qemu/qemu_interface.h
|
||||
+++ libvirt-3.3.0/src/qemu/qemu_interface.h
|
||||
@@ -51,8 +51,7 @@ int qemuInterfaceBridgeConnect(virDomain
|
||||
virQEMUDriverPtr driver,
|
||||
virDomainNetDefPtr net,
|
||||
int *tapfd,
|
||||
- size_t *tapfdSize,
|
||||
- unsigned int *mtu)
|
||||
+ size_t *tapfdSize)
|
||||
ATTRIBUTE_NONNULL(2);
|
||||
|
||||
int qemuInterfaceOpenVhostNet(virDomainDefPtr def,
|
Loading…
Reference in New Issue
Block a user