|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 for-4.7/4.8] x86: Fix "x86: further CPUID handling adjustments"
>>> On 16.05.18 at 19:27, <andrew.cooper3@xxxxxxxxxx> wrote:
> 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@xxxxxxxxxx>
I continue to think this should remain to be a separate patch.
> 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.
>
> The dom0 issue referenced in the commit message was fixed by the hunk
> adjusting the zeroing alone. STIBP and IBPB don't need (and indeed, must not
> be for levelling purposes) OR'd into the leaf.
>
> One final item which was missed in backport was the need to ignore the
> toolstack choice of STIBP, and set it equal to IBRSB. This needs doing after
> the mask has been applied.
This last paragraph at least partly contradicts the first talking about tool
stack
chosen hiding of STIBP. The intended net effect, aiui, is
- expose STIBP independent of tool stack choice when the tool stack has
elected to expose IBRSB,
- hide STIBP according to tool stack choice when IBRSB is also hidden.
A similar implication (as mentioned before, and see below) is supposed to
exist from IBRSB to IBPB, I think.
Also this aspect wasn't missed in the original backport, but done wrongly: The
ORing in ahead of the masking was meant to take care of this, utilizing what
calculate_{hvm,pv}_featureset() do (overlooking the fact that the feature sets
may have the bits set while the tool stack may have cleared them for the given
domain).
> @@ -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;
You didn't address my respective v1 review comment, neither by adding code
here, nor verbally: How is Dom0 supposed to know of IBPB being available if
IBSRB is (in hardware), but IBPB isn't? The whole purpose of the respective
chunk of code in calculate_pv_featureset() is just that. And if we I think
this similarly
should be done for DomU-s, i.e. also in the HVM variant of this code.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |