[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.1-testing] x86/hvm: Don't expose CPUID time leaf when not using PVRDTSCP
# HG changeset patch # User Paul Durrant <paul.durrant@xxxxxxxxxx> # Date 1310111802 -3600 # Node ID e3a23d2edce4e7a85e8b54e2812416ec31efcee7 # Parent 7a991bdebac60fea93a09f5303394220f03f5cc5 x86/hvm: 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@xxxxxxxxxx> xen-unstable changeset: 23661:8fe6f4be18aa xen-unstable date: Fri Jul 08 08:31:10 2011 +0100 --- diff -r 7a991bdebac6 -r e3a23d2edce4 xen/arch/x86/traps.c --- a/xen/arch/x86/traps.c Fri Jul 08 08:56:15 2011 +0100 +++ b/xen/arch/x86/traps.c Fri Jul 08 08:56:42 2011 +0100 @@ -671,15 +671,23 @@ 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 ) + + /* + * Some Solaris PV drivers fail if max > base + 2. Help them out by + * hiding the PVRDTSCP leaf if PVRDTSCP is disabled. + */ + 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-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |