[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |