From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Xen-devel <xen-devel@lists.xen.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
Jan Beulich <JBeulich@suse.com>,
Sergey Dyasli <sergey.dyasli@citrix.com>
Subject: [PATCH for-4.7/4.8] x86: Fix "x86: further CPUID handling adjustments"
Date: Tue, 15 May 2018 18:54:40 +0100 [thread overview]
Message-ID: <1526406880-23398-1-git-send-email-andrew.cooper3@citrix.com> (raw)
c/s f9616884e (a backport of c/s 0d703a701 "x86/feature: Definitions for
Indirect Branch Controls") missed a CPUID adjustment when calculating the raw
featureset. This impacts host administrator diagnostics.
Signed-off-by: Sergey Dyasli <sergey.dyasli@citrix.com>
c/s 62b187969 "x86: further CPUID handling adjustments" make some adjustments.
However, it breaks levelling of guests, making it impossible for the toolstack
to hide STIBP or IBPB from guests on hardware with up-to-date microcode.
Also, I don't see any link between the change and the commit message. With
the microcode installed, STIBP and IBPB are already visible to dom0.
The only required adjustment is to force STIBP == IBRSB, which must be done
after applying the pv_featureset[] mask to the toolstack's choice of value.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
---
xen/arch/x86/cpuid.c | 2 +-
xen/arch/x86/hvm/hvm.c | 8 +++++---
xen/arch/x86/traps.c | 8 +++++---
3 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/xen/arch/x86/cpuid.c b/xen/arch/x86/cpuid.c
index 451952c..fffcecd 100644
--- a/xen/arch/x86/cpuid.c
+++ b/xen/arch/x86/cpuid.c
@@ -113,7 +113,7 @@ static void __init calculate_raw_featureset(void)
cpuid_count(0x7, 0, &tmp,
&raw_featureset[FEATURESET_7b0],
&raw_featureset[FEATURESET_7c0],
- &tmp);
+ &raw_featureset[FEATURESET_7d0]);
if ( max >= 0xd )
cpuid_count(0xd, 1,
&raw_featureset[FEATURESET_Da1],
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index ff1c6fa..0a1d4a9 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -3496,10 +3496,13 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, unsigned int *ebx,
special_features[FEATURESET_7b0]);
*ecx &= hvm_featureset[FEATURESET_7c0];
-
- *edx |= cpufeat_mask(X86_FEATURE_STIBP);
*edx &= hvm_featureset[FEATURESET_7d0];
+ /* Force STIBP equal to IBRSB */
+ *edx &= ~cpufeat_mask(X86_FEATURE_STIBP);
+ if ( *edx & cpufeat_mask(X86_FEATURE_IBRSB) )
+ *edx |= cpufeat_mask(X86_FEATURE_STIBP);
+
/* Don't expose HAP-only features to non-hap guests. */
if ( !hap_enabled(d) )
{
@@ -3657,7 +3660,6 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, unsigned int *ebx,
hvm_cpuid(0x80000001, NULL, NULL, NULL, &_edx);
*eax |= (_edx & cpufeat_mask(X86_FEATURE_LM) ? vaddr_bits : 32) << 8;
- *ebx |= cpufeat_mask(X86_FEATURE_IBPB);
*ebx &= hvm_featureset[FEATURESET_e8b];
break;
}
diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index 0f34b21..da26749 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -1088,10 +1088,13 @@ void pv_cpuid(struct cpu_user_regs *regs)
special_features[FEATURESET_7b0]);
c &= pv_featureset[FEATURESET_7c0];
-
- d |= cpufeat_mask(X86_FEATURE_STIBP);
d &= pv_featureset[FEATURESET_7d0];
+ /* Force STIBP equal to IBRSB */
+ d &= ~cpufeat_mask(X86_FEATURE_STIBP);
+ if ( d & cpufeat_mask(X86_FEATURE_IBRSB) )
+ d |= cpufeat_mask(X86_FEATURE_STIBP);
+
if ( !is_pvh_domain(currd) )
{
/*
@@ -1188,7 +1191,6 @@ void pv_cpuid(struct cpu_user_regs *regs)
case 0x80000008:
a = paddr_bits | (vaddr_bits << 8);
- b |= cpufeat_mask(X86_FEATURE_IBPB);
b &= pv_featureset[FEATURESET_e8b];
break;
--
2.1.4
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next reply other threads:[~2018-05-15 17:54 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-15 17:54 Andrew Cooper [this message]
2018-05-16 8:14 ` [PATCH for-4.7/4.8] x86: Fix "x86: further CPUID handling adjustments" Jan Beulich
2018-05-16 17:48 ` Andrew Cooper
2018-05-16 17:27 ` [PATCH v2 " Andrew Cooper
2018-05-17 8:40 ` Jan Beulich
2018-05-17 12:23 ` Jan Beulich
2018-05-18 12:21 ` Andrew Cooper
2018-05-18 12:37 ` Jan Beulich
2018-05-18 13:23 ` Andrew Cooper
2018-05-18 14:10 ` Jan Beulich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1526406880-23398-1-git-send-email-andrew.cooper3@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=JBeulich@suse.com \
--cc=sergey.dyasli@citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).