From 2daa9ba65acb1da5616a7f69f336cccf1ff2b28d Mon Sep 17 00:00:00 2001 From: eabdullin Date: Tue, 30 Apr 2024 15:56:53 +0300 Subject: [PATCH] - cpu: x86: Add support for adding features to existing CPU models - qemu: domain: Check arch in qemuDomainMakeCPUMigratable - conf: cpu: Introduce virCPUDefListFeatures - qemu: domain: Drop added features from migratable CPU - Add vmx-* features to Broadwell* - Add vmx-* features to Cascadelake* - Add vmx-* features to Conroe - Add vmx-* features to Cooperlake - Add vmx-* features to core2duo - Add vmx-* features to Haswell* - Add vmx-* features to Icelake* - Add vmx-* features to IvyBridge* - Add vmx-* features to kvm* - Add vmx-* features to Nehalem* - Add vmx-* features to Penryn - Add vmx-* features to SandyBridge* - Add vmx-* features to SapphireRapids - Add vmx-* features to Skylake* - Add vmx-* features to Snowridge - Add vmx-* features to Westmere* - qemu: virtiofs: do not crash if cgroups are missing - qemu: virtiofs: set correct label when creating the socket - qemu: virtiofs: error out if getting the group or user name fails --- ...-cpu-Introduce-virCPUDefListFeatures.patch | 78 +++ ...ding-features-to-existing-CPU-models.patch | 212 +++++++ .../cpu_map-Add-cpu-model-EPYC-Genoa.patch | 201 ------- ...ibvirt-Add-vmx-features-to-Broadwell.patch | 358 ++++++++++++ ...virt-Add-vmx-features-to-Cascadelake.patch | 184 +++++++ .../libvirt-Add-vmx-features-to-Conroe.patch | 47 ++ ...bvirt-Add-vmx-features-to-Cooperlake.patch | 98 ++++ .../libvirt-Add-vmx-features-to-Haswell.patch | 350 ++++++++++++ .../libvirt-Add-vmx-features-to-Icelake.patch | 183 ++++++ ...ibvirt-Add-vmx-features-to-IvyBridge.patch | 168 ++++++ .../libvirt-Add-vmx-features-to-Nehalem.patch | 154 ++++++ .../libvirt-Add-vmx-features-to-Penryn.patch | 50 ++ ...virt-Add-vmx-features-to-SandyBridge.patch | 160 ++++++ ...t-Add-vmx-features-to-SapphireRapids.patch | 99 ++++ .../libvirt-Add-vmx-features-to-Skylake.patch | 520 ++++++++++++++++++ ...ibvirt-Add-vmx-features-to-Snowridge.patch | 98 ++++ ...libvirt-Add-vmx-features-to-Westmere.patch | 158 ++++++ ...libvirt-Add-vmx-features-to-core2duo.patch | 76 +++ SOURCES/libvirt-Add-vmx-features-to-kvm.patch | 70 +++ ...-description-of-virsh-nodedev-detach.patch | 53 -- ...ing-other-drivers-with-virNodeDevice.patch | 178 ------ ...tiline-log-messages-into-single-line.patch | 38 -- ...libvirt-regression-input-default-bus.patch | 31 -- ...b-driver-name-to-virPCIDevice-object.patch | 99 ---- ...il-honor-stubDriverName-when-probing.patch | 40 -- ...sting-binding-to-VFIO-variant-driver.patch | 250 --------- ...n-function-that-binds-to-stub-driver.patch | 107 ---- ...ame-virPCIDeviceGetDriverPathAndName.patch | 132 ----- ...riverType-instead-of-just-stubDriver.patch | 251 --------- ...-arch-in-qemuDomainMakeCPUMigratable.patch | 77 +++ ...p-added-features-from-migratable-CPU.patch | 146 +++++ ...-do-not-crash-if-cgroups-are-missing.patch | 34 ++ ...-getting-the-group-or-user-namefails.patch | 29 + ...rrect-label-when-creating-the-socket.patch | 31 ++ ...ed-characters-in-vpdFieldValueFormat.patch | 31 -- ...iously-mishandled-PCI-VPD-characters.patch | 80 --- ...or-virPCIVPDResourceIsValidTextValue.patch | 54 -- ...at-Properly-escape-system-originated.patch | 86 --- ...matCustom-Escape-unsanitized-strings.patch | 72 --- ...djust-comment-to-reflect-actual-code.patch | 46 -- SPECS/libvirt.spec | 161 +++--- 41 files changed, 3459 insertions(+), 1831 deletions(-) create mode 100644 SOURCES/conf-cpu-Introduce-virCPUDefListFeatures.patch create mode 100644 SOURCES/cpu-x86-Add-support-for-adding-features-to-existing-CPU-models.patch delete mode 100644 SOURCES/cpu_map-Add-cpu-model-EPYC-Genoa.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Broadwell.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Cascadelake.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Conroe.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Cooperlake.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Haswell.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Icelake.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-IvyBridge.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Nehalem.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Penryn.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-SandyBridge.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-SapphireRapids.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Skylake.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Snowridge.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-Westmere.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-core2duo.patch create mode 100644 SOURCES/libvirt-Add-vmx-features-to-kvm.patch delete mode 100644 SOURCES/libvirt-docs-update-description-of-virsh-nodedev-detach.patch delete mode 100644 SOURCES/libvirt-node_device-support-binding-other-drivers-with-virNodeDevice.patch delete mode 100644 SOURCES/libvirt-qemu-turn-two-multiline-log-messages-into-single-line.patch delete mode 100644 SOURCES/libvirt-regression-input-default-bus.patch delete mode 100644 SOURCES/libvirt-util-add-stub-driver-name-to-virPCIDevice-object.patch delete mode 100644 SOURCES/libvirt-util-honor-stubDriverName-when-probing.patch delete mode 100644 SOURCES/libvirt-util-permit-existing-binding-to-VFIO-variant-driver.patch delete mode 100644 SOURCES/libvirt-util-probe-stub-driver-from-within-function-that-binds-to-stub-driver.patch delete mode 100644 SOURCES/libvirt-util-rename-virPCIDeviceGetDriverPathAndName.patch delete mode 100644 SOURCES/libvirt-util-use-stubDriverType-instead-of-just-stubDriver.patch create mode 100644 SOURCES/qemu-domain-Check-arch-in-qemuDomainMakeCPUMigratable.patch create mode 100644 SOURCES/qemu-domain-Drop-added-features-from-migratable-CPU.patch create mode 100644 SOURCES/qemu-virtiofs-do-not-crash-if-cgroups-are-missing.patch create mode 100644 SOURCES/qemu-virtiofs-error-out-if-getting-the-group-or-user-namefails.patch create mode 100644 SOURCES/qemu-virtiofs-set-correct-label-when-creating-the-socket.patch delete mode 100644 SOURCES/schema-nodedev-Adjust-allowed-characters-in-vpdFieldValueFormat.patch delete mode 100644 SOURCES/tests-Test-the-previously-mishandled-PCI-VPD-characters.patch delete mode 100644 SOURCES/util-pcivpd-Refactor-virPCIVPDResourceIsValidTextValue.patch delete mode 100644 SOURCES/virNodeDeviceCapVPDFormat-Properly-escape-system-originated.patch delete mode 100644 SOURCES/virNodeDeviceCapVPDFormatCustom-Escape-unsanitized-strings.patch delete mode 100644 SOURCES/virPCIVPDResourceIsValidTextValue-Adjust-comment-to-reflect-actual-code.patch diff --git a/SOURCES/conf-cpu-Introduce-virCPUDefListFeatures.patch b/SOURCES/conf-cpu-Introduce-virCPUDefListFeatures.patch new file mode 100644 index 0000000..fdc622e --- /dev/null +++ b/SOURCES/conf-cpu-Introduce-virCPUDefListFeatures.patch @@ -0,0 +1,78 @@ +From 577c4ca414b26c8586f2586978e55c948bec0a32 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Mon, 11 Mar 2024 15:37:32 +0100 +Subject: [PATCH] conf: cpu: Introduce virCPUDefListFeatures + +The function returns a list of explicitly mentioned features in the CPU +definition. + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +Reviewed-by: Peter Krempa +--- + src/conf/cpu_conf.c | 24 ++++++++++++++++++++++++ + src/conf/cpu_conf.h | 3 +++ + src/libvirt_private.syms | 1 + + 3 files changed, 28 insertions(+) + +diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c +index 6e6e1b9a897..4dca7e57ec7 100644 +--- a/src/conf/cpu_conf.c ++++ b/src/conf/cpu_conf.c +@@ -982,6 +982,30 @@ virCPUDefFindFeature(const virCPUDef *def, + } + + ++/** ++ * virCPUDefListExplicitFeatures: ++ * @def: CPU definition ++ * ++ * Provides a list of feature names explicitly mentioned in the CPU definition ++ * regardless of the policy. The caller is responsible for freeing the list. ++ * ++ * Returns a NULL-terminated list of feature names. ++ */ ++char ** ++virCPUDefListExplicitFeatures(const virCPUDef *def) ++{ ++ char **list; ++ size_t i; ++ ++ list = g_new0(char *, def->nfeatures + 1); ++ ++ for (i = 0; i < def->nfeatures; i++) ++ list[i] = g_strdup(def->features[i].name); ++ ++ return list; ++} ++ ++ + int + virCPUDefFilterFeatures(virCPUDef *cpu, + virCPUDefFeatureFilter filter, +diff --git a/src/conf/cpu_conf.h b/src/conf/cpu_conf.h +index 2694022fed1..b10c23ee828 100644 +--- a/src/conf/cpu_conf.h ++++ b/src/conf/cpu_conf.h +@@ -270,6 +270,9 @@ virCPUDefCheckFeatures(virCPUDef *cpu, + void *opaque, + char ***features); + ++char ** ++virCPUDefListExplicitFeatures(const virCPUDef *def); ++ + virCPUDef ** + virCPUDefListParse(const char **xmlCPUs, + unsigned int ncpus, +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 98a925933ef..6b6bcc368ac 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -111,6 +111,7 @@ virCPUDefFree; + virCPUDefFreeFeatures; + virCPUDefFreeModel; + virCPUDefIsEqual; ++virCPUDefListExplicitFeatures; + virCPUDefListFree; + virCPUDefListParse; + virCPUDefNew; diff --git a/SOURCES/cpu-x86-Add-support-for-adding-features-to-existing-CPU-models.patch b/SOURCES/cpu-x86-Add-support-for-adding-features-to-existing-CPU-models.patch new file mode 100644 index 0000000..7828532 --- /dev/null +++ b/SOURCES/cpu-x86-Add-support-for-adding-features-to-existing-CPU-models.patch @@ -0,0 +1,212 @@ +From 5fbfa5ab8a3bf914d2deacd0d281b16aafd593b5 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:50:48 +0100 +Subject: [PATCH] cpu: x86: Add support for adding features to existing CPU + models + +This is not a good idea in general, but we can (and have to) do it in +specific cases when a feature has always been part of a CPU model in +hypervisor's definition, but we ignored it and did not include the +feature in our definition. + +Blindly adding the features to the CPU map and not adding them to +existing CPU models breaks migration between old and new libvirt in both +directions. New libvirt would complain the features got unexpectedly +enabled (as they were not mentioned in the incoming domain XML) even +though they were also enabled on the source and the old libvirt just +didn't know about them. On the other hand, old libvirt would refuse to +accept incoming migration of a domain started by new libvirt because the +domain XML would contain CPU features unknown to the old libvirt. + +This is exactly what happened when several vmx-* features were added a +few releases back. Migration between libvirt releases before and after +the addition is now broken. + +This patch adds support for added these features to existing CPU models +by marking them with added='yes'. The features will not be considered +part of the CPU model and will be described explicitly via additional + elements, but the compatibility check will not complain if +they are enabled by the hypervisor even though they were not explicitly +mentioned in the CPU definition and incoming migration from old libvirt +will succeed. + +To fix outgoing migration to old libvirt, we also need to drop all those +features from domain XML unless they were explicitly requested by the +user. This will be handled by a later patch. + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +Reviewed-by: Peter Krempa +--- + src/cpu/cpu_x86.c | 74 ++++++++++++++++++++++++++++++++++++++-- + src/cpu/cpu_x86.h | 3 ++ + src/libvirt_private.syms | 1 + + 3 files changed, 75 insertions(+), 3 deletions(-) + +diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c +index e8409ce616f..0fad761809c 100644 +--- a/src/cpu/cpu_x86.c ++++ b/src/cpu/cpu_x86.c +@@ -148,6 +148,17 @@ struct _virCPUx86Model { + virCPUx86Signatures *signatures; + virCPUx86Data data; + GStrv removedFeatures; ++ ++ /* Features added to the CPU model after its original version was released. ++ * Such features are not really considered part of the model, but the ++ * compatibility check will not complain if they are enabled by the ++ * hypervisor even though they were not explicitly mentioned in the CPU ++ * definition. This should only be used for features which were always ++ * included in the CPU model by the hypervisor, but libvirt didn't support ++ * them when introducing the CPU model. In other words, they were enabled, ++ * but we ignored them. ++ */ ++ GStrv addedFeatures; + }; + + typedef struct _virCPUx86Map virCPUx86Map; +@@ -1276,6 +1287,7 @@ x86ModelFree(virCPUx86Model *model) + virCPUx86SignaturesFree(model->signatures); + virCPUx86DataClear(&model->data); + g_strfreev(model->removedFeatures); ++ g_strfreev(model->addedFeatures); + g_free(model); + } + G_DEFINE_AUTOPTR_CLEANUP_FUNC(virCPUx86Model, x86ModelFree); +@@ -1291,6 +1303,7 @@ x86ModelCopy(virCPUx86Model *model) + copy->signatures = virCPUx86SignaturesCopy(model->signatures); + x86DataCopy(©->data, &model->data); + copy->removedFeatures = g_strdupv(model->removedFeatures); ++ copy->addedFeatures = g_strdupv(model->addedFeatures); + copy->vendor = model->vendor; + + return g_steal_pointer(©); +@@ -1596,17 +1609,20 @@ x86ModelParseFeatures(virCPUx86Model *model, + g_autofree xmlNodePtr *nodes = NULL; + size_t i; + size_t nremoved = 0; ++ size_t nadded = 0; + int n; + + if ((n = virXPathNodeSet("./feature", ctxt, &nodes)) <= 0) + return n; + + model->removedFeatures = g_new0(char *, n + 1); ++ model->addedFeatures = g_new0(char *, n + 1); + + for (i = 0; i < n; i++) { + g_autofree char *ftname = NULL; + virCPUx86Feature *feature; + virTristateBool rem; ++ virTristateBool added; + + if (!(ftname = virXMLPropString(nodes[i], "name"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, +@@ -1632,10 +1648,21 @@ x86ModelParseFeatures(virCPUx86Model *model, + continue; + } + ++ if (virXMLPropTristateBool(nodes[i], "added", ++ VIR_XML_PROP_NONE, ++ &added) < 0) ++ return -1; ++ ++ if (added == VIR_TRISTATE_BOOL_YES) { ++ model->addedFeatures[nadded++] = g_strdup(ftname); ++ continue; ++ } ++ + x86DataAdd(&model->data, &feature->data); + } + + model->removedFeatures = g_renew(char *, model->removedFeatures, nremoved + 1); ++ model->addedFeatures = g_renew(char *, model->addedFeatures, nadded + 1); + + return 0; + } +@@ -3022,11 +3049,18 @@ virCPUx86UpdateLive(virCPUDef *cpu, + if (expected == VIR_CPU_FEATURE_DISABLE && + x86DataIsSubset(&enabled, &feature->data)) { + VIR_DEBUG("Feature '%s' enabled by the hypervisor", feature->name); +- if (cpu->check == VIR_CPU_CHECK_FULL) ++ ++ /* Extra features enabled by the hypervisor are ignored by ++ * check='full' in case they were added to the model later for ++ * backward compatibility with the older definition of the model. ++ */ ++ if (cpu->check == VIR_CPU_CHECK_FULL && ++ !g_strv_contains((const char **) model->addedFeatures, feature->name)) { + virBufferAsprintf(&bufAdded, "%s,", feature->name); +- else if (virCPUDefUpdateFeature(cpu, feature->name, +- VIR_CPU_FEATURE_REQUIRE) < 0) ++ } else if (virCPUDefUpdateFeature(cpu, feature->name, ++ VIR_CPU_FEATURE_REQUIRE) < 0) { + return -1; ++ } + } + + if (x86DataIsSubset(&disabled, &feature->data) || +@@ -3491,6 +3525,40 @@ virCPUx86FeatureFilterDropMSR(const char *name, + } + + ++/** ++ * virCPUx86GetAddedFeatures: ++ * @modelName: CPU model ++ * @features: where to store a pointer to the list of added features ++ * ++ * Gets a list of features added to a specified CPU model after its original ++ * version was already released. The @features will be set to NULL if the list ++ * is empty or it will point to internal structures and thus it must not be ++ * freed or modified by the caller. The pointer is valid for the whole lifetime ++ * of the process. ++ * ++ * Returns 0 on success, -1 otherwise. ++ */ ++int ++virCPUx86GetAddedFeatures(const char *modelName, ++ const char * const **features) ++{ ++ virCPUx86Map *map; ++ virCPUx86Model *model; ++ ++ if (!(map = virCPUx86GetMap())) ++ return -1; ++ ++ if (!(model = x86ModelFind(map, modelName))) { ++ virReportError(VIR_ERR_INVALID_ARG, ++ _("unknown CPU model %1$s"), modelName); ++ return -1; ++ } ++ ++ *features = (const char **) model->addedFeatures; ++ return 0; ++} ++ ++ + struct cpuArchDriver cpuDriverX86 = { + .name = "x86", + .arch = archs, +diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h +index 2721fc90970..2cd965fea4c 100644 +--- a/src/cpu/cpu_x86.h ++++ b/src/cpu/cpu_x86.h +@@ -48,3 +48,6 @@ bool virCPUx86FeatureFilterSelectMSR(const char *name, + bool virCPUx86FeatureFilterDropMSR(const char *name, + virCPUFeaturePolicy policy, + void *opaque); ++ ++int virCPUx86GetAddedFeatures(const char *modelName, ++ const char * const **features); +diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms +index 887659784a6..98a925933ef 100644 +--- a/src/libvirt_private.syms ++++ b/src/libvirt_private.syms +@@ -1543,6 +1543,7 @@ virCPUx86DataSetSignature; + virCPUx86DataSetVendor; + virCPUx86FeatureFilterDropMSR; + virCPUx86FeatureFilterSelectMSR; ++virCPUx86GetAddedFeatures; + + # datatypes.h + virConnectClass; diff --git a/SOURCES/cpu_map-Add-cpu-model-EPYC-Genoa.patch b/SOURCES/cpu_map-Add-cpu-model-EPYC-Genoa.patch deleted file mode 100644 index c3a89ab..0000000 --- a/SOURCES/cpu_map-Add-cpu-model-EPYC-Genoa.patch +++ /dev/null @@ -1,201 +0,0 @@ -From bfe53e9145cd5996a791c5caff0686572b850f82 Mon Sep 17 00:00:00 2001 -From: Tim Wiederhake -Date: Wed, 6 Sep 2023 13:13:34 +0200 -Subject: [PATCH] cpu_map: Add cpu model EPYC Genoa - -This was added in qemu commit 166b174188. -No additional features had to be added to libvirt. - -Signed-off-by: Tim Wiederhake -Reviewed-by: Martin Kletzander ---- - src/cpu_map/index.xml | 1 + - src/cpu_map/meson.build | 1 + - src/cpu_map/x86_EPYC-Genoa.xml | 115 ++++++++++++++++++ - .../domaincapsdata/qemu_8.1.0-q35.x86_64.xml | 1 + - .../domaincapsdata/qemu_8.1.0-tcg.x86_64.xml | 1 + - tests/domaincapsdata/qemu_8.1.0.x86_64.xml | 1 + - 6 files changed, 120 insertions(+) - create mode 100644 src/cpu_map/x86_EPYC-Genoa.xml - -diff --git a/src/cpu_map/index.xml b/src/cpu_map/index.xml -index 0187016c1c5..d2c5af57970 100644 ---- a/src/cpu_map/index.xml -+++ b/src/cpu_map/index.xml -@@ -70,6 +70,7 @@ - - - -+ - - - -diff --git a/src/cpu_map/meson.build b/src/cpu_map/meson.build -index fa83b234741..ae5293e85f1 100644 ---- a/src/cpu_map/meson.build -+++ b/src/cpu_map/meson.build -@@ -39,6 +39,7 @@ cpumap_data = [ - 'x86_Dhyana.xml', - 'x86_EPYC-IBPB.xml', - 'x86_EPYC.xml', -+ 'x86_EPYC-Genoa.xml', - 'x86_EPYC-Milan.xml', - 'x86_EPYC-Rome.xml', - 'x86_features.xml', -diff --git a/src/cpu_map/x86_EPYC-Genoa.xml b/src/cpu_map/x86_EPYC-Genoa.xml -new file mode 100644 -index 00000000000..3e765b89b16 ---- /dev/null -+++ b/src/cpu_map/x86_EPYC-Genoa.xml -@@ -0,0 +1,115 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml -index 9a9e84e6138..4d438efdf75 100644 ---- a/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml -+++ b/tests/domaincapsdata/qemu_8.1.0-q35.x86_64.xml -@@ -116,6 +116,7 @@ - EPYC-Rome - EPYC-Milan - EPYC-IBPB -+ EPYC-Genoa - EPYC - Dhyana - Cooperlake -diff --git a/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml -index f898149a3c1..e32cd80c178 100644 ---- a/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml -+++ b/tests/domaincapsdata/qemu_8.1.0-tcg.x86_64.xml -@@ -115,6 +115,7 @@ - EPYC-Rome - EPYC-Milan - EPYC-IBPB -+ EPYC-Genoa - EPYC - Dhyana - Cooperlake -diff --git a/tests/domaincapsdata/qemu_8.1.0.x86_64.xml b/tests/domaincapsdata/qemu_8.1.0.x86_64.xml -index dbe1af68cbc..919357e577c 100644 ---- a/tests/domaincapsdata/qemu_8.1.0.x86_64.xml -+++ b/tests/domaincapsdata/qemu_8.1.0.x86_64.xml -@@ -115,6 +115,7 @@ - EPYC-Rome - EPYC-Milan - EPYC-IBPB -+ EPYC-Genoa - EPYC - Dhyana - Cooperlake diff --git a/SOURCES/libvirt-Add-vmx-features-to-Broadwell.patch b/SOURCES/libvirt-Add-vmx-features-to-Broadwell.patch new file mode 100644 index 0000000..d6fe5e1 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Broadwell.patch @@ -0,0 +1,358 @@ +From ce330dd7e5405573c77801a418345804049315ab Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:00:15 +0100 +Subject: [PATCH] Add vmx-* features to Broadwell* + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Broadwell-IBRS.xml | 75 ++++++++++++++++++++++++ + src/cpu_map/x86_Broadwell-noTSX-IBRS.xml | 75 ++++++++++++++++++++++++ + src/cpu_map/x86_Broadwell-noTSX.xml | 75 ++++++++++++++++++++++++ + src/cpu_map/x86_Broadwell.xml | 75 ++++++++++++++++++++++++ + 4 files changed, 300 insertions(+) + +diff --git a/src/cpu_map/x86_Broadwell-IBRS.xml b/src/cpu_map/x86_Broadwell-IBRS.xml +index 9033d5fcd51..14849032981 100644 +--- a/src/cpu_map/x86_Broadwell-IBRS.xml ++++ b/src/cpu_map/x86_Broadwell-IBRS.xml +@@ -59,6 +59,81 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml b/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml +index c044b60e36e..13f08435b76 100644 +--- a/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml ++++ b/src/cpu_map/x86_Broadwell-noTSX-IBRS.xml +@@ -57,6 +57,81 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Broadwell-noTSX.xml b/src/cpu_map/x86_Broadwell-noTSX.xml +index 637f29ba1cf..4293b3aeee3 100644 +--- a/src/cpu_map/x86_Broadwell-noTSX.xml ++++ b/src/cpu_map/x86_Broadwell-noTSX.xml +@@ -56,6 +56,81 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Broadwell.xml b/src/cpu_map/x86_Broadwell.xml +index 82939a45091..37dd1dabcfb 100644 +--- a/src/cpu_map/x86_Broadwell.xml ++++ b/src/cpu_map/x86_Broadwell.xml +@@ -58,6 +58,81 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-Cascadelake.patch b/SOURCES/libvirt-Add-vmx-features-to-Cascadelake.patch new file mode 100644 index 0000000..da1f1d9 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Cascadelake.patch @@ -0,0 +1,184 @@ +From 5db61952252fa2ab88cc79f064f8f1b61b6c95cb Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:01:25 +0100 +Subject: [PATCH] Add vmx-* features to Cascadelake* + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Cascadelake-Server-noTSX.xml | 76 ++++++++++++++++++++ + src/cpu_map/x86_Cascadelake-Server.xml | 74 +++++++++++++++++++ + 2 files changed, 150 insertions(+) + +diff --git a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml +index bfd4629836b..056f43d0887 100644 +--- a/src/cpu_map/x86_Cascadelake-Server-noTSX.xml ++++ b/src/cpu_map/x86_Cascadelake-Server-noTSX.xml +@@ -70,6 +70,82 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Cascadelake-Server.xml b/src/cpu_map/x86_Cascadelake-Server.xml +index 335e9cb5841..88e51c20678 100644 +--- a/src/cpu_map/x86_Cascadelake-Server.xml ++++ b/src/cpu_map/x86_Cascadelake-Server.xml +@@ -72,6 +72,80 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-Conroe.patch b/SOURCES/libvirt-Add-vmx-features-to-Conroe.patch new file mode 100644 index 0000000..f792a96 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Conroe.patch @@ -0,0 +1,47 @@ +From 9cb8c372cd75647e09fac96e6995adab5e8dde79 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:04:45 +0100 +Subject: [PATCH] Add vmx-* features to Conroe + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Conroe.xml | 26 ++++++++++++++++++++++++++ + 1 file changed, 26 insertions(+) + +diff --git a/src/cpu_map/x86_Conroe.xml b/src/cpu_map/x86_Conroe.xml +index 4cacee6142e..955297ffc30 100644 +--- a/src/cpu_map/x86_Conroe.xml ++++ b/src/cpu_map/x86_Conroe.xml +@@ -31,5 +31,31 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-Cooperlake.patch b/SOURCES/libvirt-Add-vmx-features-to-Cooperlake.patch new file mode 100644 index 0000000..34c587a --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Cooperlake.patch @@ -0,0 +1,98 @@ +From cbee851581fc82ea95d7b6309b85e22f9d1ba0d3 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:05:01 +0100 +Subject: [PATCH] Add vmx-* features to Cooperlake + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Cooperlake.xml | 76 ++++++++++++++++++++++++++++++++++ + 1 file changed, 76 insertions(+) + +diff --git a/src/cpu_map/x86_Cooperlake.xml b/src/cpu_map/x86_Cooperlake.xml +index ceca687334f..af428f2781c 100644 +--- a/src/cpu_map/x86_Cooperlake.xml ++++ b/src/cpu_map/x86_Cooperlake.xml +@@ -81,6 +81,82 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-Haswell.patch b/SOURCES/libvirt-Add-vmx-features-to-Haswell.patch new file mode 100644 index 0000000..1c0a2ed --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Haswell.patch @@ -0,0 +1,350 @@ +From b44679c31f2d46e88ce655c03aef4c3e9ab621ac Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:01:50 +0100 +Subject: [PATCH] Add vmx-* features to Haswell* + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Haswell-IBRS.xml | 73 ++++++++++++++++++++++++++ + src/cpu_map/x86_Haswell-noTSX-IBRS.xml | 73 ++++++++++++++++++++++++++ + src/cpu_map/x86_Haswell-noTSX.xml | 73 ++++++++++++++++++++++++++ + src/cpu_map/x86_Haswell.xml | 73 ++++++++++++++++++++++++++ + 4 files changed, 292 insertions(+) + +diff --git a/src/cpu_map/x86_Haswell-IBRS.xml b/src/cpu_map/x86_Haswell-IBRS.xml +index 0ffe2bae0d4..57b980d14fe 100644 +--- a/src/cpu_map/x86_Haswell-IBRS.xml ++++ b/src/cpu_map/x86_Haswell-IBRS.xml +@@ -55,6 +55,79 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Haswell-noTSX-IBRS.xml b/src/cpu_map/x86_Haswell-noTSX-IBRS.xml +index 75d709c0098..fcae023ffb5 100644 +--- a/src/cpu_map/x86_Haswell-noTSX-IBRS.xml ++++ b/src/cpu_map/x86_Haswell-noTSX-IBRS.xml +@@ -53,6 +53,79 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Haswell-noTSX.xml b/src/cpu_map/x86_Haswell-noTSX.xml +index b0a0faa856d..7404052065a 100644 +--- a/src/cpu_map/x86_Haswell-noTSX.xml ++++ b/src/cpu_map/x86_Haswell-noTSX.xml +@@ -52,6 +52,79 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Haswell.xml b/src/cpu_map/x86_Haswell.xml +index ee16b30f198..99986c5c45c 100644 +--- a/src/cpu_map/x86_Haswell.xml ++++ b/src/cpu_map/x86_Haswell.xml +@@ -54,6 +54,79 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-Icelake.patch b/SOURCES/libvirt-Add-vmx-features-to-Icelake.patch new file mode 100644 index 0000000..ce57bb4 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Icelake.patch @@ -0,0 +1,183 @@ +From a6f3eafc402fbaf18b2e23e93c8c7339317c7d97 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:02:47 +0100 +Subject: [PATCH] Add vmx-* features to Icelake* + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Icelake-Server-noTSX.xml | 77 ++++++++++++++++++++++++ + src/cpu_map/x86_Icelake-Server.xml | 72 ++++++++++++++++++++++ + 2 files changed, 149 insertions(+) + +diff --git a/src/cpu_map/x86_Icelake-Server-noTSX.xml b/src/cpu_map/x86_Icelake-Server-noTSX.xml +index 7c9c32c9776..072f8145c42 100644 +--- a/src/cpu_map/x86_Icelake-Server-noTSX.xml ++++ b/src/cpu_map/x86_Icelake-Server-noTSX.xml +@@ -80,6 +80,83 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Icelake-Server.xml b/src/cpu_map/x86_Icelake-Server.xml +index b4685bead05..3a35145d7f0 100644 +--- a/src/cpu_map/x86_Icelake-Server.xml ++++ b/src/cpu_map/x86_Icelake-Server.xml +@@ -82,6 +82,78 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-IvyBridge.patch b/SOURCES/libvirt-Add-vmx-features-to-IvyBridge.patch new file mode 100644 index 0000000..154edde --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-IvyBridge.patch @@ -0,0 +1,168 @@ +From 4b707f8bb0003b87f67474bfac02a2feac26c96f Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:04:01 +0100 +Subject: [PATCH] Add vmx-* features to IvyBridge* + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_IvyBridge-IBRS.xml | 67 ++++++++++++++++++++++++++++++ + src/cpu_map/x86_IvyBridge.xml | 67 ++++++++++++++++++++++++++++++ + 2 files changed, 134 insertions(+) + +diff --git a/src/cpu_map/x86_IvyBridge-IBRS.xml b/src/cpu_map/x86_IvyBridge-IBRS.xml +index 430bc3232db..27d85d86c4e 100644 +--- a/src/cpu_map/x86_IvyBridge-IBRS.xml ++++ b/src/cpu_map/x86_IvyBridge-IBRS.xml +@@ -47,6 +47,73 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_IvyBridge.xml b/src/cpu_map/x86_IvyBridge.xml +index eaf5d02e827..72031cfdc62 100644 +--- a/src/cpu_map/x86_IvyBridge.xml ++++ b/src/cpu_map/x86_IvyBridge.xml +@@ -46,6 +46,73 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-Nehalem.patch b/SOURCES/libvirt-Add-vmx-features-to-Nehalem.patch new file mode 100644 index 0000000..2366392 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Nehalem.patch @@ -0,0 +1,154 @@ +From a539910c942f5993b967f8265756e3a10363e4f4 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:04:21 +0100 +Subject: [PATCH] Add vmx-* features to Nehalem* + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Nehalem-IBRS.xml | 61 ++++++++++++++++++++++++++++++++ + src/cpu_map/x86_Nehalem.xml | 61 ++++++++++++++++++++++++++++++++ + 2 files changed, 122 insertions(+) + +diff --git a/src/cpu_map/x86_Nehalem-IBRS.xml b/src/cpu_map/x86_Nehalem-IBRS.xml +index 00d0d2fe51a..0cfee14c0f7 100644 +--- a/src/cpu_map/x86_Nehalem-IBRS.xml ++++ b/src/cpu_map/x86_Nehalem-IBRS.xml +@@ -38,5 +38,66 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + +diff --git a/src/cpu_map/x86_Nehalem.xml b/src/cpu_map/x86_Nehalem.xml +index 9968001fe79..74ee64ce1c3 100644 +--- a/src/cpu_map/x86_Nehalem.xml ++++ b/src/cpu_map/x86_Nehalem.xml +@@ -37,5 +37,66 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-Penryn.patch b/SOURCES/libvirt-Add-vmx-features-to-Penryn.patch new file mode 100644 index 0000000..b0c0b29 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Penryn.patch @@ -0,0 +1,50 @@ +From c6fadbb2807c80bd2b812eebd932eb4a34067ccd Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:05:20 +0100 +Subject: [PATCH] Add vmx-* features to Penryn + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Penryn.xml | 29 +++++++++++++++++++++++++++++ + 1 file changed, 29 insertions(+) + +diff --git a/src/cpu_map/x86_Penryn.xml b/src/cpu_map/x86_Penryn.xml +index 29d4cd635b8..b31f96fa431 100644 +--- a/src/cpu_map/x86_Penryn.xml ++++ b/src/cpu_map/x86_Penryn.xml +@@ -33,5 +33,34 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-SandyBridge.patch b/SOURCES/libvirt-Add-vmx-features-to-SandyBridge.patch new file mode 100644 index 0000000..225c547 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-SandyBridge.patch @@ -0,0 +1,160 @@ +From 29d492d6488e35db2e96a017ac3fb2712dcb638c Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:03:18 +0100 +Subject: [PATCH] Add vmx-* features to SandyBridge* + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_SandyBridge-IBRS.xml | 63 ++++++++++++++++++++++++++++ + src/cpu_map/x86_SandyBridge.xml | 63 ++++++++++++++++++++++++++++ + 2 files changed, 126 insertions(+) + +diff --git a/src/cpu_map/x86_SandyBridge-IBRS.xml b/src/cpu_map/x86_SandyBridge-IBRS.xml +index fbdb4f2bf64..297eea8e882 100644 +--- a/src/cpu_map/x86_SandyBridge-IBRS.xml ++++ b/src/cpu_map/x86_SandyBridge-IBRS.xml +@@ -41,6 +41,69 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_SandyBridge.xml b/src/cpu_map/x86_SandyBridge.xml +index 7c85ed42df1..20ea378c471 100644 +--- a/src/cpu_map/x86_SandyBridge.xml ++++ b/src/cpu_map/x86_SandyBridge.xml +@@ -40,6 +40,69 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-SapphireRapids.patch b/SOURCES/libvirt-Add-vmx-features-to-SapphireRapids.patch new file mode 100644 index 0000000..159f990 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-SapphireRapids.patch @@ -0,0 +1,99 @@ +From e67004ec1cec850baa65177d88c6db09376869d3 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:05:34 +0100 +Subject: [PATCH] Add vmx-* features to SapphireRapids + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_SapphireRapids.xml | 77 ++++++++++++++++++++++++++++++ + 1 file changed, 77 insertions(+) + +diff --git a/src/cpu_map/x86_SapphireRapids.xml b/src/cpu_map/x86_SapphireRapids.xml +index 2297feeeca2..40164a47e2a 100644 +--- a/src/cpu_map/x86_SapphireRapids.xml ++++ b/src/cpu_map/x86_SapphireRapids.xml +@@ -103,6 +103,83 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-Skylake.patch b/SOURCES/libvirt-Add-vmx-features-to-Skylake.patch new file mode 100644 index 0000000..ad44c02 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Skylake.patch @@ -0,0 +1,520 @@ +From aa064b38fdbafd39d296a0933b7d1b8987eb4cb5 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:00:53 +0100 +Subject: [PATCH] Add vmx-* features to Skylake* + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Skylake-Client-IBRS.xml | 71 +++++++++++++++++ + src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml | 72 ++++++++++++++++++ + src/cpu_map/x86_Skylake-Client.xml | 71 +++++++++++++++++ + src/cpu_map/x86_Skylake-Server-IBRS.xml | 74 ++++++++++++++++++ + src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml | 76 +++++++++++++++++++ + src/cpu_map/x86_Skylake-Server.xml | 74 ++++++++++++++++++ + 6 files changed, 438 insertions(+) + +diff --git a/src/cpu_map/x86_Skylake-Client-IBRS.xml b/src/cpu_map/x86_Skylake-Client-IBRS.xml +index 5709e7c2f95..1c77f9595b6 100644 +--- a/src/cpu_map/x86_Skylake-Client-IBRS.xml ++++ b/src/cpu_map/x86_Skylake-Client-IBRS.xml +@@ -67,6 +67,77 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml +index ffba34502a4..dca117028cd 100644 +--- a/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml ++++ b/src/cpu_map/x86_Skylake-Client-noTSX-IBRS.xml +@@ -65,6 +65,78 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Skylake-Client.xml b/src/cpu_map/x86_Skylake-Client.xml +index 14cd57e1768..68e5d2d0388 100644 +--- a/src/cpu_map/x86_Skylake-Client.xml ++++ b/src/cpu_map/x86_Skylake-Client.xml +@@ -66,6 +66,77 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Skylake-Server-IBRS.xml b/src/cpu_map/x86_Skylake-Server-IBRS.xml +index 9fb34888094..e467b76242b 100644 +--- a/src/cpu_map/x86_Skylake-Server-IBRS.xml ++++ b/src/cpu_map/x86_Skylake-Server-IBRS.xml +@@ -69,6 +69,80 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml +index c162c0acc31..b8601da0cbc 100644 +--- a/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml ++++ b/src/cpu_map/x86_Skylake-Server-noTSX-IBRS.xml +@@ -67,6 +67,82 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +diff --git a/src/cpu_map/x86_Skylake-Server.xml b/src/cpu_map/x86_Skylake-Server.xml +index e022d94c847..cc1e9ddd7f7 100644 +--- a/src/cpu_map/x86_Skylake-Server.xml ++++ b/src/cpu_map/x86_Skylake-Server.xml +@@ -68,6 +68,80 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-Snowridge.patch b/SOURCES/libvirt-Add-vmx-features-to-Snowridge.patch new file mode 100644 index 0000000..2620c62 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Snowridge.patch @@ -0,0 +1,98 @@ +From 64e3c1138a81b98f14e5f1aa1e8e2bb85cfdd1e5 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:05:53 +0100 +Subject: [PATCH] Add vmx-* features to Snowridge + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Snowridge.xml | 76 +++++++++++++++++++++++++++++++++++ + 1 file changed, 76 insertions(+) + +diff --git a/src/cpu_map/x86_Snowridge.xml b/src/cpu_map/x86_Snowridge.xml +index 383a24d367c..bc410bd8f80 100644 +--- a/src/cpu_map/x86_Snowridge.xml ++++ b/src/cpu_map/x86_Snowridge.xml +@@ -62,6 +62,82 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-Westmere.patch b/SOURCES/libvirt-Add-vmx-features-to-Westmere.patch new file mode 100644 index 0000000..9663126 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-Westmere.patch @@ -0,0 +1,158 @@ +From 6898b7cd8d61d46db7e92f6cf81daf085b85f724 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:03:38 +0100 +Subject: [PATCH] Add vmx-* features to Westmere* + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_Westmere-IBRS.xml | 63 +++++++++++++++++++++++++++++++ + src/cpu_map/x86_Westmere.xml | 63 +++++++++++++++++++++++++++++++ + 2 files changed, 126 insertions(+) + +diff --git a/src/cpu_map/x86_Westmere-IBRS.xml b/src/cpu_map/x86_Westmere-IBRS.xml +index c7898f0c226..a5abe8a1e18 100644 +--- a/src/cpu_map/x86_Westmere-IBRS.xml ++++ b/src/cpu_map/x86_Westmere-IBRS.xml +@@ -36,5 +36,68 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + +diff --git a/src/cpu_map/x86_Westmere.xml b/src/cpu_map/x86_Westmere.xml +index 16e4ad6c309..161f1a078e3 100644 +--- a/src/cpu_map/x86_Westmere.xml ++++ b/src/cpu_map/x86_Westmere.xml +@@ -37,5 +37,68 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-core2duo.patch b/SOURCES/libvirt-Add-vmx-features-to-core2duo.patch new file mode 100644 index 0000000..be19e4a --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-core2duo.patch @@ -0,0 +1,76 @@ +From 823c7005a3b0d5275b30ca811479995bfa5820e9 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:06:13 +0100 +Subject: [PATCH] Add vmx-* features to core{,2}duo + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_core2duo.xml | 26 ++++++++++++++++++++++++++ + src/cpu_map/x86_coreduo.xml | 18 ++++++++++++++++++ + 2 files changed, 44 insertions(+) + +diff --git a/src/cpu_map/x86_core2duo.xml b/src/cpu_map/x86_core2duo.xml +index 412039fe559..ea23a6c6629 100644 +--- a/src/cpu_map/x86_core2duo.xml ++++ b/src/cpu_map/x86_core2duo.xml +@@ -30,5 +30,31 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + +diff --git a/src/cpu_map/x86_coreduo.xml b/src/cpu_map/x86_coreduo.xml +index e2fda9a1d48..24900e637fa 100644 +--- a/src/cpu_map/x86_coreduo.xml ++++ b/src/cpu_map/x86_coreduo.xml +@@ -26,5 +26,23 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + diff --git a/SOURCES/libvirt-Add-vmx-features-to-kvm.patch b/SOURCES/libvirt-Add-vmx-features-to-kvm.patch new file mode 100644 index 0000000..e89d579 --- /dev/null +++ b/SOURCES/libvirt-Add-vmx-features-to-kvm.patch @@ -0,0 +1,70 @@ +From 1d03f78c5d0fa2d3422e76bef4c9369ab623bd52 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Thu, 7 Mar 2024 14:06:37 +0100 +Subject: [PATCH] Add vmx-* features to kvm* + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +--- + src/cpu_map/x86_kvm32.xml | 18 ++++++++++++++++++ + src/cpu_map/x86_kvm64.xml | 20 ++++++++++++++++++++ + 2 files changed, 38 insertions(+) + +diff --git a/src/cpu_map/x86_kvm32.xml b/src/cpu_map/x86_kvm32.xml +index 9dd96d5b569..ac28c53bd0b 100644 +--- a/src/cpu_map/x86_kvm32.xml ++++ b/src/cpu_map/x86_kvm32.xml +@@ -23,5 +23,23 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + +diff --git a/src/cpu_map/x86_kvm64.xml b/src/cpu_map/x86_kvm64.xml +index 185af06f784..970a8e73d50 100644 +--- a/src/cpu_map/x86_kvm64.xml ++++ b/src/cpu_map/x86_kvm64.xml +@@ -27,5 +27,25 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + diff --git a/SOURCES/libvirt-docs-update-description-of-virsh-nodedev-detach.patch b/SOURCES/libvirt-docs-update-description-of-virsh-nodedev-detach.patch deleted file mode 100644 index 15a6cac..0000000 --- a/SOURCES/libvirt-docs-update-description-of-virsh-nodedev-detach.patch +++ /dev/null @@ -1,53 +0,0 @@ -From bbfcf18f504b0eb165c0bbfe2f34b4e20d11c355 Mon Sep 17 00:00:00 2001 -From: Laine Stump -Date: Fri, 25 Aug 2023 00:09:54 -0400 -Subject: [PATCH] docs: update description of virsh nodedev-detach --driver - option - ---driver can now be used to specify a specific driver to bind to the -device being detached from the host driver (e.g. vfio-pci-igbvf), not -just the *type* of driver (e.g. "vfio" or "xen", which are unnecessary -anyway, since they are implicit in which hypervisor driver is in use) - -Signed-off-by: Laine Stump -Reviewed-by: Michal Privoznik ---- - docs/manpages/virsh.rst | 25 +++++++++++++++++-------- - 1 file changed, 17 insertions(+), 8 deletions(-) - -diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst -index 673812036d3..91e1d5de37d 100644 ---- a/docs/manpages/virsh.rst -+++ b/docs/manpages/virsh.rst -@@ -5388,14 +5388,23 @@ nodedev-detach - - nodedev-detach nodedev [--driver backend_driver] - --Detach *nodedev* from the host, so that it can safely be used by --guests via passthrough. This is reversed with --``nodedev-reattach``, and is done automatically for managed devices. -- --Different backend drivers expect the device to be bound to different --dummy devices. For example, QEMU's "vfio" backend driver expects the --device to be bound to vfio-pci. The *--driver* parameter can be used --to specify the desired backend driver. -+Detach *nodedev* from the host driver and bind it to a special driver -+that provides the API needed by the hypervisor for assigning the -+device to a virtual machine (using in the domain XML -+definition). This is reversed with ``nodedev-reattach``, and is done -+automatically by the hypervisor driver for managed devices (those -+devices with "managed='yes'" in their XML definition). -+ -+Different hypervisors expect the device being assigned to be bound to -+different drivers. For example, QEMU's "vfio" backend requires the -+device to be bound to the driver "vfio-pci" or to a "VFIO variant" -+driver (this is a driver that supports the full API provided by -+vfio-pci, plus some other APIs to support things like live -+migration). The *--driver* parameter can be used to specify a -+particular driver (e.g. a device-specific VFIO variant driver) the -+device should be bound to. When *--driver* is omitted, the default -+driver for the hypervisor is used ("vfio-pci" for QEMU, "pciback" for -+Xen). - - - nodedev-dumpxml diff --git a/SOURCES/libvirt-node_device-support-binding-other-drivers-with-virNodeDevice.patch b/SOURCES/libvirt-node_device-support-binding-other-drivers-with-virNodeDevice.patch deleted file mode 100644 index 83d43b0..0000000 --- a/SOURCES/libvirt-node_device-support-binding-other-drivers-with-virNodeDevice.patch +++ /dev/null @@ -1,178 +0,0 @@ -From 24beaffec33efa3fa077d7b8596d97aa9a038a01 Mon Sep 17 00:00:00 2001 -From: Laine Stump -Date: Sun, 9 Jul 2023 00:37:45 -0400 -Subject: [PATCH] node_device: support binding other drivers with - virNodeDeviceDetachFlags() - -In the past, the only allowable values for the "driver" field of -virNodeDeviceDetachFlags() were "kvm" or "vfio" for the QEMU driver, -and "xen" for the libxl driver. Then "kvm" was deprecated and removed, -so the driver name became essentially irrelevant (because it is always -called via a particular hypervisor driver, and so the "xen" or "vfio" -can be (and almost always is) implied. - -With the advent of VFIO variant drivers, the ability to explicitly -specify a driver name once again becomes useful - it can be used to -name the exact VFIO driver that we want bound to the device in place -of vfio-pci, so this patch allows those other names to be passed down -the call chain, where the code in virpci.c can make use of them. - -The names "vfio", "kvm", and "xen" retain their special meaning, though: - - 1) because there may be some application or configuration that still - calls virNodeDeviceDetachFlags() with driverName="vfio", this - single value is substituted with the synonym of NULL, which means - "bind the default driver for this device and hypervisor". This - will currently result in the vfio-pci driver being bound to the - device. - - 2) in the case of the libxl driver, "xen" means to use the standard - driver used in the case of Xen ("pciback"). - - 3) "kvm" as a driver name always results in an error, as legacy KVM - device assignment was removed from the kernel around 10 years ago. - -Signed-off-by: Laine Stump -Reviewed-by: Michal Privoznik ---- - src/hypervisor/domain_driver.c | 11 ++++++----- - src/hypervisor/domain_driver.h | 2 ++ - src/libxl/libxl_driver.c | 3 ++- - src/qemu/qemu_driver.c | 33 +++++++++++++++++++-------------- - 4 files changed, 29 insertions(+), 20 deletions(-) - -diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c -index a70f75f3ae8..d9469ad6f96 100644 ---- a/src/hypervisor/domain_driver.c -+++ b/src/hypervisor/domain_driver.c -@@ -462,6 +462,7 @@ virDomainDriverNodeDeviceReAttach(virNodeDevicePtr dev, - int - virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev, - virHostdevManager *hostdevMgr, -+ virPCIStubDriver driverType, - const char *driverName) - { - g_autoptr(virPCIDevice) pci = NULL; -@@ -471,8 +472,10 @@ virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev, - g_autoptr(virConnect) nodeconn = NULL; - g_autoptr(virNodeDevice) nodedev = NULL; - -- if (!driverName) -+ if (driverType == VIR_PCI_STUB_DRIVER_NONE) { -+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("driver type not set")); - return -1; -+ } - - if (!(nodeconn = virGetConnectNodeDev())) - return -1; -@@ -504,10 +507,8 @@ virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev, - if (!pci) - return -1; - -- if (STREQ(driverName, "vfio")) -- virPCIDeviceSetStubDriverType(pci, VIR_PCI_STUB_DRIVER_VFIO); -- else if (STREQ(driverName, "xen")) -- virPCIDeviceSetStubDriverType(pci, VIR_PCI_STUB_DRIVER_XEN); -+ virPCIDeviceSetStubDriverType(pci, driverType); -+ virPCIDeviceSetStubDriverName(pci, driverName); - - return virHostdevPCINodeDeviceDetach(hostdevMgr, pci); - } -diff --git a/src/hypervisor/domain_driver.h b/src/hypervisor/domain_driver.h -index 4241c869320..9942f58fda1 100644 ---- a/src/hypervisor/domain_driver.h -+++ b/src/hypervisor/domain_driver.h -@@ -22,6 +22,7 @@ - - #include "node_device_conf.h" - #include "virhostdev.h" -+#include "virpci.h" - - char * - virDomainDriverGenerateRootHash(const char *drivername, -@@ -58,6 +59,7 @@ int virDomainDriverNodeDeviceReAttach(virNodeDevicePtr dev, - - int virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev, - virHostdevManager *hostdevMgr, -+ virPCIStubDriver driverType, - const char *driverName); - - int virDomainDriverAddIOThreadCheck(virDomainDef *def, -diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c -index 3d10f458508..079922dd32a 100644 ---- a/src/libxl/libxl_driver.c -+++ b/src/libxl/libxl_driver.c -@@ -5876,7 +5876,8 @@ libxlNodeDeviceDetachFlags(virNodeDevicePtr dev, - - /* virNodeDeviceDetachFlagsEnsureACL() is being called by - * virDomainDriverNodeDeviceDetachFlags() */ -- return virDomainDriverNodeDeviceDetachFlags(dev, hostdev_mgr, driverName); -+ return virDomainDriverNodeDeviceDetachFlags(dev, hostdev_mgr, -+ VIR_PCI_STUB_DRIVER_XEN, NULL); - } - - static int -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 73fa499e40d..5128b643642 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -70,7 +70,6 @@ - #include "domain_driver.h" - #include "domain_postparse.h" - #include "domain_validate.h" --#include "virpci.h" - #include "virpidfile.h" - #include "virprocess.h" - #include "libvirt_internal.h" -@@ -11407,24 +11406,28 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev, - - virCheckFlags(0, -1); - -- if (!driverName) -- driverName = "vfio"; -- -- /* Only the 'vfio' driver is supported and a special error message for -- * the previously supported 'kvm' driver is provided below. */ -- if (STRNEQ(driverName, "vfio") && STRNEQ(driverName, "kvm")) { -- virReportError(VIR_ERR_INVALID_ARG, -- _("unknown driver name '%1$s'"), driverName); -- return -1; -- } -+ /* For historical reasons, if driverName is "vfio", that is the -+ * same as NULL, i.e. the default vfio driver for this device -+ */ -+ if (STREQ_NULLABLE(driverName, "vfio")) -+ driverName = NULL; - -- if (STREQ(driverName, "kvm")) { -+ /* the "kvm" driver name was used a very long time ago to force -+ * "legacy KVM device assignment", which hasn't been supported in -+ * over 10 years. -+ */ -+ if (STREQ_NULLABLE(driverName, "kvm")) { - virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", -- _("KVM device assignment is no longer " -+ _("'legacy KVM' device assignment is no longer " - "supported on this system")); - return -1; - } - -+ /* for any other driver, we can't know whether or not it is a VFIO -+ * driver until the device has been bound to it, so we will defer -+ * further validation until then. -+ */ -+ - if (!qemuHostdevHostSupportsPassthroughVFIO()) { - virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", - _("VFIO device assignment is currently not " -@@ -11434,7 +11437,9 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev, - - /* virNodeDeviceDetachFlagsEnsureACL() is being called by - * virDomainDriverNodeDeviceDetachFlags() */ -- return virDomainDriverNodeDeviceDetachFlags(dev, hostdev_mgr, driverName); -+ return virDomainDriverNodeDeviceDetachFlags(dev, hostdev_mgr, -+ VIR_PCI_STUB_DRIVER_VFIO, -+ driverName); - } - - static int diff --git a/SOURCES/libvirt-qemu-turn-two-multiline-log-messages-into-single-line.patch b/SOURCES/libvirt-qemu-turn-two-multiline-log-messages-into-single-line.patch deleted file mode 100644 index ad9e9a0..0000000 --- a/SOURCES/libvirt-qemu-turn-two-multiline-log-messages-into-single-line.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 10e8a518a05922d5592d1405054aed3195aebf06 Mon Sep 17 00:00:00 2001 -From: Laine Stump -Date: Fri, 18 Aug 2023 16:13:16 -0400 -Subject: [PATCH] qemu: turn two multiline log messages into single line - -Normally I wouldn't bother with a change like this, but I was touching -the function anyway, and wanted to leave it looking nice and tidy. - -Signed-off-by: Laine Stump -Reviewed-by: Michal Privoznik ---- - src/qemu/qemu_driver.c | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 5128b643642..5db42f07533 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -11418,8 +11418,7 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev, - */ - if (STREQ_NULLABLE(driverName, "kvm")) { - virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", -- _("'legacy KVM' device assignment is no longer " -- "supported on this system")); -+ _("'legacy KVM' device assignment is no longer supported on this system")); - return -1; - } - -@@ -11430,8 +11429,7 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev, - - if (!qemuHostdevHostSupportsPassthroughVFIO()) { - virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", -- _("VFIO device assignment is currently not " -- "supported on this system")); -+ _("VFIO device assignment is currently not supported on this system")); - return -1; - } - diff --git a/SOURCES/libvirt-regression-input-default-bus.patch b/SOURCES/libvirt-regression-input-default-bus.patch deleted file mode 100644 index eb687e5..0000000 --- a/SOURCES/libvirt-regression-input-default-bus.patch +++ /dev/null @@ -1,31 +0,0 @@ -From c9056e682a8a67dc29e39eb01392fcf8ee978c31 Mon Sep 17 00:00:00 2001 -From: Jonathan Wright -Date: Wed, 3 Jan 2024 09:26:59 -0600 -Subject: [PATCH] conf: Restore setting default bus for input devices - -Prior to v9.3.0-rc1~30 we used to set default bus for -devices, during XML parsing. In the commit this code was moved to -a post parse callback. But somehow the line that sets the bus in -one specific case disappeared. Bring it back. - -Resolves: https://gitlab.com/libvirt/libvirt/-/issues/577 -Fixes: c4bc4d3b82fbe22e03c986ca896090f481df5c10 -Signed-off-by: Jonathan Wright -Reviewed-by: Michal Privoznik ---- - src/conf/domain_postparse.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/conf/domain_postparse.c b/src/conf/domain_postparse.c -index e79913b73f..ee27023f3e 100644 ---- a/src/conf/domain_postparse.c -+++ b/src/conf/domain_postparse.c -@@ -657,6 +657,7 @@ virDomainInputDefPostParse(virDomainInputDef *input, - if ((input->type == VIR_DOMAIN_INPUT_TYPE_MOUSE || - input->type == VIR_DOMAIN_INPUT_TYPE_KBD) && - (ARCH_IS_X86(def->os.arch) || def->os.arch == VIR_ARCH_NONE)) { -+ input->bus = VIR_DOMAIN_INPUT_BUS_PS2; - } else if (ARCH_IS_S390(def->os.arch) || - input->type == VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH) { - input->bus = VIR_DOMAIN_INPUT_BUS_VIRTIO; --- diff --git a/SOURCES/libvirt-util-add-stub-driver-name-to-virPCIDevice-object.patch b/SOURCES/libvirt-util-add-stub-driver-name-to-virPCIDevice-object.patch deleted file mode 100644 index e30bca2..0000000 --- a/SOURCES/libvirt-util-add-stub-driver-name-to-virPCIDevice-object.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 1bb961797153a92a40a3c517114e4920c65672d4 Mon Sep 17 00:00:00 2001 -From: Laine Stump -Date: Sat, 8 Jul 2023 22:20:39 -0400 -Subject: [PATCH] util: add stub driver name to virPCIDevice object - -There can be many different drivers that are of the type "VFIO", so -add the driver name to the object and allow getting/setting it. - -Signed-off-by: Laine Stump -Reviewed-by: Michal Privoznik ---- - src/libvirt_private.syms | 2 ++ - src/util/virpci.c | 17 +++++++++++++++++ - src/util/virpci.h | 3 +++ - 3 files changed, 22 insertions(+) - -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 190bebdd625..0ca63f09552 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -3082,6 +3082,7 @@ virPCIDeviceGetManaged; - virPCIDeviceGetName; - virPCIDeviceGetRemoveSlot; - virPCIDeviceGetReprobe; -+virPCIDeviceGetStubDriverName; - virPCIDeviceGetStubDriverType; - virPCIDeviceGetUnbindFromStub; - virPCIDeviceGetUsedBy; -@@ -3108,6 +3109,7 @@ virPCIDeviceReset; - virPCIDeviceSetManaged; - virPCIDeviceSetRemoveSlot; - virPCIDeviceSetReprobe; -+virPCIDeviceSetStubDriverName; - virPCIDeviceSetStubDriverType; - virPCIDeviceSetUnbindFromStub; - virPCIDeviceSetUsedBy; -diff --git a/src/util/virpci.c b/src/util/virpci.c -index d86a81c2b1d..a53a51d55e2 100644 ---- a/src/util/virpci.c -+++ b/src/util/virpci.c -@@ -88,6 +88,7 @@ struct _virPCIDevice { - bool managed; - - virPCIStubDriver stubDriverType; -+ char *stubDriverName; /* if blank, use default for type */ - - /* used by reattach function */ - bool unbind_from_stub; -@@ -1508,6 +1509,7 @@ virPCIDeviceCopy(virPCIDevice *dev) - copy->path = g_strdup(dev->path); - copy->used_by_drvname = g_strdup(dev->used_by_drvname); - copy->used_by_domname = g_strdup(dev->used_by_domname); -+ copy->stubDriverName = g_strdup(dev->stubDriverName); - return copy; - } - -@@ -1522,6 +1524,7 @@ virPCIDeviceFree(virPCIDevice *dev) - g_free(dev->path); - g_free(dev->used_by_drvname); - g_free(dev->used_by_domname); -+ g_free(dev->stubDriverName); - g_free(dev); - } - -@@ -1581,6 +1584,20 @@ virPCIDeviceGetStubDriverType(virPCIDevice *dev) - return dev->stubDriverType; - } - -+void -+virPCIDeviceSetStubDriverName(virPCIDevice *dev, -+ const char *driverName) -+{ -+ g_free(dev->stubDriverName); -+ dev->stubDriverName = g_strdup(driverName); -+} -+ -+const char * -+virPCIDeviceGetStubDriverName(virPCIDevice *dev) -+{ -+ return dev->stubDriverName; -+} -+ - bool - virPCIDeviceGetUnbindFromStub(virPCIDevice *dev) - { -diff --git a/src/util/virpci.h b/src/util/virpci.h -index 485f535bc91..f8f98f39de7 100644 ---- a/src/util/virpci.h -+++ b/src/util/virpci.h -@@ -137,6 +137,9 @@ bool virPCIDeviceGetManaged(virPCIDevice *dev); - void virPCIDeviceSetStubDriverType(virPCIDevice *dev, - virPCIStubDriver driverType); - virPCIStubDriver virPCIDeviceGetStubDriverType(virPCIDevice *dev); -+void virPCIDeviceSetStubDriverName(virPCIDevice *dev, -+ const char *driverName); -+const char *virPCIDeviceGetStubDriverName(virPCIDevice *dev); - virPCIDeviceAddress *virPCIDeviceGetAddress(virPCIDevice *dev); - int virPCIDeviceSetUsedBy(virPCIDevice *dev, - const char *drv_name, diff --git a/SOURCES/libvirt-util-honor-stubDriverName-when-probing.patch b/SOURCES/libvirt-util-honor-stubDriverName-when-probing.patch deleted file mode 100644 index cb91971..0000000 --- a/SOURCES/libvirt-util-honor-stubDriverName-when-probing.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 928296b044647fd3cbe409db6903afc791863a90 Mon Sep 17 00:00:00 2001 -From: Laine Stump -Date: Sat, 8 Jul 2023 23:05:44 -0400 -Subject: [PATCH] util: honor stubDriverName when probing/binding stub driver - for a device - -Signed-off-by: Laine Stump -Reviewed-by: Michal Privoznik ---- - src/util/virpci.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/src/util/virpci.c b/src/util/virpci.c -index f1936795da7..1158e468bf9 100644 ---- a/src/util/virpci.c -+++ b/src/util/virpci.c -@@ -1290,17 +1290,20 @@ virPCIDeviceUnbindFromStub(virPCIDevice *dev) - static int - virPCIDeviceBindToStub(virPCIDevice *dev) - { -- const char *stubDriverName; -+ const char *stubDriverName = dev->stubDriverName; - g_autofree char *stubDriverPath = NULL; - g_autofree char *driverLink = NULL; - -- /* Check the device is configured to use one of the known stub drivers */ -+ - if (dev->stubDriverType == VIR_PCI_STUB_DRIVER_NONE) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("No stub driver configured for PCI device %1$s"), - dev->name); - return -1; -- } else if (!(stubDriverName = virPCIStubDriverTypeToString(dev->stubDriverType))) { -+ } -+ -+ if (!stubDriverName -+ && !(stubDriverName = virPCIStubDriverTypeToString(dev->stubDriverType))) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unknown stub driver configured for PCI device %1$s"), - dev->name); diff --git a/SOURCES/libvirt-util-permit-existing-binding-to-VFIO-variant-driver.patch b/SOURCES/libvirt-util-permit-existing-binding-to-VFIO-variant-driver.patch deleted file mode 100644 index 6eb3f1e..0000000 --- a/SOURCES/libvirt-util-permit-existing-binding-to-VFIO-variant-driver.patch +++ /dev/null @@ -1,250 +0,0 @@ -From 6ce071f6097d9e96892d5a6c7bd3040f43cc925b Mon Sep 17 00:00:00 2001 -From: Laine Stump -Date: Fri, 2 Jun 2023 14:34:51 -0400 -Subject: [PATCH] util: permit existing binding to VFIO variant driver - -Before a PCI device can be assigned to a guest with VFIO, that device -must be bound to the vfio-pci driver rather than to the device's -normal host driver. The vfio-pci driver provides APIs that permit QEMU -to perform all the necessary operations to make the device accessible -to the guest. - -In the past vfio-pci was the only driver that supplied these APIs, but -there are now vendor/device-specific "VFIO variant" drivers that -provide the basic vfio-pci driver functionality/API while adding -support for device-specific operations (for example these -device-specific drivers may support live migration of certain -devices). All that is needed to make this functionality available is -to bind the vendor-specific "VFIO variant" driver to the device -(rather than the generic vfio-pci driver, which will continue to work, -just without the extra functionality). - -But until now libvirt has required that all PCI devices being assigned -to a guest with VFIO specifically have the "vfio-pci" driver bound to -the device. So even if the user manually binds a shiny new -vendor-specific VFIO variant driver to the device (and puts -"managed='no'" in the config to prevent libvirt from changing the -binding), libvirt will just fail during startup of the guest (or -during hotplug) because the driver bound to the device isn't exactly -"vfio-pci". - -Beginning with kernel 6.1, it's possible to determine from the sysfs -directory for a device whether the currently-bound driver is the -vfio-pci driver or a VFIO variant - the device directory will have a -subdirectory called "vfio-dev". We can use that to appropriately widen -the list of drivers that libvirt will allow for VFIO device -assignment. - -This patch doesn't remove the explicit check for the exact "vfio-pci" -driver (since that would cause systems with pre-6.1 kernels to behave -incorrectly), but adds an additional check for the vfio-dev directory, -so that any VFIO variant driver is acceptable for libvirt to continue -setting up for VFIO device assignment. - -Signed-off-by: Laine Stump -Reviewed-by: Michal Privoznik ---- - src/hypervisor/virhostdev.c | 28 +++++-------- - src/libvirt_private.syms | 1 + - src/util/virpci.c | 78 ++++++++++++++++++++++++++++++++++--- - src/util/virpci.h | 3 ++ - 4 files changed, 87 insertions(+), 23 deletions(-) - -diff --git a/src/hypervisor/virhostdev.c b/src/hypervisor/virhostdev.c -index 244f057c6ce..b95d6bf3d61 100644 ---- a/src/hypervisor/virhostdev.c -+++ b/src/hypervisor/virhostdev.c -@@ -743,9 +743,8 @@ virHostdevPreparePCIDevicesImpl(virHostdevManager *mgr, - mgr->inactivePCIHostdevs) < 0) - goto reattachdevs; - } else { -- g_autofree char *driverPath = NULL; -- g_autofree char *driverName = NULL; -- int stub; -+ g_autofree char *drvName = NULL; -+ virPCIStubDriver drvType; - - /* Unmanaged devices should already have been marked as - * inactive: if that's the case, we can simply move on */ -@@ -765,19 +764,17 @@ virHostdevPreparePCIDevicesImpl(virHostdevManager *mgr, - * information about active / inactive device across - * daemon restarts has been implemented */ - -- if (virPCIDeviceGetCurrentDriverPathAndName(pci, &driverPath, -- &driverName) < 0) { -+ if (virPCIDeviceGetCurrentDriverNameAndType(pci, &drvName, -+ &drvType) < 0) { - goto reattachdevs; - } - -- stub = virPCIStubDriverTypeFromString(driverName); -- -- if (stub > VIR_PCI_STUB_DRIVER_NONE && -- stub < VIR_PCI_STUB_DRIVER_LAST) { -+ if (drvType > VIR_PCI_STUB_DRIVER_NONE) { - - /* The device is bound to a known stub driver: store this - * information and add a copy to the inactive list */ -- virPCIDeviceSetStubDriverType(pci, stub); -+ virPCIDeviceSetStubDriverType(pci, drvType); -+ virPCIDeviceSetStubDriverName(pci, drvName); - - VIR_DEBUG("Adding PCI device %s to inactive list", - virPCIDeviceGetName(pci)); -@@ -2291,18 +2288,13 @@ virHostdevPrepareOneNVMeDevice(virHostdevManager *hostdev_mgr, - /* Let's check if all PCI devices are NVMe disks. */ - for (i = 0; i < virPCIDeviceListCount(pciDevices); i++) { - virPCIDevice *pci = virPCIDeviceListGet(pciDevices, i); -- g_autofree char *drvPath = NULL; - g_autofree char *drvName = NULL; -- int stub = VIR_PCI_STUB_DRIVER_NONE; -+ virPCIStubDriver drvType; - -- if (virPCIDeviceGetCurrentDriverPathAndName(pci, &drvPath, &drvName) < 0) -+ if (virPCIDeviceGetCurrentDriverNameAndType(pci, &drvName, &drvType) < 0) - goto cleanup; - -- if (drvName) -- stub = virPCIStubDriverTypeFromString(drvName); -- -- if (stub == VIR_PCI_STUB_DRIVER_VFIO || -- STREQ_NULLABLE(drvName, "nvme")) -+ if (drvType == VIR_PCI_STUB_DRIVER_VFIO || STREQ_NULLABLE(drvName, "nvme")) - continue; - - VIR_WARN("Suspicious NVMe disk assignment. PCI device " -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index cc564928170..ab049b38584 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -3074,6 +3074,7 @@ virPCIDeviceFileIterate; - virPCIDeviceFree; - virPCIDeviceGetAddress; - virPCIDeviceGetConfigPath; -+virPCIDeviceGetCurrentDriverNameAndType; - virPCIDeviceGetCurrentDriverPathAndName; - virPCIDeviceGetIOMMUGroupDev; - virPCIDeviceGetIOMMUGroupList; -diff --git a/src/util/virpci.c b/src/util/virpci.c -index e6f7554b232..253ddccabdd 100644 ---- a/src/util/virpci.c -+++ b/src/util/virpci.c -@@ -280,6 +280,73 @@ virPCIDeviceGetCurrentDriverPathAndName(virPCIDevice *dev, - } - - -+/** -+ * virPCIDeviceGetCurrentDriverNameAndType: -+ * @dev: virPCIDevice object to examine -+ * @drvName: returns name of driver bound to this device (if any) -+ * @drvType: returns type of driver if it is a known stub driver type -+ * -+ * Find the name of the driver bound to @dev (if any) and the type of -+ * the driver if it is a known/recognized "stub" driver (based on the -+ * driver name). -+ * -+ * There are vfio "variant" drivers that provide all the basic -+ * functionality of the standard vfio-pci driver as well as additional -+ * stuff. As of kernel 6.1, the vfio-pci driver and all vfio variant -+ * drivers can be identified (once the driver has been bound to a -+ * device) by looking for the subdirectory "vfio-dev" in the device's -+ * sysfs directory; for example, if the directory -+ * /sys/bus/pci/devices/0000:04:11.4/vfio-dev exists, then the driver -+ * that is currently bound to PCI device 0000:04:11.4 is either -+ * vfio-pci, or a vfio-pci variant driver. -+ * -+ * Return 0 on success, -1 on failure. If -1 is returned, then an error -+ * message has been logged. -+ */ -+int -+virPCIDeviceGetCurrentDriverNameAndType(virPCIDevice *dev, -+ char **drvName, -+ virPCIStubDriver *drvType) -+{ -+ g_autofree char *drvPath = NULL; -+ g_autofree char *vfioDevDir = NULL; -+ int tmpType; -+ -+ if (virPCIDeviceGetCurrentDriverPathAndName(dev, &drvPath, drvName) < 0) -+ return -1; -+ -+ if (!*drvName) { -+ *drvType = VIR_PCI_STUB_DRIVER_NONE; -+ return 0; -+ } -+ -+ tmpType = virPCIStubDriverTypeFromString(*drvName); -+ -+ if (tmpType > VIR_PCI_STUB_DRIVER_NONE) { -+ *drvType = tmpType; -+ return 0; /* exact match of a known driver name (or no name) */ -+ } -+ -+ /* If the sysfs directory of this device contains a directory -+ * named "vfio-dev" then the currently-bound driver is a vfio -+ * variant driver. -+ */ -+ -+ vfioDevDir = virPCIFile(dev->name, "vfio-dev"); -+ -+ if (virFileIsDir(vfioDevDir)) { -+ VIR_DEBUG("Driver %s is a vfio_pci driver", *drvName); -+ *drvType = VIR_PCI_STUB_DRIVER_VFIO; -+ } else { -+ VIR_DEBUG("Driver %s is NOT a vfio_pci driver, or kernel is too old", -+ *drvName); -+ *drvType = VIR_PCI_STUB_DRIVER_NONE; -+ } -+ -+ return 0; -+} -+ -+ - static int - virPCIDeviceConfigOpenInternal(virPCIDevice *dev, bool readonly, bool fatal) - { -@@ -1007,8 +1074,8 @@ virPCIDeviceReset(virPCIDevice *dev, - virPCIDeviceList *activeDevs, - virPCIDeviceList *inactiveDevs) - { -- g_autofree char *drvPath = NULL; - g_autofree char *drvName = NULL; -+ virPCIStubDriver drvType; - int ret = -1; - int fd = -1; - int hdrType = -1; -@@ -1034,15 +1101,16 @@ virPCIDeviceReset(virPCIDevice *dev, - * reset it whenever appropriate, so doing it ourselves would just - * be redundant. - */ -- if (virPCIDeviceGetCurrentDriverPathAndName(dev, &drvPath, &drvName) < 0) -+ if (virPCIDeviceGetCurrentDriverNameAndType(dev, &drvName, &drvType) < 0) - goto cleanup; - -- if (virPCIStubDriverTypeFromString(drvName) == VIR_PCI_STUB_DRIVER_VFIO) { -- VIR_DEBUG("Device %s is bound to vfio-pci - skip reset", -- dev->name); -+ if (drvType == VIR_PCI_STUB_DRIVER_VFIO) { -+ -+ VIR_DEBUG("Device %s is bound to %s - skip reset", dev->name, drvName); - ret = 0; - goto cleanup; - } -+ - VIR_DEBUG("Resetting device %s", dev->name); - - if ((fd = virPCIDeviceConfigOpenWrite(dev)) < 0) -diff --git a/src/util/virpci.h b/src/util/virpci.h -index 19c910202a2..faca6cf6f99 100644 ---- a/src/util/virpci.h -+++ b/src/util/virpci.h -@@ -283,6 +283,9 @@ int virPCIDeviceRebind(virPCIDevice *dev); - int virPCIDeviceGetCurrentDriverPathAndName(virPCIDevice *dev, - char **path, - char **name); -+int virPCIDeviceGetCurrentDriverNameAndType(virPCIDevice *dev, -+ char **drvName, -+ virPCIStubDriver *drvType); - - int virPCIDeviceIsPCIExpress(virPCIDevice *dev); - int virPCIDeviceHasPCIExpressLink(virPCIDevice *dev); diff --git a/SOURCES/libvirt-util-probe-stub-driver-from-within-function-that-binds-to-stub-driver.patch b/SOURCES/libvirt-util-probe-stub-driver-from-within-function-that-binds-to-stub-driver.patch deleted file mode 100644 index 53b50ef..0000000 --- a/SOURCES/libvirt-util-probe-stub-driver-from-within-function-that-binds-to-stub-driver.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 2d9c9445b9cc093c870f101eb884ddeac3ae40f7 Mon Sep 17 00:00:00 2001 -From: Laine Stump -Date: Sun, 9 Jul 2023 15:00:26 -0400 -Subject: [PATCH] util: probe stub driver from within function that binds to - stub driver - -virPCIProbeStubDriver() and virPCIDeviceBindToStub() both have -very similar code that locally sets a driver name (based on -stubDriverType). These two functions are each also called in just one -place (virPCIDeviceDetach()), with just a small bit of validation code -in between. - -To eliminate the "duplicated" code (which is going to be expanded -slightly in upcoming patches to support manually or automatically -picking a VFIO variant driver), this patch modifies -virPCIProbeStubDriver() to take the driver name as an argument -(rather than the virPCIDevice object), and calls it from within -virPCIDeviceBindToStub() (rather than from that function's caller), -using the driverName it has just figured out with the -now-not-duplicated code. - -(NB: Since it could be used to probe *any* driver module, the name is -changed to virPCIProbeDriver()). - -Signed-off-by: Laine Stump -Reviewed-by: Michal Privoznik ---- - src/util/virpci.c | 33 ++++++++++++--------------------- - 1 file changed, 12 insertions(+), 21 deletions(-) - -diff --git a/src/util/virpci.c b/src/util/virpci.c -index 253ddccabdd..f1936795da7 100644 ---- a/src/util/virpci.c -+++ b/src/util/virpci.c -@@ -1154,28 +1154,19 @@ virPCIDeviceReset(virPCIDevice *dev, - - - static int --virPCIProbeStubDriver(virPCIStubDriver driver) -+virPCIProbeDriver(const char *driverName) - { -- const char *drvname = NULL; - g_autofree char *drvpath = NULL; - g_autofree char *errbuf = NULL; - -- if (driver == VIR_PCI_STUB_DRIVER_NONE || -- !(drvname = virPCIStubDriverTypeToString(driver))) { -- virReportError(VIR_ERR_INTERNAL_ERROR, -- "%s", -- _("Attempting to use unknown stub driver")); -- return -1; -- } -- -- drvpath = virPCIDriverDir(drvname); -+ drvpath = virPCIDriverDir(driverName); - - /* driver previously loaded, return */ - if (virFileExists(drvpath)) - return 0; - -- if ((errbuf = virKModLoad(drvname))) { -- VIR_WARN("failed to load driver %s: %s", drvname, errbuf); -+ if ((errbuf = virKModLoad(driverName))) { -+ VIR_WARN("failed to load driver %s: %s", driverName, errbuf); - goto cleanup; - } - -@@ -1187,14 +1178,14 @@ virPCIProbeStubDriver(virPCIStubDriver driver) - /* If we know failure was because of admin config, let's report that; - * otherwise, report a more generic failure message - */ -- if (virKModIsProhibited(drvname)) { -+ if (virKModIsProhibited(driverName)) { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Failed to load PCI stub module %1$s: administratively prohibited"), -- drvname); -+ _("Failed to load PCI driver module %1$s: administratively prohibited"), -+ driverName); - } else { - virReportError(VIR_ERR_INTERNAL_ERROR, -- _("Failed to load PCI stub module %1$s"), -- drvname); -+ _("Failed to load PCI driver module %1$s"), -+ driverName); - } - - return -1; -@@ -1316,6 +1307,9 @@ virPCIDeviceBindToStub(virPCIDevice *dev) - return -1; - } - -+ if (virPCIProbeDriver(stubDriverName) < 0) -+ return -1; -+ - stubDriverPath = virPCIDriverDir(stubDriverName); - driverLink = virPCIFile(dev->name, "driver"); - -@@ -1359,9 +1353,6 @@ virPCIDeviceDetach(virPCIDevice *dev, - virPCIDeviceList *activeDevs, - virPCIDeviceList *inactiveDevs) - { -- if (virPCIProbeStubDriver(dev->stubDriverType) < 0) -- return -1; -- - if (activeDevs && virPCIDeviceListFind(activeDevs, &dev->address)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Not detaching active device %1$s"), dev->name); diff --git a/SOURCES/libvirt-util-rename-virPCIDeviceGetDriverPathAndName.patch b/SOURCES/libvirt-util-rename-virPCIDeviceGetDriverPathAndName.patch deleted file mode 100644 index 3c1a070..0000000 --- a/SOURCES/libvirt-util-rename-virPCIDeviceGetDriverPathAndName.patch +++ /dev/null @@ -1,132 +0,0 @@ -From 222b66974e8256965c089fb0f244dc1e01f708e7 Mon Sep 17 00:00:00 2001 -From: Laine Stump -Date: Sat, 8 Jul 2023 23:12:09 -0400 -Subject: [PATCH] util: rename virPCIDeviceGetDriverPathAndName - -Instead, call it virPCIDeviceGetCurrentDriverPathAndName() to avoid -confusion with the device name that is stored in the virPCIDevice -object - that one is not necessarily the name of the current driver -for the device, but could instead be the driver that we want to be -bound to the device in the future. - -Signed-off-by: Laine Stump -Reviewed-by: Michal Privoznik ---- - src/hypervisor/virhostdev.c | 7 ++++--- - src/libvirt_private.syms | 2 +- - src/util/virpci.c | 10 ++++++---- - src/util/virpci.h | 6 +++--- - tests/virpcitest.c | 2 +- - 5 files changed, 15 insertions(+), 12 deletions(-) - -diff --git a/src/hypervisor/virhostdev.c b/src/hypervisor/virhostdev.c -index c437ca9d22d..244f057c6ce 100644 ---- a/src/hypervisor/virhostdev.c -+++ b/src/hypervisor/virhostdev.c -@@ -765,9 +765,10 @@ virHostdevPreparePCIDevicesImpl(virHostdevManager *mgr, - * information about active / inactive device across - * daemon restarts has been implemented */ - -- if (virPCIDeviceGetDriverPathAndName(pci, -- &driverPath, &driverName) < 0) -+ if (virPCIDeviceGetCurrentDriverPathAndName(pci, &driverPath, -+ &driverName) < 0) { - goto reattachdevs; -+ } - - stub = virPCIStubDriverTypeFromString(driverName); - -@@ -2294,7 +2295,7 @@ virHostdevPrepareOneNVMeDevice(virHostdevManager *hostdev_mgr, - g_autofree char *drvName = NULL; - int stub = VIR_PCI_STUB_DRIVER_NONE; - -- if (virPCIDeviceGetDriverPathAndName(pci, &drvPath, &drvName) < 0) -+ if (virPCIDeviceGetCurrentDriverPathAndName(pci, &drvPath, &drvName) < 0) - goto cleanup; - - if (drvName) -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 0ca63f09552..cc564928170 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -3074,7 +3074,7 @@ virPCIDeviceFileIterate; - virPCIDeviceFree; - virPCIDeviceGetAddress; - virPCIDeviceGetConfigPath; --virPCIDeviceGetDriverPathAndName; -+virPCIDeviceGetCurrentDriverPathAndName; - virPCIDeviceGetIOMMUGroupDev; - virPCIDeviceGetIOMMUGroupList; - virPCIDeviceGetLinkCapSta; -diff --git a/src/util/virpci.c b/src/util/virpci.c -index a53a51d55e2..e6f7554b232 100644 ---- a/src/util/virpci.c -+++ b/src/util/virpci.c -@@ -228,7 +228,7 @@ virPCIFile(const char *device, const char *file) - } - - --/* virPCIDeviceGetDriverPathAndName - put the path to the driver -+/* virPCIDeviceGetCurrentDriverPathAndName - put the path to the driver - * directory of the driver in use for this device in @path and the - * name of the driver in @name. Both could be NULL if it's not bound - * to any driver. -@@ -236,7 +236,9 @@ virPCIFile(const char *device, const char *file) - * Return 0 for success, -1 for error. - */ - int --virPCIDeviceGetDriverPathAndName(virPCIDevice *dev, char **path, char **name) -+virPCIDeviceGetCurrentDriverPathAndName(virPCIDevice *dev, -+ char **path, -+ char **name) - { - int ret = -1; - g_autofree char *drvlink = NULL; -@@ -1032,7 +1034,7 @@ virPCIDeviceReset(virPCIDevice *dev, - * reset it whenever appropriate, so doing it ourselves would just - * be redundant. - */ -- if (virPCIDeviceGetDriverPathAndName(dev, &drvPath, &drvName) < 0) -+ if (virPCIDeviceGetCurrentDriverPathAndName(dev, &drvPath, &drvName) < 0) - goto cleanup; - - if (virPCIStubDriverTypeFromString(drvName) == VIR_PCI_STUB_DRIVER_VFIO) { -@@ -1137,7 +1139,7 @@ virPCIDeviceUnbind(virPCIDevice *dev) - g_autofree char *drvpath = NULL; - g_autofree char *driver = NULL; - -- if (virPCIDeviceGetDriverPathAndName(dev, &drvpath, &driver) < 0) -+ if (virPCIDeviceGetCurrentDriverPathAndName(dev, &drvpath, &driver) < 0) - return -1; - - if (!driver) -diff --git a/src/util/virpci.h b/src/util/virpci.h -index f8f98f39de7..19c910202a2 100644 ---- a/src/util/virpci.h -+++ b/src/util/virpci.h -@@ -280,9 +280,9 @@ virPCIVPDResource * virPCIDeviceGetVPD(virPCIDevice *dev); - - int virPCIDeviceUnbind(virPCIDevice *dev); - int virPCIDeviceRebind(virPCIDevice *dev); --int virPCIDeviceGetDriverPathAndName(virPCIDevice *dev, -- char **path, -- char **name); -+int virPCIDeviceGetCurrentDriverPathAndName(virPCIDevice *dev, -+ char **path, -+ char **name); - - int virPCIDeviceIsPCIExpress(virPCIDevice *dev); - int virPCIDeviceHasPCIExpressLink(virPCIDevice *dev); -diff --git a/tests/virpcitest.c b/tests/virpcitest.c -index 92cc8c07c6f..d69a1b51183 100644 ---- a/tests/virpcitest.c -+++ b/tests/virpcitest.c -@@ -37,7 +37,7 @@ testVirPCIDeviceCheckDriver(virPCIDevice *dev, const char *expected) - g_autofree char *path = NULL; - g_autofree char *driver = NULL; - -- if (virPCIDeviceGetDriverPathAndName(dev, &path, &driver) < 0) -+ if (virPCIDeviceGetCurrentDriverPathAndName(dev, &path, &driver) < 0) - return -1; - - if (STRNEQ_NULLABLE(driver, expected)) { diff --git a/SOURCES/libvirt-util-use-stubDriverType-instead-of-just-stubDriver.patch b/SOURCES/libvirt-util-use-stubDriverType-instead-of-just-stubDriver.patch deleted file mode 100644 index 647e063..0000000 --- a/SOURCES/libvirt-util-use-stubDriverType-instead-of-just-stubDriver.patch +++ /dev/null @@ -1,251 +0,0 @@ -From cd2843f5463d93eee00fab31fe259ad1b5b27a27 Mon Sep 17 00:00:00 2001 -From: Laine Stump -Date: Sat, 8 Jul 2023 22:11:06 -0400 -Subject: [PATCH] util: use "stubDriverType" instead of just "stubDriver" - -In the past we just kept track of the type of the "stub driver" (the -driver that is bound to a device in order to assign it to a -guest). The next commit will add a stubDriverName to go along with -type, so lets use stubDriverType for the existing enum to make it -easier to keep track of whether we're talking about the name or the -type. - -Signed-off-by: Laine Stump -Reviewed-by: Michal Privoznik ---- - src/hypervisor/domain_driver.c | 4 ++-- - src/hypervisor/virhostdev.c | 8 ++++---- - src/libvirt_private.syms | 4 ++-- - src/util/virnvme.c | 2 +- - src/util/virpci.c | 23 ++++++++++++----------- - src/util/virpci.h | 6 +++--- - tests/virhostdevtest.c | 2 +- - tests/virpcitest.c | 8 ++++---- - 8 files changed, 29 insertions(+), 28 deletions(-) - -diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c -index 66e09ffb04f..a70f75f3ae8 100644 ---- a/src/hypervisor/domain_driver.c -+++ b/src/hypervisor/domain_driver.c -@@ -505,9 +505,9 @@ virDomainDriverNodeDeviceDetachFlags(virNodeDevicePtr dev, - return -1; - - if (STREQ(driverName, "vfio")) -- virPCIDeviceSetStubDriver(pci, VIR_PCI_STUB_DRIVER_VFIO); -+ virPCIDeviceSetStubDriverType(pci, VIR_PCI_STUB_DRIVER_VFIO); - else if (STREQ(driverName, "xen")) -- virPCIDeviceSetStubDriver(pci, VIR_PCI_STUB_DRIVER_XEN); -+ virPCIDeviceSetStubDriverType(pci, VIR_PCI_STUB_DRIVER_XEN); - - return virHostdevPCINodeDeviceDetach(hostdevMgr, pci); - } -diff --git a/src/hypervisor/virhostdev.c b/src/hypervisor/virhostdev.c -index eac34747836..c437ca9d22d 100644 ---- a/src/hypervisor/virhostdev.c -+++ b/src/hypervisor/virhostdev.c -@@ -244,9 +244,9 @@ virHostdevGetPCIHostDevice(const virDomainHostdevDef *hostdev, - virPCIDeviceSetManaged(actual, hostdev->managed); - - if (pcisrc->backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) { -- virPCIDeviceSetStubDriver(actual, VIR_PCI_STUB_DRIVER_VFIO); -+ virPCIDeviceSetStubDriverType(actual, VIR_PCI_STUB_DRIVER_VFIO); - } else if (pcisrc->backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN) { -- virPCIDeviceSetStubDriver(actual, VIR_PCI_STUB_DRIVER_XEN); -+ virPCIDeviceSetStubDriverType(actual, VIR_PCI_STUB_DRIVER_XEN); - } else { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("pci backend driver '%1$s' is not supported"), -@@ -679,7 +679,7 @@ virHostdevPreparePCIDevicesImpl(virHostdevManager *mgr, - for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) { - virPCIDevice *pci = virPCIDeviceListGet(pcidevs, i); - bool strict_acs_check = !!(flags & VIR_HOSTDEV_STRICT_ACS_CHECK); -- bool usesVFIO = (virPCIDeviceGetStubDriver(pci) == VIR_PCI_STUB_DRIVER_VFIO); -+ bool usesVFIO = (virPCIDeviceGetStubDriverType(pci) == VIR_PCI_STUB_DRIVER_VFIO); - struct virHostdevIsPCINodeDeviceUsedData data = {mgr, drv_name, dom_name, false}; - int hdrType = -1; - -@@ -776,7 +776,7 @@ virHostdevPreparePCIDevicesImpl(virHostdevManager *mgr, - - /* The device is bound to a known stub driver: store this - * information and add a copy to the inactive list */ -- virPCIDeviceSetStubDriver(pci, stub); -+ virPCIDeviceSetStubDriverType(pci, stub); - - VIR_DEBUG("Adding PCI device %s to inactive list", - virPCIDeviceGetName(pci)); -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 00cf32d49e8..190bebdd625 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -3082,7 +3082,7 @@ virPCIDeviceGetManaged; - virPCIDeviceGetName; - virPCIDeviceGetRemoveSlot; - virPCIDeviceGetReprobe; --virPCIDeviceGetStubDriver; -+virPCIDeviceGetStubDriverType; - virPCIDeviceGetUnbindFromStub; - virPCIDeviceGetUsedBy; - virPCIDeviceGetVPD; -@@ -3108,7 +3108,7 @@ virPCIDeviceReset; - virPCIDeviceSetManaged; - virPCIDeviceSetRemoveSlot; - virPCIDeviceSetReprobe; --virPCIDeviceSetStubDriver; -+virPCIDeviceSetStubDriverType; - virPCIDeviceSetUnbindFromStub; - virPCIDeviceSetUsedBy; - virPCIDeviceUnbind; -diff --git a/src/util/virnvme.c b/src/util/virnvme.c -index f7f8dc5ea91..37333d515b4 100644 ---- a/src/util/virnvme.c -+++ b/src/util/virnvme.c -@@ -292,7 +292,7 @@ virNVMeDeviceCreatePCIDevice(const virNVMeDevice *nvme) - return NULL; - - /* NVMe devices must be bound to vfio */ -- virPCIDeviceSetStubDriver(pci, VIR_PCI_STUB_DRIVER_VFIO); -+ virPCIDeviceSetStubDriverType(pci, VIR_PCI_STUB_DRIVER_VFIO); - virPCIDeviceSetManaged(pci, nvme->managed); - - return g_steal_pointer(&pci); -diff --git a/src/util/virpci.c b/src/util/virpci.c -index cc2b07bbba0..d86a81c2b1d 100644 ---- a/src/util/virpci.c -+++ b/src/util/virpci.c -@@ -87,7 +87,7 @@ struct _virPCIDevice { - - bool managed; - -- virPCIStubDriver stubDriver; -+ virPCIStubDriver stubDriverType; - - /* used by reattach function */ - bool unbind_from_stub; -@@ -1233,12 +1233,12 @@ virPCIDeviceBindToStub(virPCIDevice *dev) - g_autofree char *driverLink = NULL; - - /* Check the device is configured to use one of the known stub drivers */ -- if (dev->stubDriver == VIR_PCI_STUB_DRIVER_NONE) { -+ if (dev->stubDriverType == VIR_PCI_STUB_DRIVER_NONE) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("No stub driver configured for PCI device %1$s"), - dev->name); - return -1; -- } else if (!(stubDriverName = virPCIStubDriverTypeToString(dev->stubDriver))) { -+ } else if (!(stubDriverName = virPCIStubDriverTypeToString(dev->stubDriverType))) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unknown stub driver configured for PCI device %1$s"), - dev->name); -@@ -1267,9 +1267,10 @@ virPCIDeviceBindToStub(virPCIDevice *dev) - /* virPCIDeviceDetach: - * - * Detach this device from the host driver, attach it to the stub -- * driver (previously set with virPCIDeviceSetStubDriver(), and add *a -- * copy* of the object to the inactiveDevs list (if provided). This -- * function will *never* consume dev, so the caller should free it. -+ * driver (previously set with virPCIDeviceSetStubDriverType(), and -+ * add *a copy* of the object to the inactiveDevs list (if provided). -+ * This function will *never* consume dev, so the caller should free -+ * it. - * - * Returns 0 on success, -1 on failure (will fail if the device is - * already in the activeDevs list, but will be a NOP if the device is -@@ -1287,7 +1288,7 @@ virPCIDeviceDetach(virPCIDevice *dev, - virPCIDeviceList *activeDevs, - virPCIDeviceList *inactiveDevs) - { -- if (virPCIProbeStubDriver(dev->stubDriver) < 0) -+ if (virPCIProbeStubDriver(dev->stubDriverType) < 0) - return -1; - - if (activeDevs && virPCIDeviceListFind(activeDevs, &dev->address)) { -@@ -1569,15 +1570,15 @@ virPCIDeviceGetManaged(virPCIDevice *dev) - } - - void --virPCIDeviceSetStubDriver(virPCIDevice *dev, virPCIStubDriver driver) -+virPCIDeviceSetStubDriverType(virPCIDevice *dev, virPCIStubDriver driverType) - { -- dev->stubDriver = driver; -+ dev->stubDriverType = driverType; - } - - virPCIStubDriver --virPCIDeviceGetStubDriver(virPCIDevice *dev) -+virPCIDeviceGetStubDriverType(virPCIDevice *dev) - { -- return dev->stubDriver; -+ return dev->stubDriverType; - } - - bool -diff --git a/src/util/virpci.h b/src/util/virpci.h -index 4d9193f24e5..485f535bc91 100644 ---- a/src/util/virpci.h -+++ b/src/util/virpci.h -@@ -134,9 +134,9 @@ int virPCIDeviceReset(virPCIDevice *dev, - void virPCIDeviceSetManaged(virPCIDevice *dev, - bool managed); - bool virPCIDeviceGetManaged(virPCIDevice *dev); --void virPCIDeviceSetStubDriver(virPCIDevice *dev, -- virPCIStubDriver driver); --virPCIStubDriver virPCIDeviceGetStubDriver(virPCIDevice *dev); -+void virPCIDeviceSetStubDriverType(virPCIDevice *dev, -+ virPCIStubDriver driverType); -+virPCIStubDriver virPCIDeviceGetStubDriverType(virPCIDevice *dev); - virPCIDeviceAddress *virPCIDeviceGetAddress(virPCIDevice *dev); - int virPCIDeviceSetUsedBy(virPCIDevice *dev, - const char *drv_name, -diff --git a/tests/virhostdevtest.c b/tests/virhostdevtest.c -index ee0d1c1e6b8..04e6c009081 100644 ---- a/tests/virhostdevtest.c -+++ b/tests/virhostdevtest.c -@@ -142,7 +142,7 @@ myInit(void) - if (!(dev[i] = virPCIDeviceNew(&subsys->u.pci.addr))) - goto cleanup; - -- virPCIDeviceSetStubDriver(dev[i], VIR_PCI_STUB_DRIVER_VFIO); -+ virPCIDeviceSetStubDriverType(dev[i], VIR_PCI_STUB_DRIVER_VFIO); - } - - for (i = 0; i < ndisks; i++) { -diff --git a/tests/virpcitest.c b/tests/virpcitest.c -index 769175d7c46..92cc8c07c6f 100644 ---- a/tests/virpcitest.c -+++ b/tests/virpcitest.c -@@ -107,7 +107,7 @@ testVirPCIDeviceDetach(const void *opaque G_GNUC_UNUSED) - if (!(dev[i] = virPCIDeviceNew(&devAddr))) - goto cleanup; - -- virPCIDeviceSetStubDriver(dev[i], VIR_PCI_STUB_DRIVER_VFIO); -+ virPCIDeviceSetStubDriverType(dev[i], VIR_PCI_STUB_DRIVER_VFIO); - - if (virPCIDeviceDetach(dev[i], activeDevs, inactiveDevs) < 0) - goto cleanup; -@@ -149,7 +149,7 @@ testVirPCIDeviceReset(const void *opaque G_GNUC_UNUSED) - if (!(dev[i] = virPCIDeviceNew(&devAddr))) - goto cleanup; - -- virPCIDeviceSetStubDriver(dev[i], VIR_PCI_STUB_DRIVER_VFIO); -+ virPCIDeviceSetStubDriverType(dev[i], VIR_PCI_STUB_DRIVER_VFIO); - - if (virPCIDeviceReset(dev[i], activeDevs, inactiveDevs) < 0) - goto cleanup; -@@ -190,7 +190,7 @@ testVirPCIDeviceReattach(const void *opaque G_GNUC_UNUSED) - CHECK_LIST_COUNT(activeDevs, 0); - CHECK_LIST_COUNT(inactiveDevs, i + 1); - -- virPCIDeviceSetStubDriver(dev[i], VIR_PCI_STUB_DRIVER_VFIO); -+ virPCIDeviceSetStubDriverType(dev[i], VIR_PCI_STUB_DRIVER_VFIO); - } - - CHECK_LIST_COUNT(activeDevs, 0); -@@ -249,7 +249,7 @@ testVirPCIDeviceDetachSingle(const void *opaque) - if (!dev) - goto cleanup; - -- virPCIDeviceSetStubDriver(dev, VIR_PCI_STUB_DRIVER_VFIO); -+ virPCIDeviceSetStubDriverType(dev, VIR_PCI_STUB_DRIVER_VFIO); - - if (virPCIDeviceDetach(dev, NULL, NULL) < 0) - goto cleanup; diff --git a/SOURCES/qemu-domain-Check-arch-in-qemuDomainMakeCPUMigratable.patch b/SOURCES/qemu-domain-Check-arch-in-qemuDomainMakeCPUMigratable.patch new file mode 100644 index 0000000..aaa3b16 --- /dev/null +++ b/SOURCES/qemu-domain-Check-arch-in-qemuDomainMakeCPUMigratable.patch @@ -0,0 +1,77 @@ +From 909564c3652d6f6fb5b68ebc5830c6cb524ac713 Mon Sep 17 00:00:00 2001 +From: Jiri Denemark +Date: Mon, 11 Mar 2024 15:34:37 +0100 +Subject: [PATCH] qemu: domain: Check arch in qemuDomainMakeCPUMigratable + +The content is arch specific and checking for Icelake-Server CPU model +on non-x86 architectures does not make sense. + +Signed-off-by: Jiri Denemark +Reviewed-by: Tim Wiederhake +Reviewed-by: Peter Krempa +--- + src/qemu/qemu_domain.c | 14 ++++++++++---- + src/qemu/qemu_domain.h | 3 ++- + src/qemu/qemu_migration_cookie.c | 2 +- + 3 files changed, 13 insertions(+), 6 deletions(-) + +diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c +index 8c85446c3de..31a6509166d 100644 +--- a/src/qemu/qemu_domain.c ++++ b/src/qemu/qemu_domain.c +@@ -6588,10 +6588,15 @@ qemuDomainDefCopy(virQEMUDriver *driver, + + + int +-qemuDomainMakeCPUMigratable(virCPUDef *cpu) ++qemuDomainMakeCPUMigratable(virArch arch, ++ virCPUDef *cpu) + { +- if (cpu->mode == VIR_CPU_MODE_CUSTOM && +- STREQ_NULLABLE(cpu->model, "Icelake-Server")) { ++ if (cpu->mode != VIR_CPU_MODE_CUSTOM || ++ !cpu->model || ++ !ARCH_IS_X86(arch)) ++ return 0; ++ ++ if (STREQ(cpu->model, "Icelake-Server")) { + /* Originally Icelake-Server CPU model contained pconfig CPU feature. + * It was never actually enabled and thus it was removed. To enable + * migration to QEMU 3.1.0 (with both new and old libvirt), we +@@ -6781,7 +6786,8 @@ qemuDomainDefFormatBufInternal(virQEMUDriver *driver, + return -1; + } + +- if (def->cpu && qemuDomainMakeCPUMigratable(def->cpu) < 0) ++ if (def->cpu && ++ qemuDomainMakeCPUMigratable(def->os.arch, def->cpu) < 0) + return -1; + + /* Old libvirt doesn't understand