Paul Durrant
2011-Jul-04 16:18 UTC
[Xen-devel] [PATCH] Don''t expose CPUID time leaf when not using PVRDTSCP
# HG changeset patch # User Paul Durrant <paul.durrant@citrix.com> # Date 1309796247 -3600 # Node ID 6ce0dbc6f955707bf814d62a16a2b4382d957332 # Parent 7e4404a8f5f9bc111a80f15a2bce35378b39f2f1 Don''t expose CPUID time leaf when not using PVRDTSCP Some versions of Oracle''s Solaris PV drivers make a check that the maximal Xen hypervisor CPUID leaf is <= base leaf + 2 and refuse to work if this is not the case. The addition of the time leaf makes the maximal leaf == base leaf + 3 so this patch introduces a workaround that obscures the time leaf unless PVRDTSCP is in operation. Signed-off-by: Paul Durrant <paul.durrant@citrix.com> diff -r 7e4404a8f5f9 -r 6ce0dbc6f955 xen/arch/x86/traps.c --- a/xen/arch/x86/traps.c Mon Jul 04 07:57:32 2011 +0100 +++ b/xen/arch/x86/traps.c Mon Jul 04 17:17:27 2011 +0100 @@ -704,15 +704,19 @@ int cpuid_hypervisor_leaves( uint32_t id struct domain *d = current->domain; /* Optionally shift out of the way of Viridian architectural leaves. */ uint32_t base = is_viridian_domain(d) ? 0x40000100 : 0x40000000; + uint32_t limit; idx -= base; - if ( idx > 3 ) + + limit = (d->arch.tsc_mode < TSC_MODE_PVRDTSCP) ? 2 : 3; + + if ( idx > limit ) return 0; switch ( idx ) { case 0: - *eax = base + 3; /* Largest leaf */ + *eax = base + limit; /* Largest leaf */ *ebx = XEN_CPUID_SIGNATURE_EBX; *ecx = XEN_CPUID_SIGNATURE_ECX; *edx = XEN_CPUID_SIGNATURE_EDX; _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Apparently Analagous Threads
- [PATCH] Add save/restore support for viridian APIC assist pfn
- [PATCH] Fix hvmloader xenbus segment array length
- Re: [Qemu-devel] [PATCH] Remove hardcoded xen-platform device initialization
- [PATCH] x86/VT-x: Disable MSR intercept for SHADOW_GS_BASE.
- [PATCH] Properly control platform device creation in upstream QEMU