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

RE: [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


 


Rackspace

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