From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: Xen-devel <xen-devel@lists.xen.org>
Subject: Re: [PATCH v3 20/28] x86/domctl: Update PV domain cpumasks when setting cpuid policy
Date: Tue, 22 Mar 2016 16:37:09 +0000 [thread overview]
Message-ID: <56F174B5.9050707@citrix.com> (raw)
In-Reply-To: <56F0383A02000078000DEFA5@prv-mh.provo.novell.com>
On 21/03/16 17:06, Jan Beulich wrote:
>>>> On 15.03.16 at 16:35, <andrew.cooper3@citrix.com> wrote:
>> @@ -87,6 +88,129 @@ static void update_domain_cpuid_info(struct domain *d,
>> d->arch.x86_model = (ctl->eax >> 4) & 0xf;
>> if ( d->arch.x86 >= 0x6 )
>> d->arch.x86_model |= (ctl->eax >> 12) & 0xf0;
>> +
>> + if ( is_pv_domain(d) && ((levelling_caps & LCAP_1cd) == LCAP_1cd) )
>> + {
>> + uint64_t mask = cpuidmask_defaults._1cd;
>> + uint32_t ecx = ctl->ecx & pv_featureset[FEATURESET_1c];
>> + uint32_t edx = ctl->edx & pv_featureset[FEATURESET_1d];
>> +
>> + /*
>> + * Must expose hosts HTT value so a guest using native CPU can
> DYM "native CPUID" here?
Yes.
>
>> + * correctly interpret other leaves which cannot be masked.
>> + */
>> + edx &= ~cpufeat_mask(X86_FEATURE_HTT);
>> + if ( cpu_has_htt )
>> + edx |= cpufeat_mask(X86_FEATURE_HTT);
>> +
>> + switch ( boot_cpu_data.x86_vendor )
>> + {
>> + case X86_VENDOR_INTEL:
>> + mask &= ((uint64_t)edx << 32) | ecx;
>> + break;
>> +
>> + case X86_VENDOR_AMD:
>> + mask &= ((uint64_t)ecx << 32) | edx;
>> +
>> + /* Fast-forward bits - Must be set. */
>> + if (ecx & cpufeat_mask(X86_FEATURE_XSAVE))
> Missing blanks inside parens. Also I think the comment should be
> expanded to include the fact that the need to do this here but
> not in the Intel case was empirically(?) determined
It was empirically determined that AMD did have to behave like this.
> - just in case
> something isn't quite right with this on some future hardware,
> and readers (possibly including ourselves) wonder.
Intel and AMD masking MSRs are fundamentally different, and function
differently.
Intel MSRs are documented strictly an & mask, and experimentally, are
applied before OSXSAVE/APIC are fast-forwarded from hardware.
AMD MSRs are documented strictly as an override, with a caution to avoid
setting bits which aren't actually supported in the hardware, and
experimentally need the fast-forward bits set if fast-forwarding is to
occur.
I suppose I could split this up and move this logic into
cpu/{amd,intel}.c as appropriate, and call a vendor specific function to
appropriately translate a guest cpuid value into a mask value. However,
a lot of common logic would end up needing to be duplicated.
>
>> + case X86_VENDOR_AMD:
>> + /*
>> + * Must expose hosts CMP_LEGACY value so a guest using native
>> + * CPU can correctly interpret other leaves which cannot be
> CPUID again?
Yes
>
>> + * masked.
>> + */
>> + ecx &= ~cpufeat_mask(X86_FEATURE_CMP_LEGACY);
>> + if ( cpu_has_cmp_legacy )
>> + ecx |= cpufeat_mask(X86_FEATURE_CMP_LEGACY);
>> +
>> + mask &= ((uint64_t)ecx << 32) | edx;
>> +
>> + /* Fast-forward bits - Must be set. */
>> + ecx = 0;
>> + edx = cpufeat_mask(X86_FEATURE_APIC);
>> +
>> + mask |= ((uint64_t)ecx << 32) | edx;
> This certainly looks strange (as in more complicated than it needs to
> be) - why not just mask |= cpufeat_mask(X86_FEATURE_APIC)?
Copy and paste from the leaf 1 case. I specifically wanted to avoid
directly manipulating the mask value, as it is already confusing enough
which way ecx and edx are.
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-03-22 16:37 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-15 15:34 [PATCH RFC v3 00/28] x86: Improvements to cpuid handling for guests Andrew Cooper
2016-03-15 15:34 ` [PATCH v3 01/28] xen/x86: Drop unused and non-useful feature definitions Andrew Cooper
2016-03-16 7:53 ` Konrad Rzeszutek Wilk
2016-03-16 9:49 ` Andrew Cooper
2016-03-22 14:06 ` Doug Goldstein
2016-03-22 14:38 ` Jan Beulich
2016-03-15 15:34 ` [PATCH v3 02/28] xen/x86: Rename features to be closer to the vendor definitions Andrew Cooper
2016-03-16 8:01 ` Konrad Rzeszutek Wilk
2016-03-17 19:46 ` Andrew Cooper
2016-03-15 15:34 ` [PATCH v3 03/28] xen/public: Export cpu featureset information in the public API Andrew Cooper
2016-03-16 8:32 ` Konrad Rzeszutek Wilk
2016-03-22 10:39 ` Andrew Cooper
2016-03-18 15:52 ` Jan Beulich
2016-03-15 15:35 ` [PATCH v3 04/28] xen/x86: Script to automatically process featureset information Andrew Cooper
2016-03-16 8:41 ` Konrad Rzeszutek Wilk
2016-03-15 15:35 ` [PATCH v3 05/28] xen/x86: Collect more cpuid feature leaves Andrew Cooper
2016-03-16 8:50 ` Konrad Rzeszutek Wilk
2016-03-15 15:35 ` [PATCH v3 06/28] xen/x86: Mask out unknown features from Xen's capabilities Andrew Cooper
2016-03-16 18:01 ` Konrad Rzeszutek Wilk
2016-03-15 15:35 ` [PATCH v3 07/28] xen/x86: Annotate special features Andrew Cooper
2016-03-16 18:04 ` Konrad Rzeszutek Wilk
2016-03-18 16:29 ` Jan Beulich
2016-03-15 15:35 ` [PATCH v3 08/28] xen/x86: Annotate VM applicability in featureset Andrew Cooper
2016-03-16 18:15 ` Konrad Rzeszutek Wilk
2016-03-18 16:57 ` Jan Beulich
2016-03-18 18:56 ` Andrew Cooper
2016-03-21 11:53 ` Jan Beulich
2016-03-21 13:39 ` Andrew Cooper
2016-03-15 15:35 ` [PATCH v3 09/28] xen/x86: Calculate maximum host and guest featuresets Andrew Cooper
2016-03-16 18:24 ` Konrad Rzeszutek Wilk
2016-03-18 17:09 ` Jan Beulich
2016-03-22 11:23 ` Andrew Cooper
2016-03-22 12:39 ` Jan Beulich
2016-03-22 14:37 ` Andrew Cooper
2016-03-22 14:52 ` Jan Beulich
2016-03-22 15:01 ` Andrew Cooper
2016-03-22 16:10 ` Jan Beulich
2016-03-15 15:35 ` [PATCH v3 10/28] xen/x86: Generate deep dependencies of features Andrew Cooper
2016-03-17 19:45 ` Konrad Rzeszutek Wilk
2016-03-17 20:14 ` Andrew Cooper
2016-03-17 20:32 ` Konrad Rzeszutek Wilk
2016-03-21 15:41 ` Jan Beulich
2016-03-15 15:35 ` [PATCH v3 11/28] xen/x86: Clear dependent features when clearing a cpu cap Andrew Cooper
2016-03-17 19:51 ` Konrad Rzeszutek Wilk
2016-03-17 19:56 ` Andrew Cooper
2016-03-28 15:02 ` Konrad Rzeszutek Wilk
2016-03-21 15:45 ` Jan Beulich
2016-03-15 15:35 ` [PATCH v3 12/28] xen/x86: Improve disabling of features which have dependencies Andrew Cooper
2016-03-15 15:35 ` [PATCH v3 13/28] xen/x86: Improvements to in-hypervisor cpuid sanity checks Andrew Cooper
2016-03-21 16:11 ` Jan Beulich
2016-03-22 15:30 ` Andrew Cooper
2016-03-15 15:35 ` [PATCH v3 14/28] x86/cpu: Move set_cpumask() calls into c_early_init() Andrew Cooper
2016-03-21 16:16 ` Jan Beulich
2016-03-15 15:35 ` [PATCH v3 15/28] x86/cpu: Sysctl and common infrastructure for levelling context switching Andrew Cooper
2016-03-15 17:35 ` Joao Martins
2016-03-15 19:29 ` Andrew Cooper
2016-03-15 19:34 ` Joao Martins
2016-03-21 16:23 ` Jan Beulich
2016-03-22 15:57 ` Andrew Cooper
2016-03-22 16:16 ` Jan Beulich
2016-03-15 15:35 ` [PATCH v3 16/28] x86/cpu: Rework AMD masking MSR setup Andrew Cooper
2016-03-21 16:51 ` Jan Beulich
2016-03-21 16:55 ` Andrew Cooper
2016-03-15 15:35 ` [PATCH v3 17/28] x86/cpu: Rework Intel masking/faulting setup Andrew Cooper
2016-03-21 16:44 ` Jan Beulich
2016-03-15 15:35 ` [PATCH v3 18/28] x86/cpu: Context switch cpuid masks and faulting state in context_switch() Andrew Cooper
2016-03-15 15:35 ` [PATCH v3 19/28] x86/pv: Provide custom cpumasks for PV domains Andrew Cooper
2016-03-21 16:53 ` Jan Beulich
2016-03-15 15:35 ` [PATCH v3 20/28] x86/domctl: Update PV domain cpumasks when setting cpuid policy Andrew Cooper
2016-03-21 17:06 ` Jan Beulich
2016-03-22 16:37 ` Andrew Cooper [this message]
2016-03-22 16:51 ` Jan Beulich
2016-03-15 15:35 ` [PATCH v3 21/28] xen+tools: Export maximum host and guest cpu featuresets via SYSCTL Andrew Cooper
2016-03-16 18:23 ` Wei Liu
2016-03-16 20:38 ` David Scott
2016-03-22 8:43 ` Jan Beulich
2016-03-22 20:39 ` Andrew Cooper
2016-03-15 15:35 ` [PATCH v3 22/28] tools/libxc: Modify bitmap operations to take void pointers Andrew Cooper
2016-03-16 15:24 ` Andrew Cooper
2016-03-17 12:17 ` Wei Liu
2016-03-15 15:35 ` [PATCH v3 23/28] tools/libxc: Use public/featureset.h for cpuid policy generation Andrew Cooper
2016-03-15 15:35 ` [PATCH v3 24/28] tools/libxc: Expose the automatically generated cpu featuremask information Andrew Cooper
2016-03-15 15:35 ` [PATCH v3 25/28] tools: Utility for dealing with featuresets Andrew Cooper
2016-03-16 18:23 ` Wei Liu
2016-03-15 15:35 ` [PATCH v3 26/28] tools/libxc: Wire a featureset through to cpuid policy logic Andrew Cooper
2016-03-15 15:35 ` [PATCH v3 27/28] tools/libxc: Use featuresets rather than guesswork Andrew Cooper
2016-03-15 15:35 ` [PATCH v3 28/28] tools/libxc: Calculate xstate cpuid leaf from guest information Andrew Cooper
2016-03-16 18:23 ` Wei Liu
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=56F174B5.9050707@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=JBeulich@suse.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.