[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 05/13] x86/altp2m: basic data structures and support routines.
At 16:04 +0100 on 07 Jul (1436285059), George Dunlap wrote: > On 07/01/2015 07:09 PM, Ed White wrote: > > diff --git a/xen/arch/x86/mm/mm-locks.h b/xen/arch/x86/mm/mm-locks.h > > index b4f035e..301ca59 100644 > > --- a/xen/arch/x86/mm/mm-locks.h > > +++ b/xen/arch/x86/mm/mm-locks.h > > @@ -217,7 +217,7 @@ declare_mm_lock(nestedp2m) > > #define nestedp2m_lock(d) mm_lock(nestedp2m, &(d)->arch.nested_p2m_lock) > > #define nestedp2m_unlock(d) mm_unlock(&(d)->arch.nested_p2m_lock) > > > > -/* P2M lock (per-p2m-table) > > +/* P2M lock (per-non-alt-p2m-table) > > * > > * This protects all queries and updates to the p2m table. > > * Queries may be made under the read lock but all modifications > > @@ -225,10 +225,44 @@ declare_mm_lock(nestedp2m) > > * > > * The write lock is recursive as it is common for a code path to look > > * up a gfn and later mutate it. > > + * > > + * Note that this lock shares its implementation with the altp2m > > + * lock (not the altp2m list lock), so the implementation > > + * is found there. > > */ > > > > declare_mm_rwlock(p2m); > > -#define p2m_lock(p) mm_write_lock(p2m, &(p)->lock); > > + > > +/* Alternate P2M list lock (per-domain) > > + * > > + * A per-domain lock that protects the list of alternate p2m's. > > + * Any operation that walks the list needs to acquire this lock. > > + * Additionally, before destroying an alternate p2m all VCPU's > > + * in the target domain must be paused. > > + */ > > + > > +declare_mm_lock(altp2mlist) > > +#define altp2m_lock(d) mm_lock(altp2mlist, &(d)->arch.altp2m_lock) > > +#define altp2m_unlock(d) mm_unlock(&(d)->arch.altp2m_lock) > > + > > +/* P2M lock (per-altp2m-table) > > + * > > + * This protects all queries and updates to the p2m table. > > + * Queries may be made under the read lock but all modifications > > + * need the main (write) lock. > > + * > > + * The write lock is recursive as it is common for a code path to look > > + * up a gfn and later mutate it. > > + */ > > + > > +declare_mm_rwlock(altp2m); > > +#define p2m_lock(p) \ > > +{ \ > > + if ( p2m_is_altp2m(p) ) \ > > + mm_write_lock(altp2m, &(p)->lock); \ > > + else \ > > + mm_write_lock(p2m, &(p)->lock); \ > > +} > > #define p2m_unlock(p) mm_write_unlock(&(p)->lock); > > #define gfn_lock(p,g,o) p2m_lock(p) > > #define gfn_unlock(p,g,o) p2m_unlock(p) > > I've just taken on the role of mm maintainer, and so this late in a > series, having Tim's approval and also having Andy's reviewed-by, I'd > normally just skim through and Ack it as a matter of course. But I just > wouldn't feel right giving this my maintainer's ack without > understanding the locking a bit better. So please bear with me here. > > I see in the cover letter that you "sandwiched" the altp2mlist lock > between p2m and altp2m at Tim's suggestion. But I can't find the > discussion where that was suggested (it doesn't seem to be in response > to v1 patch 5), I suggested changing the locking order here: http://lists.xenproject.org/archives/html/xen-devel/2015-01/msg01824.html Cheers, Tim. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |