[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 0 of 2] Add libxc API that sets mem_access type for an array of gfns
Hi Aravindh, At 15:02 -0700 on 04 May (1336143748), Aravindh Puthiyaparambil wrote: > diff -r 9dda0efd8ce1 -r c180942992bf xen/arch/x86/mm/p2m-ept.c > --- a/xen/arch/x86/mm/p2m-ept.c Fri Apr 27 17:57:55 2012 +0200 > +++ b/xen/arch/x86/mm/p2m-ept.c Fri May 04 14:56:12 2012 -0700 > @@ -274,10 +274,13 @@ static int ept_next_level(struct p2m_dom > /* > * ept_set_entry() computes 'need_modify_vtd_table' for itself, > * by observing whether any gfn->mfn translations are modified. > + * If sync_deferred is not NULL, then the caller will take care of > + * calling ept_sync_domain() in the cases where it can be deferred. > */ > static int > ept_set_entry(struct p2m_domain *p2m, unsigned long gfn, mfn_t mfn, > - unsigned int order, p2m_type_t p2mt, p2m_access_t p2ma) > + unsigned int order, p2m_type_t p2mt, p2m_access_t p2ma, > + bool_t *sync_deferred) > { > ept_entry_t *table, *ept_entry = NULL; > unsigned long gfn_remainder = gfn; > @@ -309,6 +312,9 @@ ept_set_entry(struct p2m_domain *p2m, un > (target == 1 && hvm_hap_has_2mb(d)) || > (target == 0)); > > + if (sync_deferred) Xen coding style has spaces inside those parentheses. > + *sync_deferred = 1; > + > table = map_domain_page(ept_get_asr(d)); > > for ( i = ept_get_wl(d); i > target; i-- ) > @@ -345,8 +351,12 @@ ept_set_entry(struct p2m_domain *p2m, un > ept_entry_t new_entry = { .epte = 0 }; > > /* No need to flush if the old entry wasn't valid */ > - if ( !is_epte_present(ept_entry) ) > + if ( !is_epte_present(ept_entry) || (!target && sync_deferred) ) > + { > needs_sync = 0; > + if ( sync_deferred ) > + *sync_deferred = 0; I don't think you should do this -- you call this function in a loop and you may need to sync because of an earlier iteration. Better to only write a 1 to *sync_deferred once you know there's a sync to be done, and never to write a zero. > + } One comment on the rest of the patch: your calling function calls ept_sync_domain() directly if sync_deferred == 1. That's correct for now but it would be cleaner to use a sync() function pointer in the struct p2m_domain, the same as the other implementation-specific calls. Other than that, I think this looks pretty good to go in after 4.2 has branched. Cheers, Tim. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |