All of lore.kernel.org
 help / color / mirror / Atom feed
From: Don Slutz <Don@CloudSwitch.Com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Keir Fraser <keir@xen.org>,
	Ian Campbell <ian.campbell@citrix.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	Jun Nakajima <jun.nakajima@intel.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Eddie Dong <eddie.dong@intel.com>, Don Slutz <dslutz@verizon.com>,
	xen-devel@lists.xen.org, Jan Beulich <jbeulich@suse.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Subject: Re: [RFC PATCH 03/10] Add cpuid_vmware_leaves
Date: Tue, 17 Dec 2013 11:20:40 -0500	[thread overview]
Message-ID: <52B079D8.7060708@CloudSwitch.Com> (raw)
In-Reply-To: <52AA383B.8000105@citrix.com>

On 12/12/13 17:27, Andrew Cooper wrote:
> On 12/12/2013 19:15, Don Slutz wrote:
>> From: Don Slutz<dslutz@verizon.com>
>>
>> Signed-off-by: Don Slutz<dslutz@verizon.com>
>> ---
>>   xen/arch/x86/hvm/hvm.c          |  3 +++
>>   xen/arch/x86/traps.c            | 58 ++++++++++++++++++++++++++++++++++++++++-
>>   xen/include/asm-x86/hvm/hvm.h   |  3 +++
>>   xen/include/asm-x86/processor.h |  2 ++
>>   4 files changed, 65 insertions(+), 1 deletion(-)
>>
>> diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
>> index 69f7e74..6a7a781 100644
>> --- a/xen/arch/x86/hvm/hvm.c
>> +++ b/xen/arch/x86/hvm/hvm.c
>> @@ -2878,6 +2878,9 @@ void hvm_cpuid(unsigned int input, unsigned int *eax, unsigned int *ebx,
>>       if ( cpuid_viridian_leaves(input, eax, ebx, ecx, edx) )
>>           return;
>>   
>> +    if ( cpuid_vmware_leaves(input, count, eax, ebx, ecx, edx) )
>> +        return;
>> +
>>       if ( cpuid_hypervisor_leaves(input, count, eax, ebx, ecx, edx) )
>>           return;
>>   
>> diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
>> index 940bc33..71a76df 100644
>> --- a/xen/arch/x86/traps.c
>> +++ b/xen/arch/x86/traps.c
>> @@ -671,14 +671,70 @@ int wrmsr_hypervisor_regs(uint32_t idx, uint64_t val)
>>       return 0;
>>   }
>>   
>> +int cpuid_vmware_leaves(uint32_t idx, uint32_t sub_idx,
>> +                        uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
>> +{
>> +    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;
>> +    const uint32_t apic_khz = 1000000L;
> Please use the proper constant for this.

Is this SYSTEM_TIME_HZ / 1000 ?  Or is not a constant.  All my old testing on amazon showed it to be a constant (but that is an much older xen; most likely did not use virtual apic hardware, but used qemu).  I just checked and the hardware I am testing on has:

(XEN) calibrating APIC timer ...
(XEN) ..... CPU clock speed is 2400.0122 MHz.
(XEN) ..... host bus clock speed is 100.0003 MHz.
(XEN) ..... bus_scale = 0x6669

So it may be safer to pass on the detected host bus clock speed.

>> +
>> +    if ( !is_vmware_domain(d) )
>> +        return 0;
>> +
>> +    idx -= base;
>> +
>> +    limit = 0x10;
>> +
>> +    if ( idx > limit )
>> +        return 0;
> This `limit` is pointless and the BUG() below is dead code (which
> Coverity will complain about).
>
> Please see 839b966e3f587bbb1a0d954230fb3904330dccb6 and follow its
> style, rather than propagating this bad style (which admittedly you have
> gotten from following cpuid_hypervisor_leaves() )
Will do.
>> +
>> +    switch ( idx )
>> +    {
>> +    case 0:
>> +        *eax = base + limit; /* Largest leaf */
>> +        *ebx = 0x61774d56; /* "VMwa" */
>> +        *ecx = 0x4d566572; /* "reVM" */
>> +        *edx = 0x65726177; /* "ware" */
>> +        break;
>> +
>> +    case 1 ... 0xf:
>> +        *eax = 0;          /* Reserved */
>> +        *ebx = 0;          /* Reserved */
>> +        *ecx = 0;          /* Reserved */
>> +        *edx = 0;          /* Reserved */
>> +        break;
>> +
>> +    case 0x10:
>> +        /* (Virtual) TSC frequency in kHz. */
>> +        *eax =  d->arch.tsc_khz;
>> +        /* (Virtual) Bus (local apic timer) frequency in kHz. */
>> +        *ebx = apic_khz;
>> +        *ecx = 0;          /* Reserved */
>> +        *edx = 0;          /* Reserved */
>> +        break;
>> +
>> +    default:
>> +        BUG();
>> +    }
>> +
>> +    return 1;
>> +}
>> +
>>   int cpuid_hypervisor_leaves( uint32_t idx, uint32_t sub_idx,
>>                  uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
>>   {
>>       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 base = 0x40000000;
>>       uint32_t limit;
>>   
>> +    if ( is_viridian_domain(d) )
>> +        base += 0x100;
>> +    if ( is_vmware_domain(d) )
>> +        base += 0x100;
>> +
> These bases need a far more scalable solution, especially as the result
> of each of these clauses can be changed at runtime with a cunning
> hvm_param_set hypercall.
Will work on a redesign for these bases.
    -Don Slutz
> I think that both "is pretending to be HyperV" and "is pretending to be
> VMware" need to be domain creation flags which are strictly static for
> the lifetime of the domain.
>
> ~Andrew
>
>>       idx -= base;
>>   
>>       /*
>> diff --git a/xen/include/asm-x86/hvm/hvm.h b/xen/include/asm-x86/hvm/hvm.h
>> index ccca5df..ae3768c 100644
>> --- a/xen/include/asm-x86/hvm/hvm.h
>> +++ b/xen/include/asm-x86/hvm/hvm.h
>> @@ -332,6 +332,9 @@ static inline unsigned long hvm_get_shadow_gs_base(struct vcpu *v)
>>   #define is_viridian_domain(_d)                                             \
>>    (is_hvm_domain(_d) && ((_d)->arch.hvm_domain.params[HVM_PARAM_VIRIDIAN]))
>>   
>> +#define is_vmware_domain(_d)                                             \
>> + (is_hvm_domain(_d) && ((_d)->arch.hvm_domain.params[HVM_PARAM_VMWARE_HW]))
>> +
>>   void hvm_cpuid(unsigned int input, unsigned int *eax, unsigned int *ebx,
>>                                      unsigned int *ecx, unsigned int *edx);
>>   void hvm_migrate_timers(struct vcpu *v);
>> diff --git a/xen/include/asm-x86/processor.h b/xen/include/asm-x86/processor.h
>> index c120460..6c53e45 100644
>> --- a/xen/include/asm-x86/processor.h
>> +++ b/xen/include/asm-x86/processor.h
>> @@ -559,6 +559,8 @@ void int80_direct_trap(void);
>>   
>>   extern int hypercall(void);
>>   
>> +int cpuid_vmware_leaves( uint32_t idx, uint32_t sub_idx,
>> +          uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx);
>>   int cpuid_hypervisor_leaves( uint32_t idx, uint32_t sub_idx,
>>             uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx);
>>   int rdmsr_hypervisor_regs(uint32_t idx, uint64_t *val);

  parent reply	other threads:[~2013-12-17 16:20 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-12 19:15 [RFC PATCH 00/10] Xen VMware tools support Don Slutz
2013-12-12 19:15 ` [RFC PATCH 01/10] smbios: Add "plus VMware-Tools" to HVM_XS_SYSTEM_PRODUCT_NAME Don Slutz
2013-12-12 19:35   ` Olaf Hering
2013-12-12 22:07     ` Andrew Cooper
2013-12-13 18:03       ` Don Slutz
2013-12-12 19:15 ` [RFC PATCH 02/10] Add VMware HVM params Don Slutz
2013-12-12 22:32   ` Andrew Cooper
2013-12-13 18:12     ` Don Slutz
2013-12-13 10:52   ` Jan Beulich
2013-12-13 18:13     ` Don Slutz
2013-12-17 20:02   ` Konrad Rzeszutek Wilk
2013-12-19  0:47     ` Don Slutz
2013-12-12 19:15 ` [RFC PATCH 03/10] Add cpuid_vmware_leaves Don Slutz
2013-12-12 22:27   ` Andrew Cooper
2013-12-13 10:55     ` Jan Beulich
2013-12-13 13:38       ` Andrew Cooper
2013-12-13 18:55         ` Don Slutz
2013-12-16  8:13           ` Jan Beulich
2013-12-19  0:51             ` Don Slutz
2013-12-17 16:20     ` Don Slutz [this message]
2013-12-12 19:15 ` [RFC PATCH 04/10] tools: Add support for new HVM params Don Slutz
2013-12-12 22:36   ` Andrew Cooper
2013-12-13 23:23     ` Don Slutz
2013-12-12 19:15 ` [RFC PATCH 05/10] vmport: Add VMware provided include files Don Slutz
2013-12-17 20:22   ` Konrad Rzeszutek Wilk
2013-12-19  0:54     ` Don Slutz
2013-12-12 19:15 ` [RFC PATCH 06/10] Add vmport structs Don Slutz
2013-12-12 23:10   ` Andrew Cooper
2013-12-19  1:26     ` Don Slutz
2013-12-12 19:15 ` [RFC PATCH 07/10] Add new vmport code Don Slutz
2013-12-13  0:06   ` Andrew Cooper
2013-12-19  2:22     ` Don Slutz
2013-12-13 10:59   ` Jan Beulich
2013-12-19  2:25     ` Don Slutz
2013-12-17 20:36   ` Konrad Rzeszutek Wilk
2013-12-19  2:29     ` Don Slutz
2013-12-12 19:15 ` [RFC PATCH 08/10] connect vmport up Don Slutz
2013-12-13  0:51   ` Andrew Cooper
2013-12-19  2:53     ` Don Slutz
2013-12-13 15:46   ` Boris Ostrovsky
2013-12-19  3:45     ` Don Slutz
2013-12-17 20:37   ` Konrad Rzeszutek Wilk
2013-12-19  3:46     ` Don Slutz
2013-12-12 19:15 ` [RFC PATCH 09/10] libxl: Add VTPOWER, VTREBOOT and VTPING Don Slutz
2013-12-13  0:58   ` Andrew Cooper
2013-12-17 20:30   ` Konrad Rzeszutek Wilk
2013-12-12 19:15 ` [RFC PATCH 10/10] Add VMware guest info access Don Slutz
2013-12-13  1:08   ` Andrew Cooper
2013-12-13  5:32   ` Matthew Daley
2013-12-17 20:34   ` Konrad Rzeszutek Wilk
2013-12-17 19:03 ` [RFC PATCH 00/10] Xen VMware tools support Konrad Rzeszutek Wilk
2013-12-19  0:46   ` Don Slutz
2013-12-19  9:50     ` Ian Campbell
2013-12-19 14:08       ` Don Slutz

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=52B079D8.7060708@CloudSwitch.Com \
    --to=don@cloudswitch.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=dslutz@verizon.com \
    --cc=eddie.dong@intel.com \
    --cc=ian.campbell@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=jun.nakajima@intel.com \
    --cc=keir@xen.org \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=suravee.suthikulpanit@amd.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.