[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V2 2/2] x86/mm: Make use of the default access param from xc_altp2m_create_view
On 12.11.2019 14:02, Jan Beulich wrote: > On 06.11.2019 16:35, Alexandru Stefan ISAILA wrote: >> --- a/xen/arch/x86/mm/p2m-ept.c >> +++ b/xen/arch/x86/mm/p2m-ept.c >> @@ -1345,13 +1345,14 @@ void setup_ept_dump(void) >> register_keyhandler('D', ept_dump_p2m_table, "dump VT-x EPT tables", >> 0); >> } >> >> -void p2m_init_altp2m_ept(struct domain *d, unsigned int i) >> +void p2m_init_altp2m_ept(struct domain *d, unsigned int i, >> + p2m_access_t default_access) >> { >> struct p2m_domain *p2m = d->arch.altp2m_p2m[i]; >> struct p2m_domain *hostp2m = p2m_get_hostp2m(d); >> struct ept_data *ept; >> >> - p2m->default_access = hostp2m->default_access; >> + p2m->default_access = default_access; >> p2m->domain = hostp2m->domain; >> >> p2m->global_logdirty = hostp2m->global_logdirty; > > All of this is not EPT-specific. Before adding more infrastructure to > cover for this (here: another function parameter), how about moving > these parts into vendor-independent code? Ok, I will move the non ept code in p2m_activate_altp2m(). > >> @@ -2572,17 +2574,36 @@ int p2m_init_altp2m_by_id(struct domain *d, unsigned >> int idx) >> altp2m_list_lock(d); >> >> if ( d->arch.altp2m_eptp[idx] == mfn_x(INVALID_MFN) ) >> - rc = p2m_activate_altp2m(d, idx); >> + rc = p2m_activate_altp2m(d, idx, hostp2m->default_access); >> >> altp2m_list_unlock(d); >> return rc; >> } >> >> -int p2m_init_next_altp2m(struct domain *d, uint16_t *idx) >> +int p2m_init_next_altp2m(struct domain *d, uint16_t *idx, >> + uint16_t hvmmem_default_access) >> { >> int rc = -EINVAL; >> unsigned int i; >> >> + static const p2m_access_t memaccess[] = { >> +#define ACCESS(ac) [XENMEM_access_##ac] = p2m_access_##ac >> + ACCESS(n), >> + ACCESS(r), >> + ACCESS(w), >> + ACCESS(rw), >> + ACCESS(x), >> + ACCESS(rx), >> + ACCESS(wx), >> + ACCESS(rwx), >> + ACCESS(rx2rw), >> + ACCESS(n2rwx), >> +#undef ACCESS >> + }; >> + >> + if ( hvmmem_default_access > XENMEM_access_default ) >> + return rc; >> + >> altp2m_list_lock(d); >> >> for ( i = 0; i < MAX_ALTP2M; i++ ) >> @@ -2590,7 +2611,7 @@ int p2m_init_next_altp2m(struct domain *d, uint16_t >> *idx) >> if ( d->arch.altp2m_eptp[i] != mfn_x(INVALID_MFN) ) >> continue; >> >> - rc = p2m_activate_altp2m(d, i); >> + rc = p2m_activate_altp2m(d, i, memaccess[hvmmem_default_access]); > > Aren't you open-coding xenmem_access_to_p2m_access() here? In > no event should there be two instances of the same static array. I did this because xenmem_access_to_p2m_access() is defined static in x86/mm/mem_access.c. If it's ok to have it defined in mem_access.h then I can go with that and drop this part of the code. Alex _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |