[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4] x86/arm/mm: use gfn instead of pfn in p2m_get_mem_access/p2m_set_mem_access
On 06/29/2015 04:45 PM, Vitaly Kuznetsov wrote: > 'pfn' and 'start_pfn' are ambiguous, both these functions expect GFNs as > input. > > On x86 the interface of p2m_set_mem_access() in p2m.c doesn't match the > declaration in p2m-common.h as 'pfn' is being used instead of 'start_pfn'. > > On ARM both p2m_set_mem_access and p2m_get_mem_access interfaces don't match > declarations from p2m-common.h: p2m_set_mem_access uses 'pfn' instead of > 'start_pfn' and p2m_get_mem_access uses 'gpfn' instead of 'pfn'. > > Convert p2m_get_mem_access/p2m_set_mem_access (and __p2m_get_mem_access on > ARM) > interfaces to using gft_t instead of unsigned long and update all users of > these functions. > > There is also an issue in p2m_get_mem_access on x86: 'gfn' parameter passed to > gfn_lock/gfn_unlock is not defined. This code compiles only because of a > coincidence: gfn_lock/gfn_unlock are currently macros which don't use their > second argument. > > Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> > --- > Changes since v3: > - Comment codying style fix [Razvan Cojocaru] > - Use INVALID_GFN instead of ~0 and -1 [Andrew Cooper] > - Convert p2m_get_mem_access/p2m_set_mem_access interfaces to using gfn_t > [Andrew Cooper] But you missed a change... > @@ -1600,9 +1600,11 @@ bool_t p2m_mem_access_check(paddr_t gpa, unsigned long > gla, > return (p2ma == p2m_access_n2rwx); > } > > -/* Set access type for a region of pfns. > - * If start_pfn == -1ul, sets the default access type */ > -long p2m_set_mem_access(struct domain *d, unsigned long pfn, uint32_t nr, > +/* > + * Set access type for a region of gfns. > + * If gfn == INVALID_GFN, sets the default access type. > + */ > +long p2m_set_mem_access(struct domain *d, gfn_t gfn, uint32_t nr, > uint32_t start, uint32_t mask, xenmem_access_t > access) > { > struct p2m_domain *p2m = p2m_get_hostp2m(d); > @@ -1638,18 +1640,19 @@ long p2m_set_mem_access(struct domain *d, unsigned > long pfn, uint32_t nr, > return -EINVAL; > } > > - /* If request to set default access */ > - if ( pfn == ~0ul ) > + /* If request to set default access. */ > + if ( gfn_x(gfn) == INVALID_GFN ) > { > p2m->default_access = a; > return 0; > } > > p2m_lock(p2m); > - for ( pfn += start; nr > start; ++pfn ) > + for ( gfn = _gfn(gfn_x(gfn) + start); nr > start; > + gfn = _gfn(gfn_x(gfn) + 1) ) Now in p2m_set_mem_access(), rather than just using an unsigned long in the loop iterating over gfns, you do this thing where you convert gfn_t to unsigned long, add one, and then convert it back to gfn_t again. I can't see any comments in v3 that suggest you doing that, and it seems a bit clunky. Is that really necessary? Wouldn't it be better to declare a local variable? I'm not strongly opinionated on this one, it just seems a bit strange. Everything else looks good, thanks. -George _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |