WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

RE: [Xen-devel] Switching from writeable pagetable toshadowlog-dirtyat r

To: "Keir Fraser" <Keir.Fraser@xxxxxxxxxxxx>
Subject: RE: [Xen-devel] Switching from writeable pagetable toshadowlog-dirtyat runtime
From: "Xin, Xiaohui" <xiaohui.xin@xxxxxxxxx>
Date: Fri, 14 Oct 2005 17:43:07 +0800
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx, "Nakajima, Jun" <jun.nakajima@xxxxxxxxx>
Delivery-date: Fri, 14 Oct 2005 09:40:35 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AcXQm9MMZoDuCgMpRheI6PFoTqkVkwAB1n+A
Thread-topic: [Xen-devel] Switching from writeable pagetable toshadowlog-dirtyat runtime
Keir,
We found that in 32-bit code, the shadow_fault() do one more thing than 64-bit 
code. 
The following code in file shadow32.c checks the L1 page table with RW bit 
removed and make the shadow with RW bit, it does not inject the fault to guest.
Does this is a work-around for switch from writable pagetable to shadow mode 
enable?
Does this code makes sense to the writeable pagetable, and then may be one 
reason that 32bit log-dirty code can work?

    if ( regs->error_code & 2 )
    {
  +      int allow_writes = 0;
  +      if ( unlikely(!(l1e_get_flags(gpte) & _PAGE_RW)) )
  +      {
  +          if ( shadow_mode_page_writable(va, regs, l1e_get_pfn(gpte)) )
  +          {
  +              allow_writes = 1;
  +              l1e_add_flags(gpte, _PAGE_RW);
  +          }
  +          else
  +          {
  +              /* Write fault on a read-only mapping. */
  +              SH_VVLOG("shadow_fault - EXIT: wr fault on RO page (%" PRIpte  
        ")",
  +                       l1e_get_intpte(gpte));
  +              perfc_incrc(shadow_fault_bail_ro_mapping);
  +              goto fail;
  +          }
  +     }
        if ( !l1pte_write_fault(v, &gpte, &spte, va) )
        {
            SH_VVLOG("shadow_fault - EXIT: l1pte_write_fault failed");
            perfc_incrc(write_fault_bail);
            shadow_unlock(d);
            return 0;
        }
   +     if ( allow_writes )
   +         l1e_remove_flags(gpte, _PAGE_RW);
   + }

Thanks
Xiaohui
-----Original Message-----
From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx 
[mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Keir Fraser
Sent: 2005年10月14日 16:44
To: Li, Chengyuan
Cc: Ian Pratt; xen-devel@xxxxxxxxxxxxxxxxxxx; Nakajima, Jun
Subject: Re: [Xen-devel] Switching from writeable pagetable toshadowlog-dirtyat 
runtime


On 14 Oct 2005, at 03:46, Li, Chengyuan wrote:

>
> I don't see ptwr_flush() when shadow mode enable in both ia32 and 
> x86_64 code. Why plain ia32 log dirty shadow can work?

Perhaps it can't, properly. :-)

The best fix will be to make domain_pause() call 
sync_pagetable_state(d). The main problem I can see is that the 
cleanup_writeable_pagetable() function is not currently safe to be 
called by other than the subject domain. For example, failure paths 
crash the calling domain rather than the subject domain! This needs 
fixing.

> audit_adjust_pgtables() is for plain ia32 only and it doesn't work for 
> both ia32 pae and x86_64, but this function only check the ref counts 
> and doesn't update guest PTE entry, e.g. R/W bit.
>
> Another question is that how does guest update its guest page-table 
> after shadow mode is enabled?  As writable-pagetable can't be used 
> after shadow mode is enabled.

Shadow pagetable code has its own quite separate writeable pagetable 
logic, I believe. Which is why the non-shadow wrpt state must be 
flushed before switching to shadow pagetables.

  -- Keir


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>