From nobody Sun May 19 22:21:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1714147773; cv=none; d=zohomail.com; s=zohoarc; b=CrBiMxDfA+nTcBOhD6fqgNjk0fgau4nfJZbGpaSFJPIlm3c59Trdrzo4W2F5vzswXZfVFgUuv0c/oX5+pOSrVla6ycqs9d+VUaif9gmdS9Mci++mnZM5uE5r07b4m3SkNMwXL3pMp36yKBlwZWjs6zV1OTcxg7zJa43k1wznMLE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1714147773; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gD5q9PEj+9Tsia93/15fwjsbfZRGM0kGz/xaTFxAsYg=; b=QdlzgfZ4TNggq7Bl1ENnQj+eSH5fOb36PIdI4kG3+FQkcC8QAToCxLG0r8xf2ALQUMRZhL1FZtsLfU4OBQ260Y9d06bQlDp+jI4hPp6NscE0jqqwgKj+Sx2+qASFZ7Efra1WvJlXcVcvbDoADu6fUwFPXnosRtf6awUEiJUr6vw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1714147773357258.1312423780407; Fri, 26 Apr 2024 09:09:33 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.712965.1113887 (Exim 4.92) (envelope-from ) id 1s0O8G-0003ml-Cy; Fri, 26 Apr 2024 16:09:04 +0000 Received: by outflank-mailman (output) from mailman id 712965.1113887; Fri, 26 Apr 2024 16:09:04 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1s0O8G-0003me-8l; Fri, 26 Apr 2024 16:09:04 +0000 Received: by outflank-mailman (input) for mailman id 712965; Fri, 26 Apr 2024 16:09:03 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1s0O8F-0003mY-C6 for xen-devel@lists.xenproject.org; Fri, 26 Apr 2024 16:09:03 +0000 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [2a00:1450:4864:20::62b]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4c1c163e-03e7-11ef-909a-e314d9c70b13; Fri, 26 Apr 2024 18:09:02 +0200 (CEST) Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-a587831809eso276056666b.1 for ; Fri, 26 Apr 2024 09:09:02 -0700 (PDT) Received: from andrewcoop.citrite.net (default-46-102-197-194.interdsl.co.uk. [46.102.197.194]) by smtp.gmail.com with ESMTPSA id bu6-20020a170906a14600b00a57c75871d8sm5315763ejb.106.2024.04.26.09.09.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Apr 2024 09:09:00 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 4c1c163e-03e7-11ef-909a-e314d9c70b13 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1714147741; x=1714752541; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=gD5q9PEj+9Tsia93/15fwjsbfZRGM0kGz/xaTFxAsYg=; b=Dy0F0kMeKEZHB+6QDnOGf5SieAiaHDC/yk4X9RoJe0cLYyBcJd6IcNPTSPpu/gZB1I AZUJTapuWUbsTRooVd2TNjpsCBVf/IP8sKx5jiYIQx5m5rbyG83DwjVc/y/LNNdXaDg+ FSoCKAeMDmWfQoA9qRO5vWj6vk9mF4nkFqI1k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714147741; x=1714752541; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=gD5q9PEj+9Tsia93/15fwjsbfZRGM0kGz/xaTFxAsYg=; b=P3AIDvGKlmRor6bIw5kkzwnvi2ACaxC/u8KmUJFMo0iYnSB6CpqevxTbF/ghYbJrqg Ya8L1ro9BXw0T5/9qtIJz0pmMC3NcCxCfDo5rq1SSvrLRL01bxl8Fk5khTQgo5jPPODP 2sS6PU/H59Kzjj3+llIqCU+/VzYrHJs/xKo/T88B6leNIRssw7yOJs+5cb/2o+nWH0km v+HiMjD89+qDLGrTIQ4Nj4lzbcdLr+kujxu/uRHD3sf5iOGttGhsnRVAbBRh418gnHmz vVf67dCCP+SRt2LYSNZvhQD4mR2m2X5xh6iSwxzjzGKtWdF9lV9t5Gxw1xoawb4kBgRG TDSQ== X-Gm-Message-State: AOJu0YxXUmxN104A8CZsngxbjwMEMmfpG22H5CxokTCTTzOJN5oZPtEu pAJHllSPIYw9wCMni5nDII/f5wA6/0Ild4QYH9wFEfA7Pt4u5+ab7LYvLONzG0KyiAp4cVNieaa u X-Google-Smtp-Source: AGHT+IH4X7bHy9GJ7y+RIcXHPc4Tqd+jVZ74Q9KvLt4n/XbbkISUkQAB32y4bTMCggnb3rYLybBNYA== X-Received: by 2002:a17:906:3811:b0:a55:99f4:549f with SMTP id v17-20020a170906381100b00a5599f4549fmr2335713ejc.48.1714147741396; Fri, 26 Apr 2024 09:09:01 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH] x86/cpu-policy: Annotate the accumulated features Date: Fri, 26 Apr 2024 17:08:59 +0100 Message-Id: <20240426160859.565438-1-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1714147775508100001 Some features need accumulating rather than intersecting to make migration safe. Introduce the new '|' attribute for this purpose. Right now, it's only used by the Xapi toolstack, but it will be used by xl/libxl when the full policy-object work is complete, and until then it's still a useful hint for hand-crafted cpuid=3D lines in vm.cfg files. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/include/public/arch-x86/cpufeatureset.h | 15 ++++++++++----- xen/tools/gen-cpuid.py | 7 +++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/xen/include/public/arch-x86/cpufeatureset.h b/xen/include/publ= ic/arch-x86/cpufeatureset.h index 53f13dec31f7..6627453e3985 100644 --- a/xen/include/public/arch-x86/cpufeatureset.h +++ b/xen/include/public/arch-x86/cpufeatureset.h @@ -72,6 +72,11 @@ enum { * 'H' =3D HVM HAP guests (not PV or HVM Shadow guests). * Upper case =3D> Available by default * Lower case =3D> Can be opted-in to, but not available by default. + * + * Migration: '|' + * This bit should be visible to a guest if any anywhere it might run has + * the bit set. i.e. it needs accumulating across the migration pool, + * rather than intersecting. */ =20 /* Intel-defined CPU features, CPUID level 0x00000001.edx, word 0 */ @@ -248,7 +253,7 @@ XEN_CPUFEATURE(IBRS_ALWAYS, 8*32+16) /*S IBRS prefer= red always on */ XEN_CPUFEATURE(STIBP_ALWAYS, 8*32+17) /*S STIBP preferred always on */ XEN_CPUFEATURE(IBRS_FAST, 8*32+18) /*S IBRS preferred over software o= ptions */ XEN_CPUFEATURE(IBRS_SAME_MODE, 8*32+19) /*S IBRS provides same-mode prote= ction */ -XEN_CPUFEATURE(NO_LMSL, 8*32+20) /*S EFER.LMSLE no longer supported= . */ +XEN_CPUFEATURE(NO_LMSL, 8*32+20) /*S| EFER.LMSLE no longer supported= . */ XEN_CPUFEATURE(AMD_PPIN, 8*32+23) /* Protected Processor Inventory = Number */ XEN_CPUFEATURE(AMD_SSBD, 8*32+24) /*S MSR_SPEC_CTRL.SSBD available */ XEN_CPUFEATURE(VIRT_SSBD, 8*32+25) /*! MSR_VIRT_SPEC_CTRL.SSBD */ @@ -263,7 +268,7 @@ XEN_CPUFEATURE(AVX512_4FMAPS, 9*32+ 3) /*A AVX512 Mult= iply Accumulation Single XEN_CPUFEATURE(FSRM, 9*32+ 4) /*A Fast Short REP MOVS */ XEN_CPUFEATURE(AVX512_VP2INTERSECT, 9*32+8) /*a VP2INTERSECT{D,Q} insns */ XEN_CPUFEATURE(SRBDS_CTRL, 9*32+ 9) /* MSR_MCU_OPT_CTRL and RNGDS_MIT= G_DIS. */ -XEN_CPUFEATURE(MD_CLEAR, 9*32+10) /*!A VERW clears microarchitectural= buffers */ +XEN_CPUFEATURE(MD_CLEAR, 9*32+10) /*!A| VERW clears microarchitectura= l buffers */ XEN_CPUFEATURE(RTM_ALWAYS_ABORT, 9*32+11) /*! RTM disabled (but XBEGIN won= t fault) */ XEN_CPUFEATURE(TSX_FORCE_ABORT, 9*32+13) /* MSR_TSX_FORCE_ABORT.RTM_ABORT = */ XEN_CPUFEATURE(SERIALIZE, 9*32+14) /*A SERIALIZE insn */ @@ -292,7 +297,7 @@ XEN_CPUFEATURE(AVX_IFMA, 10*32+23) /*A AVX-IFMA In= structions */ =20 /* AMD-defined CPU features, CPUID level 0x80000021.eax, word 11 */ XEN_CPUFEATURE(NO_NEST_BP, 11*32+ 0) /*A No Nested Data Breakpoin= ts */ -XEN_CPUFEATURE(FS_GS_NS, 11*32+ 1) /*S FS/GS base MSRs non-seri= alising */ +XEN_CPUFEATURE(FS_GS_NS, 11*32+ 1) /*S| FS/GS base MSRs non-seri= alising */ XEN_CPUFEATURE(LFENCE_DISPATCH, 11*32+ 2) /*A LFENCE always serializin= g */ XEN_CPUFEATURE(NSCB, 11*32+ 6) /*A Null Selector Clears Bas= e (and limit too) */ XEN_CPUFEATURE(AUTO_IBRS, 11*32+ 8) /*S Automatic IBRS */ @@ -343,7 +348,7 @@ XEN_CPUFEATURE(DOITM, 16*32+12) /* Data = Operand Invariant Timing XEN_CPUFEATURE(SBDR_SSDP_NO, 16*32+13) /*A No Shared Buffer Data Re= ad or Sideband Stale Data Propagation */ XEN_CPUFEATURE(FBSDP_NO, 16*32+14) /*A No Fill Buffer Stale Dat= a Propagation */ XEN_CPUFEATURE(PSDP_NO, 16*32+15) /*A No Primary Stale Data Pr= opagation */ -XEN_CPUFEATURE(FB_CLEAR, 16*32+17) /*!A Fill Buffers cleared by = VERW */ +XEN_CPUFEATURE(FB_CLEAR, 16*32+17) /*!A| Fill Buffers cleared by= VERW */ XEN_CPUFEATURE(FB_CLEAR_CTRL, 16*32+18) /* MSR_OPT_CPU_CTRL.FB_CLEA= R_DIS */ XEN_CPUFEATURE(RRSBA, 16*32+19) /*! Restricted RSB Alternati= ve */ XEN_CPUFEATURE(BHI_NO, 16*32+20) /*A No Branch History Inject= ion */ @@ -353,7 +358,7 @@ XEN_CPUFEATURE(PBRSB_NO, 16*32+24) /*A No Po= st-Barrier RSB prediction XEN_CPUFEATURE(GDS_CTRL, 16*32+25) /* MCU_OPT_CTRL.GDS_MIT_{DI= S,LOCK} */ XEN_CPUFEATURE(GDS_NO, 16*32+26) /*A No Gather Data Sampling = */ XEN_CPUFEATURE(RFDS_NO, 16*32+27) /*A No Register File Data Sa= mpling */ -XEN_CPUFEATURE(RFDS_CLEAR, 16*32+28) /*!A Register File(s) cleared= by VERW */ +XEN_CPUFEATURE(RFDS_CLEAR, 16*32+28) /*!A| Register File(s) cleare= d by VERW */ =20 /* Intel-defined CPU features, MSR_ARCH_CAPS 0x10a.edx, word 17 */ =20 diff --git a/xen/tools/gen-cpuid.py b/xen/tools/gen-cpuid.py index bf3f9ec01e6e..1fb76f664529 100755 --- a/xen/tools/gen-cpuid.py +++ b/xen/tools/gen-cpuid.py @@ -21,7 +21,7 @@ class State(object): self.names =3D {} # Value =3D> Name mapping self.values =3D {} # Name =3D> Value mapping self.raw =3D { - '!': set(), + '!': set(), '|': set(), 'A': set(), 'S': set(), 'H': set(), 'a': set(), 's': set(), 'h': set(), } @@ -48,7 +48,7 @@ def parse_definitions(state): feat_regex =3D re.compile( r"^XEN_CPUFEATURE\(([A-Z0-9_]+)," "\s+([\s\d]+\*[\s\d]+\+[\s\d]+)\)" - "\s+/\*([\w!]*) .*$") + "\s+/\*([\w!|]*) .*$") =20 word_regex =3D re.compile( r"^/\* .* word (\d*) \*/$") @@ -415,6 +415,8 @@ def write_results(state): =20 #define INIT_SPECIAL_FEATURES { \\\n%s\n} =20 +#define INIT_SIMPLE_OR { \\\n%s\n} + #define INIT_PV_DEF_FEATURES { \\\n%s\n} =20 #define INIT_PV_MAX_FEATURES { \\\n%s\n} @@ -436,6 +438,7 @@ def write_results(state): next(featureset_to_uint32s(state.common_1d, 1)), format_uint32s(state, state.names.keys(), 4), format_uint32s(state, state.raw['!'], 4), + format_uint32s(state, state.raw['|'], 4), format_uint32s(state, state.pv_def, 4), format_uint32s(state, state.pv_max, 4), format_uint32s(state, state.hvm_shadow_def, 4), base-commit: be5b08dd6ea6ef0f01caf537bdae125fa66a2230 --=20 2.30.2