All of lore.kernel.org
 help / color / mirror / Atom feed
* Manual differ from source code about Unrestricted Guest
@ 2011-06-07 15:41 confucius
  2011-06-07 16:19 ` Ian Campbell
  2011-06-07 20:33 ` Tim Deegan
  0 siblings, 2 replies; 7+ messages in thread
From: confucius @ 2011-06-07 15:41 UTC (permalink / raw)
  To: xen-devel

As italics show:
Some processors allow guest software to run in unpaged protected mode or in
real-address
mode, such guest called “unrestricted guest”.
If CR0.PG = 0, each linear address is passed directly to the EPT mechanism
for translation to a physical address.”
References to Intel® 64 and IA-32 Architectures Software Developer’s Manual
Volume 3B:System Programming Guide, Part 2  22.8 UNRESTRICTED GUESTS

When we set CR0.PG=0 of a guest, I think it doesn’t need construct a page
table for the unpaged guest, but I found it construct an identify_map table
for unpaged guest in the source codes of xen. As follow: 
Xen-4.0/tools/libxc/xc_hvm_build.c 
setup_guest()
{
…………………
/*
     * Identity-map page table is required for running with CR0.PG=0 when
     * using Intel EPT. Create a 32-bit non-PAE page directory of
superpages.
     */
    if ( (ident_pt = xc_map_foreign_range(
              xc_handle, dom, PAGE_SIZE, PROT_READ | PROT_WRITE,
              special_pfn(SPECIALPAGE_IDENT_PT))) == NULL )
        goto error_out;
    for ( i = 0; i < PAGE_SIZE / sizeof(*ident_pt); i++ )
        ident_pt[i] = ((i << 22) | _PAGE_PRESENT | _PAGE_RW | _PAGE_USER |
                       _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_PSE);
    munmap(ident_pt, PAGE_SIZE);
…………………
}

Why construct such identity map table for unpaged guest?
In my opinion, guset_cr3 doesn’t function when set CR0.PG=0, can guest_cr3
of this unpaged guest point to identity map table?


--
View this message in context: http://xen.1045712.n5.nabble.com/Manual-differ-from-source-code-about-Unrestricted-Guest-tp4462113p4462113.html
Sent from the Xen - Dev mailing list archive at Nabble.com.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Manual differ from source code about Unrestricted Guest
  2011-06-07 15:41 Manual differ from source code about Unrestricted Guest confucius
@ 2011-06-07 16:19 ` Ian Campbell
  2011-06-08  5:01   ` confucius
  2011-06-07 20:33 ` Tim Deegan
  1 sibling, 1 reply; 7+ messages in thread
From: Ian Campbell @ 2011-06-07 16:19 UTC (permalink / raw)
  To: confucius; +Cc: xen-devel

On Tue, 2011-06-07 at 16:41 +0100, confucius wrote:
> As italics show:
> Some processors allow guest software to run in unpaged protected mode or in
> real-address
> mode, such guest called “unrestricted guest”.
> If CR0.PG = 0, each linear address is passed directly to the EPT mechanism
> for translation to a physical address.”
> References to Intel® 64 and IA-32 Architectures Software Developer’s Manual
> Volume 3B:System Programming Guide, Part 2  22.8 UNRESTRICTED GUESTS
> 
> When we set CR0.PG=0 of a guest, I think it doesn’t need construct a page
> table for the unpaged guest, but I found it construct an identify_map table
> for unpaged guest in the source codes of xen. As follow: 
> Xen-4.0/tools/libxc/xc_hvm_build.c 
> setup_guest()
> {
> …………………
> /*
>      * Identity-map page table is required for running with CR0.PG=0 when
>      * using Intel EPT. Create a 32-bit non-PAE page directory of
> superpages.
>      */
>     if ( (ident_pt = xc_map_foreign_range(
>               xc_handle, dom, PAGE_SIZE, PROT_READ | PROT_WRITE,
>               special_pfn(SPECIALPAGE_IDENT_PT))) == NULL )
>         goto error_out;
>     for ( i = 0; i < PAGE_SIZE / sizeof(*ident_pt); i++ )
>         ident_pt[i] = ((i << 22) | _PAGE_PRESENT | _PAGE_RW | _PAGE_USER |
>                        _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_PSE);
>     munmap(ident_pt, PAGE_SIZE);
> …………………
> }
> 
> Why construct such identity map table for unpaged guest?

AIUI although the guest is in unpaged mode the _host_ is not and
therefore a pagetable is required from somewhere. Since the guest thinks
it is in unpaged mode it isn't going to provide one and therefore the
hypervisor must provide them.

> In my opinion, guset_cr3 doesn’t function when set CR0.PG=0, can guest_cr3
> of this unpaged guest point to identity map table?

I don't think so -- the use of this identity map table is transparent to
the guest. The identity map is just part of the business of providing
the illusion of unpaged mode to the guest.

Ian.

> 
> 
> --
> View this message in context: http://xen.1045712.n5.nabble.com/Manual-differ-from-source-code-about-Unrestricted-Guest-tp4462113p4462113.html
> Sent from the Xen - Dev mailing list archive at Nabble.com.
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Manual differ from source code about Unrestricted Guest
  2011-06-07 15:41 Manual differ from source code about Unrestricted Guest confucius
  2011-06-07 16:19 ` Ian Campbell
@ 2011-06-07 20:33 ` Tim Deegan
  2011-06-08  5:33   ` confucius
  1 sibling, 1 reply; 7+ messages in thread
From: Tim Deegan @ 2011-06-07 20:33 UTC (permalink / raw)
  To: confucius; +Cc: xen-devel

Hi, confucius,

At 08:41 -0700 on 07 Jun (1307436064), confucius wrote:
> As italics show:

Those of us reading in plain text can't see any italics. :)

> Some processors allow guest software to run in unpaged protected mode or in
> real-address
> mode, such guest called ???unrestricted guest???.
> If CR0.PG = 0, each linear address is passed directly to the EPT mechanism
> for translation to a physical address.???
> References to Intel® 64 and IA-32 Architectures Software Developer???s Manual
> Volume 3B:System Programming Guide, Part 2  22.8 UNRESTRICTED GUESTS
> When we set CR0.PG=0 of a guest, I think it doesn???t need construct a page
> table for the unpaged guest

Yes, but only on newer processors.  As it says right at the top of
section 22.8, "The first processors to support VMX operation require
CR0.PE and CR0.PG to be 1 in VMX operation".

>, but I found it construct an identify_map table
> for unpaged guest in the source codes of xen. As follow: 
> Xen-4.0/tools/libxc/xc_hvm_build.c 

This is needed for older Intel processors, which cannot run a HVM guest
with CR0.PG == 0.  On those CPUs, Xen must force CR0.PG == 1 and CR3 ==
the guest's identity-map pagetable, to emulate how a real machine would
behave with CR0.PG == 0.

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Manual differ from source code about Unrestricted Guest
  2011-06-07 16:19 ` Ian Campbell
@ 2011-06-08  5:01   ` confucius
  2011-06-08  8:08     ` Ian Campbell
  0 siblings, 1 reply; 7+ messages in thread
From: confucius @ 2011-06-08  5:01 UTC (permalink / raw)
  To: xen-devel

Thank you, Ian and Tim.
But I am still blurry about Ian's explain, as follow:
"AIUI although the guest is in unpaged mode the _host_ is not and 
therefore a pagetable is required from somewhere."
 
I konw the host is set to paging and protected mode, so the host(VMM) need a
page table itself.But identity map table is pointed by GUEST_CR3, not by
HOST_CR3. The follow is:
 xen-4.0/arch/x86/hvm/vmx/vmx.c 

static void vmx_update_guest_cr(...)
{
....
switch ( cr )
    { 
 case 0: ....
 case 2: ....
 case 3: 
    if ( paging_mode_hap(v->domain) )
        {
            if ( !hvm_paging_enabled(v) )
                v->arch.hvm_vcpu.hw_cr[3] =
                    v->domain->arch.hvm_domain.params[HVM_PARAM_IDENT_PT];
            vmx_load_pdptrs(v);
        }
 
        __vmwrite(GUEST_CR3, v->arch.hvm_vcpu.hw_cr[3]);
        hvm_asid_flush_vcpu(v);
        break;

}

}

>From such codes, I found GUEST_CR3 not HOST_CR3 point to the identity map
table with unpaged mode,
so I am confused by Ian's explain.


--
View this message in context: http://xen.1045712.n5.nabble.com/Manual-differ-from-source-code-about-Unrestricted-Guest-tp4462113p4466268.html
Sent from the Xen - Dev mailing list archive at Nabble.com.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Manual differ from source code about Unrestricted Guest
  2011-06-07 20:33 ` Tim Deegan
@ 2011-06-08  5:33   ` confucius
  2011-06-08  8:21     ` Tim Deegan
  0 siblings, 1 reply; 7+ messages in thread
From: confucius @ 2011-06-08  5:33 UTC (permalink / raw)
  To: xen-devel

Hi, Tim. 
I think I understand you explain.You said:
"This is needed for older Intel processors, which cannot run a HVM guest 
with CR0.PG == 0.  On those CPUs, Xen must force CR0.PG == 1 and CR3 == 
the guest's identity-map pagetable, to emulate how a real machine would 
behave with CR0.PG == 0."

For older processor, though it is unpaged mode in the view of  the guest,
but it is actual paging mode which the guest is running, so we need to
constrcut such identity map table for the actual GUEST_CR3.Am I right?
And for newer processors, we can set unpaged mode for a guest, though we
also used the same codes(which construct identity map table for the unpaged
mode guest), but the inentity map table is not used by the unpaged guest
actually.Am I right?

 


--
View this message in context: http://xen.1045712.n5.nabble.com/Manual-differ-from-source-code-about-Unrestricted-Guest-tp4462113p4466648.html
Sent from the Xen - Dev mailing list archive at Nabble.com.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Re: Manual differ from source code about Unrestricted Guest
  2011-06-08  5:01   ` confucius
@ 2011-06-08  8:08     ` Ian Campbell
  0 siblings, 0 replies; 7+ messages in thread
From: Ian Campbell @ 2011-06-08  8:08 UTC (permalink / raw)
  To: confucius; +Cc: xen-devel

On Wed, 2011-06-08 at 06:01 +0100, confucius wrote:
> Thank you, Ian and Tim.
> But I am still blurry about Ian's explain, as follow:
> "AIUI although the guest is in unpaged mode the _host_ is not and 
> therefore a pagetable is required from somewhere."

Please bear in mind that I'm not an expert in this area. I might be
talking rubbish...
 
> I konw the host is set to paging and protected mode, so the host(VMM) need a
> page table itself.But identity map table is pointed by GUEST_CR3, not by
> HOST_CR3.

GUEST_CR3 is the CR3 which the processor actually runs on when in guest
(non-root) mode. However this is not necessarily the same as what the
guest sees when it reads its CR3 register -- that read can be emulated
(see hvm_mov_from_cr) when the guest visible and GUEST_CR3 state do not
match. See vmx_update_guest_cr() where we enable/disable
CPU_BASED_CR3_{LOAD,STORE}_EXITING (i.e. emulated cr3 accesses) as
required by the guest current mode.

Similarly for other CRx, i.e. GUEST_CR0 will (on the older VMX
processors as Tim points out) contain CR0.PG=1 while what the guest
reads from cr0 when it believes it isn't in paged mode will be CR0.PG=0.

Ian.

>  The follow is:
>  xen-4.0/arch/x86/hvm/vmx/vmx.c 
> 
> static void vmx_update_guest_cr(...)
> {
> ....
> switch ( cr )
>     { 
>  case 0: ....
>  case 2: ....
>  case 3: 
>     if ( paging_mode_hap(v->domain) )
>         {
>             if ( !hvm_paging_enabled(v) )
>                 v->arch.hvm_vcpu.hw_cr[3] =
>                     v->domain->arch.hvm_domain.params[HVM_PARAM_IDENT_PT];
>             vmx_load_pdptrs(v);
>         }
>  
>         __vmwrite(GUEST_CR3, v->arch.hvm_vcpu.hw_cr[3]);
>         hvm_asid_flush_vcpu(v);
>         break;
> 
> }
> 
> }
> 
> >From such codes, I found GUEST_CR3 not HOST_CR3 point to the identity map
> table with unpaged mode,
> so I am confused by Ian's explain.
> 
> 
> --
> View this message in context: http://xen.1045712.n5.nabble.com/Manual-differ-from-source-code-about-Unrestricted-Guest-tp4462113p4466268.html
> Sent from the Xen - Dev mailing list archive at Nabble.com.
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Re: Manual differ from source code about Unrestricted Guest
  2011-06-08  5:33   ` confucius
@ 2011-06-08  8:21     ` Tim Deegan
  0 siblings, 0 replies; 7+ messages in thread
From: Tim Deegan @ 2011-06-08  8:21 UTC (permalink / raw)
  To: confucius; +Cc: xen-devel

Hi, 

At 22:33 -0700 on 07 Jun (1307485996), confucius wrote:
> For older processor, though it is unpaged mode in the view of  the guest,
> but it is actual paging mode which the guest is running, so we need to
> constrcut such identity map table for the actual GUEST_CR3.Am I right?
> And for newer processors, we can set unpaged mode for a guest, though we
> also used the same codes(which construct identity map table for the unpaged
> mode guest), but the inentity map table is not used by the unpaged guest
> actually.Am I right?

Yes, that's right.

Tim.

-- 
Tim Deegan <Tim.Deegan@citrix.com>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd.  (Company #02937203, SL9 0BG)

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-06-08  8:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-07 15:41 Manual differ from source code about Unrestricted Guest confucius
2011-06-07 16:19 ` Ian Campbell
2011-06-08  5:01   ` confucius
2011-06-08  8:08     ` Ian Campbell
2011-06-07 20:33 ` Tim Deegan
2011-06-08  5:33   ` confucius
2011-06-08  8:21     ` Tim Deegan

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.