[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 2/7] xen: xsm: flask: introduce XENMAPSPACE_gmfn_share for memory sharing
Hi Jan, I've updated the comments according to your previous suggestions, do they look good to you? 2018-02-01 18:23 GMT+08:00 Jan Beulich <JBeulich@xxxxxxxx>: >>>> On 30.01.18 at 18:50, <blackskygg@xxxxxxxxx> wrote: >> --- a/xen/arch/x86/mm.c >> +++ b/xen/arch/x86/mm.c >> @@ -4126,6 +4126,10 @@ int xenmem_add_to_physmap_one( >> } >> case XENMAPSPACE_gmfn_foreign: >> return p2m_add_foreign(d, idx, gfn_x(gpfn), >> extra.foreign_domid); >> + case XENMAPSPACE_gmfn_share: >> + gdprintk(XENLOG_WARNING, >> + "XENMAPSPACE_gmfn_share is currently not supported on >> x86\n"); >> + break; > > Please don't - a hypervisor log message isn't really useful here. It > should be the tool stack to disallow respective options on x86 > until that's implemented. > >> --- a/xen/include/public/memory.h >> +++ b/xen/include/public/memory.h >> @@ -227,6 +227,10 @@ DEFINE_XEN_GUEST_HANDLE(xen_machphys_mapping_t); >> Stage-2 using the Normal Memory >> Inner/Outer Write-Back Cacheable >> memory attribute. */ /* * GMFN from another dom, but with different privilege requirements. * * Suppose that (c), the current domain, is trying to map pages from (t) into * (d). gmfn_share dosen't require that (d) has privilege over (t). This * enables some usecases such as dom0 trying to share memory pages between * two unprivileged guests, which will otherwise be impossible using * gmfn_foreign. This is XENMEM_add_to_physmap_batch only, and currently ARM * only. * * The exact XSM privilege requirements are as follows: * * ================== ============== ===================== ===================== * (c) over (d) (c) over (t) (d) over (t) * ================== ============== ===================== ===================== * _foreign (dummy) XSM_TARGET NO XSM_TARGET * _share (dummy) XSM_TARGET XSM_TARGET NO * _foreign (flask) MMU__PHYSMAP NO MMU__MAP_READ/WRITE * _share (flask) MMU__PHYSMAP MMU__MAP_READ/WRITE MMU__SHARE * ================== ============== ===================== ===================== */ >> +#define XENMAPSPACE_gmfn_share 6 /* Same as *_gmfn_foreign, but this is >> + for a privileged dom to share pages >> + between two doms. */ >> + > > The comment doesn't make clear why XENMAPSPACE_gmfn_foreign > then can't be used. In particular it is left open how _both_ domains > would be specified. > > Also XENMAPSPACE_gmfn_foreign is restricted to > XENMEM_add_to_physmap_batch (a comment says so) - how about > this new one? According to the actual code changes you do, there's > no meaningful difference, in which case the restriction should be > named here as well. > >> --- a/xen/include/xsm/dummy.h >> +++ b/xen/include/xsm/dummy.h >> @@ -521,6 +521,12 @@ static XSM_INLINE int >> xsm_map_gmfn_foreign(XSM_DEFAULT_ARG struct domain *d, str >> return xsm_default_action(action, d, t); >> } >> >> +static XSM_INLINE int xsm_map_gmfn_share(XSM_DEFAULT_ARG struct domain *d, >> struct domain *t) > > Line length. > >> +{ /* * This action also requires that @current targets @d, but it has already been * checked somewhere higher in the call stack. * * Be aware that this is not an exact default equivalence of its flask variant * which also checks if @d and @t "are allowed to share memory pages", for we * don't have a proper default equivalence of such a check. */ >> + XSM_ASSERT_ACTION(XSM_TARGET); >> + return xsm_default_action(action, current->domain, t); > > How does this represent a proper default equivalent of ... > > --- a/xen/xsm/flask/hooks.c > +++ b/xen/xsm/flask/hooks.c > @@ -1196,6 +1196,12 @@ static int flask_map_gmfn_foreign(struct domain *d, > struct domain *t) > return domain_has_perm(d, t, SECCLASS_MMU, MMU__MAP_READ | > MMU__MAP_WRITE); > } > > +static int flask_map_gmfn_share(struct domain *d, struct domain *t) > +{ /* * This action also requires that @current has MMU__MAP_READ/WRITE over @d, * but that has already been checked somewhere higher in the call stack (for * example, by flask_add_to_physmap()). */ > + return current_has_perm(t, SECCLASS_MMU, MMU__MAP_READ | MMU__MAP_WRITE) > ?: > + domain_has_perm(d, t, SECCLASS_MMU, MMU__SHARE_MEM); > > ... this? Cheers, Zhongze Liu. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |