[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 11/14] x86/cpuid: Handle leaves 0x8000000b-1a in guest_cpuid()
Leaves 8000000b-18 are reserved. Leaf 80000019 is 1G TLB information and leaf 0x8000001a is performance hints. These leaves have previously been hidden from guests, but are perfectly safe to expose when appicable. Update libxc to also expose these leaves. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- CC: Jan Beulich <JBeulich@xxxxxxxx> v2: * New v3: * Hide 1G TLB if a guest lacks page1gb. --- tools/libxc/xc_cpuid_x86.c | 2 ++ xen/arch/x86/cpuid.c | 11 ++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tools/libxc/xc_cpuid_x86.c b/tools/libxc/xc_cpuid_x86.c index 918590f..73a2ded 100644 --- a/tools/libxc/xc_cpuid_x86.c +++ b/tools/libxc/xc_cpuid_x86.c @@ -479,6 +479,8 @@ static void xc_cpuid_hvm_policy(xc_interface *xch, case 0x80000005: /* AMD L1 cache/TLB info (dumped by Intel policy) */ case 0x80000006: /* AMD L2/3 cache/TLB info ; Intel L2 cache features */ case 0x8000000a: /* AMD SVM feature bits */ + case 0x80000019: /* AMD 1G TLB */ + case 0x8000001a: /* AMD perf hints */ case 0x8000001c: /* AMD lightweight profiling */ break; diff --git a/xen/arch/x86/cpuid.c b/xen/arch/x86/cpuid.c index 61a1f19..69dc39b 100644 --- a/xen/arch/x86/cpuid.c +++ b/xen/arch/x86/cpuid.c @@ -209,6 +209,8 @@ static void recalculate_misc(struct cpuid_policy *p) p->extd.raw[0x8].c &= 0x0003f0ff; p->extd.raw[0x9] = EMPTY_LEAF; + + zero_leaves(p->extd.raw, 0xb, 0x18); break; } } @@ -509,6 +511,9 @@ void recalculate_cpuid_policy(struct domain *d) if ( !p->extd.svm ) p->extd.raw[0xa] = EMPTY_LEAF; + + if ( !p->extd.page1gb ) + p->extd.raw[0x19] = EMPTY_LEAF; } int init_domain_cpuid_policy(struct domain *d) @@ -732,7 +737,7 @@ static void pv_cpuid(uint32_t leaf, uint32_t subleaf, struct cpuid_leaf *res) case 0x2 ... 0x3: case 0x7 ... 0x9: case 0xc ... XSTATE_CPUID: - case 0x80000000 ... 0x8000000a: + case 0x80000000 ... 0x8000001a: ASSERT_UNREACHABLE(); /* Now handled in guest_cpuid(). */ } @@ -828,7 +833,7 @@ static void hvm_cpuid(uint32_t leaf, uint32_t subleaf, struct cpuid_leaf *res) case 0x2 ... 0x3: case 0x7 ... 0x9: case 0xc ... XSTATE_CPUID: - case 0x80000000 ... 0x8000000a: + case 0x80000000 ... 0x8000001a: ASSERT_UNREACHABLE(); /* Now handled in guest_cpuid(). */ } @@ -911,7 +916,7 @@ void guest_cpuid(const struct vcpu *v, uint32_t leaf, default: goto legacy; - case 0x80000000 ... 0x8000000a: + case 0x80000000 ... 0x8000001a: *res = p->extd.raw[leaf & 0xffff]; break; } -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |