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

Re: [Xen-devel] [patch] pagetable cleanups, next version



> > -    unsigned long *pt = map_domain_mem(pt_mfn << PAGE_SHIFT);
> > -    unsigned long match =
> > -        (readonly_gmfn << PAGE_SHIFT) | _PAGE_RW | _PAGE_PRESENT;
> > -    unsigned long mask = PAGE_MASK | _PAGE_RW | _PAGE_PRESENT;
> > +    l1_pgentry_t *pt = map_domain_mem(pt_mfn << PAGE_SHIFT);
> > +    l1_pgentry_t match;
> 
> I don't quite understand how this is equivalent.

Well, I admit it's a bit confusing because multiple things are changed
at the same time ...

> How does the match work now?

I quote a few more lines important lines from the patch:

> > +    unsigned long flags = _PAGE_RW | _PAGE_PRESENT;
> > +    match = l1e_create_pfn(readonly_gmfn, flags);

> > -#define MATCH_ENTRY(_i) (((pt[_i] ^ match) & mask) == 0)

> > -    if ( MATCH_ENTRY(readonly_gpfn & (L1_PAGETABLE_ENTRIES - 1)) &&
> > -         fix_entry(readonly_gpfn & (L1_PAGETABLE_ENTRIES - 1)) )
> > +    i = readonly_gpfn & (L1_PAGETABLE_ENTRIES - 1);
> > +    if ( !l1e_has_changed(&pt[i], &match, flags) && fix_entry(i) )

There is the new l?e_has_changed() function which can be used to compare
two page table entries.  It takes ptr's to two page table entries and a
bitmask with the page flags it should care about.  The function will
also deal with PAGE_MASK, so this is gone from the functions calling
into l?e_has_changed().

In that particular function I also ditched the MATCH_ENTRY() macro which
did something simliar to l?e_has_changed() in a less generic way.  That
makes the code look even more different, although it _should_ be the
same logic and it IMHO is also more readable.  I admit that I havn't
tested shadow mode though ...

CC'ing xen-devel again so others can have a look as well.

> Looks like create plus has changed is the new way?

Huh?  I lost you here ...

  Gerd

-- 
#define printk(args...) fprintf(stderr, ## args)

_______________________________________________
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®.