|
|
|
|
|
|
|
|
|
|
xen-devel
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
|
|
|
|
|