diff --git a/conf-qemu-add-libvirt-support-reuse-id-for-hygon-CSV.patch b/conf-qemu-add-libvirt-support-reuse-id-for-hygon-CSV.patch new file mode 100644 index 0000000000000000000000000000000000000000..7d58529dcc2d25e71b1dbfe4c575ee31ef85581c --- /dev/null +++ b/conf-qemu-add-libvirt-support-reuse-id-for-hygon-CSV.patch @@ -0,0 +1,160 @@ +From 5bece75a0329e39451aa4da8d8850a355250b862 Mon Sep 17 00:00:00 2001 +From: panpingsheng +Date: Fri, 8 Sep 2023 15:04:44 +0800 +Subject: [PATCH] conf: qemu: add libvirt support reuse id for hygon CSV + +csv xml format: + + 0x0081 + 47 + 5 + usertest + + +Signed-off-by: panpingsheng +Signed-off-by: Xin Jiang +--- + include/libvirt/libvirt-host.h | 9 +++++++++ + src/conf/domain_capabilities.c | 3 +++ + src/conf/domain_capabilities.h | 1 + + src/conf/domain_conf.c | 4 ++++ + src/conf/domain_conf.h | 1 + + src/qemu/qemu_capabilities.c | 1 + + src/qemu/qemu_command.c | 6 ++++-- + src/qemu/qemu_driver.c | 4 ++++ + 8 files changed, 27 insertions(+), 2 deletions(-) + +diff --git a/include/libvirt/libvirt-host.h b/include/libvirt/libvirt-host.h +index 3112f2b..e173553 100644 +--- a/include/libvirt/libvirt-host.h ++++ b/include/libvirt/libvirt-host.h +@@ -587,6 +587,15 @@ typedef virNodeMemoryStats *virNodeMemoryStatsPtr; + */ + # define VIR_NODE_SEV_MAX_ES_GUESTS "max-es-guests" + ++/** ++ * VIR_NODE_SEV_USER_ID: ++ * ++ * Macro represents the user id string,enable reuse asid feature ++ * ++ * Since: 9.10.0 ++ */ ++# define VIR_NODE_SEV_USER_ID "user-id" ++ + int virNodeGetSEVInfo (virConnectPtr conn, + virTypedParameterPtr *params, + int *nparams, +diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c +index f6e09dc..51adc48 100644 +--- a/src/conf/domain_capabilities.c ++++ b/src/conf/domain_capabilities.c +@@ -654,6 +654,9 @@ virDomainCapsFeatureSEVFormat(virBuffer *buf, + if (sev->cpu0_id != NULL) + virBufferAsprintf(buf, "%s\n", sev->cpu0_id); + ++ if (sev->user_id != NULL) ++ virBufferAsprintf(buf, "%s\n", sev->user_id); ++ + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); + } +diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h +index 01bcfa2..20cff85 100644 +--- a/src/conf/domain_capabilities.h ++++ b/src/conf/domain_capabilities.h +@@ -213,6 +213,7 @@ struct _virSEVCapability { + unsigned int reduced_phys_bits; + unsigned int max_guests; + unsigned int max_es_guests; ++ char *user_id; + }; + + typedef struct _virSGXSection virSGXSection; +diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c +index 22ad43e..dd0cb9d 100644 +--- a/src/conf/domain_conf.c ++++ b/src/conf/domain_conf.c +@@ -13486,6 +13486,7 @@ virDomainSEVDefParseXML(virDomainSEVDef *def, + + def->dh_cert = virXPathString("string(./dhCert)", ctxt); + def->session = virXPathString("string(./session)", ctxt); ++ def->user_id = virXPathString("string(./userid)", ctxt); + + return 0; + } +@@ -26528,6 +26529,9 @@ virDomainSecDefFormat(virBuffer *buf, virDomainSecDef *sec) + if (sev->session) + virBufferEscapeString(&childBuf, "%s\n", sev->session); + ++ if (sev->user_id) ++ virBufferEscapeString(&childBuf, "%s\n", sev->user_id); ++ + break; + } + +diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h +index ed07859..6681eb3 100644 +--- a/src/conf/domain_conf.h ++++ b/src/conf/domain_conf.h +@@ -2860,6 +2860,7 @@ struct _virDomainSEVDef { + bool haveReducedPhysBits; + unsigned int reduced_phys_bits; + virTristateBool kernel_hashes; ++ char *user_id; + }; + + struct _virDomainSecDef { +diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c +index 83119e8..2bfec4f 100644 +--- a/src/qemu/qemu_capabilities.c ++++ b/src/qemu/qemu_capabilities.c +@@ -4854,6 +4854,7 @@ virQEMUCapsFormatSEVInfo(virQEMUCaps *qemuCaps, virBuffer *buf) + virBufferAsprintf(buf, "%u\n", sev->cbitpos); + virBufferAsprintf(buf, "%u\n", + sev->reduced_phys_bits); ++ virBufferEscapeString(buf, "%s\n", sev->user_id); + virBufferEscapeString(buf, "%s\n", sev->pdh); + virBufferEscapeString(buf, "%s\n", + sev->cert_chain); +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c +index d54149e..52820f0 100644 +--- a/src/qemu/qemu_command.c ++++ b/src/qemu/qemu_command.c +@@ -9671,8 +9671,9 @@ qemuBuildSEVCommandLine(virDomainObj *vm, virCommand *cmd, + g_autofree char *dhpath = NULL; + g_autofree char *sessionpath = NULL; + +- VIR_DEBUG("policy=0x%x cbitpos=%d reduced_phys_bits=%d", +- sev->policy, sev->cbitpos, sev->reduced_phys_bits); ++ VIR_DEBUG("policy=0x%x cbitpos=%d reduced_phys_bits=%d user_id=%s", ++ sev->policy, sev->cbitpos, sev->reduced_phys_bits, ++ sev->user_id ? : "(nil)"); + + if (sev->dh_cert) + dhpath = g_strdup_printf("%s/dh_cert.base64", priv->libDir); +@@ -9684,6 +9685,7 @@ qemuBuildSEVCommandLine(virDomainObj *vm, virCommand *cmd, + "u:cbitpos", sev->cbitpos, + "u:reduced-phys-bits", sev->reduced_phys_bits, + "u:policy", sev->policy, ++ "S:user-id", sev->user_id, + "S:dh-cert-file", dhpath, + "S:session-file", sessionpath, + "T:kernel-hashes", sev->kernel_hashes, +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index d00d2a2..66c8e1d 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -18968,6 +18968,10 @@ qemuGetSEVInfoToParams(virQEMUCaps *qemuCaps, + sev->max_es_guests) < 0) + goto cleanup; + ++ if (virTypedParamsAddString(&sevParams, &n, &maxpar, ++ VIR_NODE_SEV_USER_ID, sev->user_id) < 0) ++ goto cleanup; ++ + *params = g_steal_pointer(&sevParams); + *nparams = n; + return 0; +-- +2.17.1 + diff --git a/libvirt.spec b/libvirt.spec index 309a6fbd3f8988637e29e11c5cba542cd2670a96..01fb9b2231194d9ccf91240929c5ad44688d99f9 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -1,4 +1,4 @@ -%define anolis_release 2 +%define anolis_release 3 %define arches_qemu_kvm x86_64 aarch64 loongarch64 @@ -165,6 +165,7 @@ Patch0000: Add-loongarch-cpu-support.patch Patch0001: Support-for-loongarch64-in-the-QEMU-driver.patch Patch0002: Implement-the-method-of-getting-host-info-for-loonga.patch Patch0003: Add-test-script-for-loongarch.patch +Patch0004: conf-qemu-add-libvirt-support-reuse-id-for-hygon-CSV.patch Requires: libvirt-daemon = %{version}-%{release} Requires: libvirt-daemon-config-network = %{version}-%{release} Requires: libvirt-daemon-config-nwfilter = %{version}-%{release} @@ -2143,6 +2144,9 @@ exit 0 %changelog +* Mon Apr 15 2024 Xin Jiang - 9.10.0-3 +- add libvirt support reuse id for hygon CSV + * Mon Apr 01 2024 lixianglai - 9.10.0-2 - loongarch readapts to libvirt.