[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] 答复: Windows 2008 r2 smp guest booting hang with viridian=true on ovmf(xen latest version 4.5.1-rc1 + latest edk2)



Can anyone have idea about how to boot window 2008 r2 smp guest in ovmf with viridian flag is true?

 

Thanks!

 

 

发件人: Fanhenglong
发送时间: 2015519 23:22
收件人: xen-devel@xxxxxxxxxxxxx
抄送: 'keir@xxxxxxx'; 'paul.durrant@xxxxxxxxxx'; 'jbeulich@xxxxxxxx'; edk2-devel@xxxxxxxxxxxxxxxxxxxxx; Hanweidong (Randy); Liuqiming (John); Liuqiming (John)
主题: Windows 2008 r2 smp guest booting hang with viridian=true on ovmf(xen latest version 4.5.1-rc1 + latest edk2)

 

Hi all,

   

I have test win2008 r2 guest on ovmf with xen latest version + edk2 latest

Xen :  4.5.1-rc1

Edk2 :  e2ab3f819f4e8165c24bd6f4fdc24ef17bdf458b (date:2015/5/18)

and come across a problem:

when the viridian flag is true,win2008 r2 guest can boot success with unique processor, but will hang with smp processor on ovmf;

the viridian flag is false, win2008 r2 guest can boot success both in unique and smp processor on ovmf;

 

if win2008 r2 with viridian=faulse, it may bring 0x101 bluescreen

http://old-list-archives.xenproject.org/archives/html/xen-users/2009-07/msg00661.html

 

    I try to resolve the problem,

I also run the same testcase on kvm and vmvare ,vm also have the same question, vmare is ok;

so I print the cupid function return value in vmvare guest os,

the below table show the detailed information in vmvare guest os,

get cpu id 0 : 0000000b 756e6547 6c65746e 49656e69

get cpu id 1 : 000106a5 00010800 80982201 0fabfbff

get cpu id 2 : 55035a01 00f0b2e4 00000000 09ca212c

get cpu id 3 : 00000000 00000000 00000000 00000000

get cpu id 4 : 00000000 00000000 00000000 00000000

get cpu id 5 : 00000000 00000000 00000000 00000000

get cpu id 40000000 : 40000010 61774d56 4d566572 65726177

get cpu id 40000001 : 00000000 00000000 00000000 00000000

get cpu id 40000002 : 00000000 00000000 00000000 00000000

get cpu id 40000003 : 00000000 00000000 00000000 00000000

get cpu id 40000004 : 00000000 00000000 00000000 00000000

get cpu id 40000005 : 00000000 00000000 00000000 00000000

get cpu id 40000006 : 00000000 00000000 00000000 00000000

get cpu id 40000070 : 00000000 00000000 000000ac 00000012

get cpu id 40000071 : 00000000 00000000 000000ac 00000012

get cpu id 40000072 : 00000000 00000000 000000ac 00000012

get cpu id 40000073 : 00000000 00000000 000000ac 00000012

get cpu id 40000100 : 00000000 00000000 000000ac 00000000

get cpu id 40000101 : 00000000 00000000 000000ac 00000000

get cpu id 40000102 : 00000000 00000000 000000ac 00000000

get cpu id 40000103 : 00000000 00000000 000000ac 00000000

get cpu id 40000104 : 00000000 00000000 000000ac 00000000

get cpu id 40000105 : 00000000 00000000 000000ac 00000000

get cpu id 40000106 : 00000000 00000000 000000ac 00000000

get cpu id 80000000 : 80000008 00000000 00000000 00000000

get cpu id 80000001 : 00000000 00000000 00000001 28100000

get cpu id 80000002 : 65746e49 2952286c 6f655820 2952286e

get cpu id 80000003 : 55504320 20202020 20202020 45202020

get cpu id 80000004 : 30323535 20402020 37322e32 007a4847

get cpu id 80000005 : 00000000 00000000 00000000 00000000

get cpu id 80000006 : 00000000 00000000 01006040 00000000

get cpu id 80000007 : 00000000 00000000 00000000 00000100

get cpu id 80000008 : 00003028 00000000 00000000 00000000

get cpu id 80000009 : 00000000 00000000 000000ac 00000000

 

 

I modified cpuid_viridian_leaves function in  xen/arch/x86/hvm/viridian.c (as the following red bold code)

    to return value 0 for cupid (function=40000001), and win2008 r2 smp guest can boot success on ovmf;

 

int cpuid_viridian_leaves(unsigned int leaf, unsigned int *eax,

                          unsigned int *ebx, unsigned int *ecx,

                          unsigned int *edx)

{

    struct domain *d = current->domain;

 

    if ( !is_viridian_domain(d) )

        return 0;

 

    leaf -= 0x40000000;

    if ( leaf > 6 )

        return 0;

 

    *eax = *ebx = *ecx = *edx = 0;

    switch ( leaf )

    {

    case 0:

        *eax = 0x40000006; /* Maximum leaf */

        *ebx = 0x7263694d; /* Magic numbers  */

        *ecx = 0x666F736F;

        *edx = 0x76482074;

        break;

    case 1:

        //original code *eax = 0x31237648; /* Version number */

       *eax = 0; //code after modified

        break;

 

  

   based on hyperv spec, Microsoft Hypervisor CPUID Leaves,

   0x40000001

Hypervisor vendor-neutral interface identification. This determines the semantics of the leaves from 0x40000002 through 0x400000FF.

         EAX  0x31237648―“Hv#1”

         EBX  Reserved

         ECX  Reserved

         EDX  Reserved

 

May be in xen platform,  if window 2008 r2 guest os boot in ovmf, the cupid(function=0x40000001) must not return EAX         0x31237648―“Hv#1”,

 

Can anyone have idea about how to boot window 2008 r2 guest in ovmf and do not bring other problem(eg,0x101 bluescreen)?

 

Thanks!

  

 

 

 

 

 

 

 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.