From nobody Thu Nov 12 15:08:45 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1793042060; cv=none; d=zohomail.com; s=zohoarc; b=LQ4FaTfT4PuBUMns04lI6sxB43T+dEfGJumdaqUpeYMn2zGxH4gYNSdg/fklAEvBADq8Srp6unKfiDbC0PxUKoB5BqvgoYF0S1oe2bA44S7IwF+kOll7jKgB2Kn4wGX95M1zEMw0RS4n5OLHjQohuSb13bZTDtZsyYJfeoEY/Xc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1793042060; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:Subject:Subject:To:To:Message-Id; bh=nQrg/iQ0kOVDNrsbSbUk24GD6hFGWEqyLm3kulAMgIo=; b=FwAQXZMHoa+ILH0G9qhyLCP7uMmNif1pE60vseTo9KH79t+qajTTTQHp491pCdzBzjcDfq6TxIeJFHnfAea4813NMM8nZt6qLEl6TMy5qSZ86k6IsI3bkl2WxaaEsR2CYJHJnNsNUcwHwHYyjtY0JeqqBp2aunNKM5MYbClg5qQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1793042060840603.3517427817204; Mon, 26 Oct 2026 12:14:20 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id AFAB241A6D; Mon, 26 Oct 2026 15:14:19 -0400 (EDT) Received: from [172.19.199.19] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id C2C4341CD7; Mon, 26 Oct 2026 15:08:39 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 2BB5F3F320; Mon, 26 Oct 2026 15:07:01 -0400 (EDT) Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 5D75141A1A for ; Mon, 26 Oct 2026 15:06:59 -0400 (EDT) Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-48dfaa3fa12so187266f8f.0 for ; Mon, 26 Oct 2026 12:06:59 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:1a6:7f7f:f573:ba9e]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48e3ebcb99esm17365150f8f.23.2026.10.26.12.06.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Oct 2026 12:06:57 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1793041618; x=1793646418; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=nQrg/iQ0kOVDNrsbSbUk24GD6hFGWEqyLm3kulAMgIo=; b=rHYUcNL9tVh9LYrNsfIyz2dU7pPl+btnpjAGGh/S5th7bRaSArzQPiD3RBTzDROKDd XIjL07bXfruBGM6wnfgVGuub+xNSEUPVTfRPFmkPUh1uEQm24Tok2EBfadJFVAF1RSlh PGRSY1cGAGr3lwIPuiXy2M5g+j1Zfmv2KsSJ5HgnWiOYfAjM1lKhEKvTpOxhc5ZDIoPm cq86aSDJDNBDFGd4O+1Y+a8vsG1M9m26nuvrlyuKpKrOUog8nEVmDLl4DgrPjDV1SnPz iuul9vnxTMatJU6bvNlnTAEx1Ns4WQ4PGDA59TzVwH+ZJkO7oLWqUloModOOrKCkIqmn vK8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793041618; x=1793646418; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=nQrg/iQ0kOVDNrsbSbUk24GD6hFGWEqyLm3kulAMgIo=; b=Rij0sWZVRS7BW2DOrmHzwDbWTbwj/UbK8CLiKXFWt/XlTEF/WPpiefT/nKI5p/LyCu Tkt64ydtuxpA9SsppsiIOZBoMJcPpDiMsHeAGFUEO17j+sFwyOZjBF7JvRM04o3zORRI pKJ540+eDy5RqAjb9mVRxmWfwFw3iyKWsrLpz6pEUr7obRSXSYm9cxHSppyN29rgYGDU txKstO6VErgO05Ntwyav9Xf77OToDo0894JJtlk4W7Y6TuHm8w5AgocTWzIYWll8K29t +Nmbe35LITAVsVGmBt/02U6ouY/LvKM149lImTD2ZMMrQ1bhqal1gy1BELq84PBNUym4 wozw== X-Gm-Message-State: AFq9FYI+3bpmGKkXIsJex/ecC0C9WeORA/ytQ4zFOmJUts1rJ9sHiv0x VoLu4ESfJHlVIhAG+YEu6A4u8Y4rqAdFOwbgrbNq4fwR7EzobMV8ZPFFfhNsW3OVvF0dHqe5iED tzq2+ X-Gm-Gg: AYBFou3ZZpnGSiLkoB6tBP9H+N+C5xMmtzNkBYLd0syveAba1ubii6HikvZdUCHqkSB tT/hFzV8D13T9ON9Pgs7cz4rgNiNPppjtlaoOQMcLRbnzHtnvY5FlA2v91btk78laiaUZIAUzAA Zm520jxumQQs3voGtOF21wsEHzrFeODeQmS6P9g/Rzj40OJxWUffHh48PSk1itgXTHOflhmLrEB KzUqTzya901QRzTX6SCVhZ+Vg0CS9pvYP5lhRXqaM8mkJbgvz6qp1M1zc7ifKDTmOZs/hjOfwjg mLkFLyeJ5IZqtHiHG3EQ8SayVLW1byTFYPRuBd8gDn2x29N97RRe57Jk/lj2pFAB+Nmpo3ThyN2 /C9F9n0FXfAhhHaAVkv6q7C+Fgd8Nks9koWe15KMDzuGlN/LHRaiawtGk4wdRYLfs8QjJNXf4G5 WnKCfT1HPMdUpu0wJsy0EeRfBxHSDr7cebKw0kuXFKmqgMa7NSsntVLxP7JFlAF6b3krSrOoGvX k0Ju7dvcFs/DvU7FZzbgBoAYJbWPpTbXtKK/GATBCsK+h28Jeo= X-Received: by 2002:a05:600c:a201:b0:4a1:e04f:15c7 with SMTP id 5b1f17b1804b1-4a7c3856e3dmr8432105e9.5.1793041617698; Mon, 26 Oct 2026 12:06:57 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH] qemu: let incoming AMD guests drop spec-ctrl instead of failing Date: Mon, 26 Oct 2026 20:06:54 +0100 Message-ID: <20261026190654.791689-1-den@openvz.org> X-Mailer: git-send-email 2.53.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-MailFrom: den@openvz.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation Message-ID-Hash: EE7DTIUI3USA7SVAOXOGLUDOI5IWG2TJ X-Message-ID-Hash: EE7DTIUI3USA7SVAOXOGLUDOI5IWG2TJ X-Mailman-Approved-At: Mon, 26 Oct 2026 19:08:20 +0000 CC: den@openvz.org X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: "Denis V. Lunev via Devel" Reply-To: "Denis V. Lunev" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1793042064354158500 Content-Type: text/plain; charset="utf-8" From: Denis V. Lunev Since Linux kernel commit de572491a975 ("KVM: x86: AMD's IBPB is not equivalent to Intel's IBPB") KVM offers spec-ctrl on AMD hosts only when the CPU enumerates IBPB_RET, which Zen 1-3 do not. A host-model guest started on such a CPU under an older kernel has spec-ctrl in its live definition. On a destination with the newer kernel QEMU filters the feature out and the incoming migration fails: guest CPU doesn't match specification: missing features: spec-ctrl Restoring a save image or reverting a snapshot fails the same way, so the guest cannot be moved to the new kernel without a restart. Dropping the bit in libvirt costs the guest nothing beyond what KVM already withholds. KVM grants PRED_CMD for spec-ctrl or ibpb and SPEC_CTRL for spec-ctrl or any of ibrs, amd-stibp and amd-ssbd (kernel commit 39485ed95d6b), and checks the values written to SPEC_CTRL against the host, not the guest CPUID (kernel commit 841c2be09fe4). Both predate de572491a975. Since kernel commit e592ec657d84 KVM also ignores guest CPUID bits it does not support, so a host without IBPB_RET treats the guest as lacking spec-ctrl even if the bit stayed. QEMU drops the bit either way; libvirt only decides whether the guest survives. When an existing domain is started (incoming migration, restore, snapshot revert) and the hypervisor dropped a required spec-ctrl while providing ibpb and one of ibrs, amd-stibp and amd-ssbd, disable spec-ctrl in the live definition and log a warning. spec-ctrl is also removed from the features QEMU reports as filtered, because check=3D'full' fails on any filtered feature whatever the definition says. Fresh starts and any other missing or extra feature still fail with check=3D'full'. Signed-off-by: Denis V. Lunev --- RHEL-149512 reports the same failure. Linux commit: https://git.kernel.org/torvalds/c/de572491a975 KVM thread: https://lore.kernel.org/all/20241011214353.1625057-5-jmattson= @google.com/ RHEL bug: https://redhat.atlassian.net/browse/RHEL-149512 src/cpu/cpu_x86.c | 55 ++++++++++++ src/cpu/cpu_x86.h | 4 + src/libvirt_private.syms | 1 + src/qemu/qemu_process.c | 15 +++- tests/cputest.c | 87 +++++++++++++++++++ ...PYC-7713-64-Core-no-spec-ctrl-disabled.xml | 4 + ...EPYC-7713-64-Core-no-spec-ctrl-enabled.xml | 11 +++ ...3-64-Core-no-spec-ctrl-no-ibpb-enabled.xml | 11 +++ 8 files changed, 186 insertions(+), 2 deletions(-) create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spe= c-ctrl-disabled.xml create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spe= c-ctrl-enabled.xml create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spe= c-ctrl-no-ibpb-enabled.xml diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 18c5756ef9..b986720224 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -3269,6 +3269,61 @@ virCPUx86UpdateLive(virCPUDef *cpu, } =20 =20 +/* + * Since kernel commit de572491a975 KVM no longer offers spec-ctrl on AMD + * hosts without IBPB_RET, while a guest started before still requires it. + * + * Returns 1 if spec-ctrl was disabled in @cpu, 0 if not, -1 on error. + */ +int +virCPUx86UpdateLiveSpecCtrl(virCPUDef *cpu, + const virCPUData *dataEnabled, + virCPUData *dataDisabled) +{ + const char *specCtrlMSR[] =3D { "ibrs", "amd-stibp", "amd-ssbd" }; + virCPUx86Map *map; + virCPUx86Feature *specCtrl; + virCPUFeatureDef *feature; + const virCPUx86Data *enabled; + size_t i; + int rc; + + if (!dataEnabled) + return 0; + + if (!(feature =3D virCPUDefFindFeature(cpu, "spec-ctrl")) || + feature->policy !=3D VIR_CPU_FEATURE_REQUIRE) + return 0; + + if (!(map =3D virCPUx86GetMap())) + return -1; + + enabled =3D &dataEnabled->data.x86; + + if ((rc =3D x86FeatureInData("spec-ctrl", enabled, map)) !=3D 0) + return rc < 0 ? -1 : 0; + + if ((rc =3D x86FeatureInData("ibpb", enabled, map)) <=3D 0) + return rc; + + for (i =3D 0; i < G_N_ELEMENTS(specCtrlMSR); i++) { + if ((rc =3D x86FeatureInData(specCtrlMSR[i], enabled, map)) < 0) + return -1; + if (rc =3D=3D 1) + break; + } + + if (i =3D=3D G_N_ELEMENTS(specCtrlMSR)) + return 0; + + virCPUDefUpdateFeature(cpu, "spec-ctrl", VIR_CPU_FEATURE_DISABLE); + if (dataDisabled && (specCtrl =3D x86FeatureFind(map, "spec-ctrl"))) + x86DataSubtract(&dataDisabled->data.x86, &specCtrl->data); + + return 1; +} + + static int virCPUx86GetModels(char ***models) { diff --git a/src/cpu/cpu_x86.h b/src/cpu/cpu_x86.h index bbc2a16447..0b05e5c695 100644 --- a/src/cpu/cpu_x86.h +++ b/src/cpu/cpu_x86.h @@ -55,3 +55,7 @@ bool virCPUx86FeatureFilterDropMSR(const char *name, =20 int virCPUx86GetAddedFeatures(const char *modelName, const char * const **features); + +int virCPUx86UpdateLiveSpecCtrl(virCPUDef *cpu, + const virCPUData *dataEnabled, + virCPUData *dataDisabled); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 798d2d28c8..6b2eb3eef4 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1608,6 +1608,7 @@ virCPUx86DataSetVendor; virCPUx86FeatureFilterDropMSR; virCPUx86FeatureFilterSelectMSR; virCPUx86GetAddedFeatures; +virCPUx86UpdateLiveSpecCtrl; =20 # datatypes.h virConnectClass; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 3f1960f314..9eee738334 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4799,10 +4799,12 @@ qemuProcessUpdateLiveGuestCPU(virDomainObj *vm, =20 static int qemuProcessUpdateAndVerifyCPU(virDomainObj *vm, - virDomainAsyncJob asyncJob) + virDomainAsyncJob asyncJob, + unsigned int flags) { g_autoptr(virCPUData) cpu =3D NULL; g_autoptr(virCPUData) disabled =3D NULL; + int rc; =20 if (qemuProcessFetchGuestCPU(vm, asyncJob, &cpu, &disabled) < 0) return -1; @@ -4810,6 +4812,15 @@ qemuProcessUpdateAndVerifyCPU(virDomainObj *vm, if (qemuProcessVerifyCPU(vm, cpu) < 0) return -1; =20 + if (!(flags & VIR_QEMU_PROCESS_START_NEW) && + ARCH_IS_X86(vm->def->os.arch) && vm->def->cpu) { + if ((rc =3D virCPUx86UpdateLiveSpecCtrl(vm->def->cpu, cpu, disable= d)) < 0) + return -1; + if (rc > 0) + VIR_WARN("Hypervisor no longer provides spec-ctrl, disabling i= t in the live CPU of domain %s", + vm->def->name); + } + if (qemuProcessUpdateLiveGuestCPU(vm, cpu, disabled) < 0) return -1; =20 @@ -8639,7 +8650,7 @@ qemuProcessLaunch(virConnectPtr conn, } =20 VIR_DEBUG("Verifying and updating provided guest CPU"); - if (qemuProcessUpdateAndVerifyCPU(vm, asyncJob) < 0) + if (qemuProcessUpdateAndVerifyCPU(vm, asyncJob, flags) < 0) goto cleanup; =20 VIR_DEBUG("Detecting IOThread PIDs"); diff --git a/tests/cputest.c b/tests/cputest.c index e29c81cb8e..38ed45cfdb 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -905,6 +905,91 @@ cpuTestUpdateLive(const void *arg) } =20 =20 +static virCPUData * +cpuTestLoadCPUData(const struct data *data, + const char *suffix) +{ + g_autofree char *file =3D NULL; + g_autofree char *xml =3D NULL; + + file =3D g_strdup_printf("%s/cputestdata/%s-cpuid-%s-%s.xml", + abs_srcdir, virArchToString(data->arch), + data->host, suffix); + virTestCaseMarkUsed(data->existingTestCases, file); + + if (virTestLoadFile(file, &xml) < 0) + return NULL; + + return virCPUDataParse(xml); +} + + +static int +cpuTestUpdateLiveSpecCtrl(const void *arg) +{ + const struct data *data =3D arg; + g_autofree char *cpuFile =3D NULL; + g_autoptr(virCPUDef) cpu =3D NULL; + g_autoptr(virCPUDef) fresh =3D NULL; + g_autoptr(virCPUData) srcEnabled =3D NULL; + g_autoptr(virCPUData) srcDisabled =3D NULL; + g_autoptr(virCPUData) enabled =3D NULL; + g_autoptr(virCPUData) disabled =3D NULL; + g_autoptr(virCPUData) noIbpb =3D NULL; + virCPUFeatureDef *feature; + + cpuFile =3D g_strdup_printf("cpuid-%s-json", data->host); + if (!(cpu =3D cpuTestLoadXML(data->arch, cpuFile, data->existingTestCa= ses))) + return -1; + + if (!(srcEnabled =3D cpuTestLoadCPUData(data, "enabled")) || + !(srcDisabled =3D cpuTestLoadCPUData(data, "disabled")) || + !(enabled =3D cpuTestLoadCPUData(data, "no-spec-ctrl-enabled")) || + !(disabled =3D cpuTestLoadCPUData(data, "no-spec-ctrl-disabled")) = || + !(noIbpb =3D cpuTestLoadCPUData(data, "no-spec-ctrl-no-ibpb-enable= d"))) + return -1; + + /* the live CPU of a guest started where KVM still offered spec-ctrl */ + if (virCPUUpdateLive(data->arch, cpu, srcEnabled, srcDisabled) < 0) + return -1; + cpu->check =3D VIR_CPU_CHECK_FULL; + + fresh =3D virCPUDefCopy(cpu); + + if (virCPUx86UpdateLiveSpecCtrl(fresh, srcEnabled, srcDisabled) !=3D 0= ) { + VIR_TEST_VERBOSE("spec-ctrl touched although the hypervisor provid= es it"); + return -1; + } + + if (virCPUx86UpdateLiveSpecCtrl(fresh, noIbpb, disabled) !=3D 0) { + VIR_TEST_VERBOSE("spec-ctrl disabled although ibpb is missing"); + return -1; + } + + if (virCPUUpdateLive(data->arch, fresh, enabled, disabled) =3D=3D 0) { + VIR_TEST_VERBOSE("missing spec-ctrl passed check=3D'full'"); + return -1; + } + virResetLastError(); + + if (virCPUx86UpdateLiveSpecCtrl(cpu, enabled, disabled) !=3D 1) { + VIR_TEST_VERBOSE("spec-ctrl was not disabled"); + return -1; + } + + if (virCPUUpdateLive(data->arch, cpu, enabled, disabled) < 0) + return -1; + + if (!(feature =3D virCPUDefFindFeature(cpu, "spec-ctrl")) || + feature->policy !=3D VIR_CPU_FEATURE_DISABLE) { + VIR_TEST_VERBOSE("spec-ctrl is not disabled in the live CPU"); + return -1; + } + + return 0; +} + + #if WITH_QEMU static int cpuTestJSONCPUID(const void *arg) @@ -1270,6 +1355,8 @@ mymain(void) DO_TEST_CPUID(VIR_ARCH_X86_64, "EPYC-7601-32-Core-ibpb", JSON_MODELS_R= EQUIRED); DO_TEST_CPUID(VIR_ARCH_X86_64, "EPYC-7502-32-Core", JSON_MODELS); DO_TEST_CPUID(VIR_ARCH_X86_64, "EPYC-7713-64-Core", JSON_MODELS); + DO_TEST(VIR_ARCH_X86_64, cpuTestUpdateLiveSpecCtrl, "EPYC-7713-64-Core= ", + "EPYC-7713-64-Core", NULL, NULL, 0, NULL, 0, 0); DO_TEST_CPUID(VIR_ARCH_X86_64, "EPYC-9334-32-Core", JSON_MODELS); DO_TEST_CPUID(VIR_ARCH_X86_64, "FX-8150", JSON_NONE); DO_TEST_CPUID(VIR_ARCH_X86_64, "Opteron-1352", JSON_NONE); diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spec-ctrl-= disabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spec-ctr= l-disabled.xml new file mode 100644 index 0000000000..d29d62bcad --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spec-ctrl-disable= d.xml @@ -0,0 +1,4 @@ + + + + diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spec-ctrl-= enabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spec-ctrl= -enabled.xml new file mode 100644 index 0000000000..6c7b14cd6f --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spec-ctrl-enabled= .xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spec-ctrl-= no-ibpb-enabled.xml b/tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-s= pec-ctrl-no-ibpb-enabled.xml new file mode 100644 index 0000000000..0662433a08 --- /dev/null +++ b/tests/cputestdata/x86_64-cpuid-EPYC-7713-64-Core-no-spec-ctrl-no-ibpb= -enabled.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + base-commit: 742c1555b7d439ca8edca6297093c74e2c20a913 --=20 2.53.0