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] page counts & type counts

To: 'Mike Sun' <msun@xxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: RE: [Xen-devel] page counts & type counts
From: "Tian, Kevin" <kevin.tian@xxxxxxxxx>
Date: Mon, 5 Jan 2009 14:04:26 +0800
Accept-language: en-US
Acceptlanguage: en-US
Cc:
Delivery-date: Sun, 04 Jan 2009 22:04:57 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <e4e579070901041918u2a860f6fv1dbce8e26860fcf@xxxxxxxxxxxxxx>
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/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <e4e579070901041918u2a860f6fv1dbce8e26860fcf@xxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: Aclu5G+owUXJo5GmQGmAEMI+OxQ7EAAFnc9g
Thread-topic: [Xen-devel] page counts & type counts
>From: Mike Sun
>Sent: Monday, January 05, 2009 11:18 AM
>
>Hi,
>
>I'm working with Xen 3.2 and having a hard time understanding what's
>going on in this piece of code used to do ref and type counting.
>
>int get_page_type(struct page_info *page, unsigned long type)
>{
>   ...
>        else if ( unlikely((x & PGT_count_mask) == 0) )
>        {
>            struct domain *d = page_get_owner(page);
>
>            /* Never allow a shadowed frame to go from type 
>count 0 to 1 */
>            if ( d && shadow_mode_enabled(d) )
>                shadow_remove_all_shadows(d->vcpu[0], 
>_mfn(page_to_mfn(page)));
>
>Does this mean that every time a page goes from read-only to writable,
>the shadow PTE mapping that page is destroyed and recreated?  In
>particular, if I wanted to restore writable access to a page during
>log-dirty mode (such as what occurs when a fault is taken and that
>page is then marked dirty and RW is not revoked in _sh_propagate()),
>will the shadow always be destroyed and then recreated?
>
>>From what I understand, shadow_remove_all_shadows() will remove all
>shadows of the gmfn, which should be a guest PT.  Basically, it'll
>remove all shadows inserted in the shadow_hash table for that gmfn.
>It IS NOT removing shadow PTEs mapping that gmfn.  Is this a correct
>understanding?  I don't understand how get_page_type() would know in
>the code that is there how the given page is actually a guest PT?
>

guest page table has a flag PGC_page_table if shadowed, which is
checked within shadow_remove_all_shadows. That means, for most
write-type page fault in log dirty mode, it's just a nop if faulting va
is a memory page. In latest Xen, type check is moved outside with
a new exception on oos l1:

 if ( d && shadow_mode_enabled(d)
      && (page->count_info & PGC_page_table)
      && !((page->shadow_flags & (1u<<29))
             && type == PGT_writable_page) )
      shadow_remove_all_shadows(d->vcpu[0], _mfn(page_to_mfn(page)));

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

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