|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [V2 PATCH 7/8] pvh dom0: Add and remove foreign pages
>>> On 23.11.13 at 01:03, Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> wrote:
> +static int xenmem_add_foreign_to_pmap(unsigned long fgfn, unsigned long gpfn,
> + domid_t foreign_domid)
> +{
> + p2m_type_t p2mt, p2mt_prev;
> + int rc = 0;
> + unsigned long prev_mfn, mfn = 0;
> + struct domain *fdom, *currd = current->domain;
> + struct page_info *page = NULL;
> +
> + if ( currd->domain_id == foreign_domid || foreign_domid == DOMID_SELF ||
> + !is_pvh_domain(currd) )
> + return -EINVAL;
> +
> + if ( !is_control_domain(currd) ||
> + (fdom = get_pg_owner(foreign_domid)) == NULL )
> + return -EPERM;
Is this the right approach (i.e. shouldn't this be an XSM call)? Cc-ing
Daniel...
> + /* following will take a refcnt on the mfn */
> + page = get_page_from_gfn(fdom, fgfn, &p2mt, P2M_ALLOC);
> + if ( !page || !p2m_is_valid(p2mt) )
> + {
> + if ( page )
> + put_page(page);
> + put_pg_owner(fdom);
> + return -EINVAL;
> + }
> + mfn = page_to_mfn(page);
> +
> + /* Remove previously mapped page if it is present. */
> + prev_mfn = mfn_x(get_gfn(currd, gpfn, &p2mt_prev));
> + if ( mfn_valid(prev_mfn) )
> + {
> + if ( is_xen_heap_mfn(prev_mfn) )
> + /* Xen heap frames are simply unhooked from this phys slot */
> + guest_physmap_remove_page(currd, gpfn, prev_mfn, 0);
> + else
> + /* Normal domain memory is freed, to avoid leaking memory. */
> + guest_remove_page(currd, gpfn);
> + }
> + /*
> + * Create the new mapping. Can't use guest_physmap_add_page() because
> it
> + * will update the m2p table which will result in mfn -> gpfn of dom0
> + * and not fgfn of domU.
> + */
> + if ( set_foreign_p2m_entry(currd, gpfn, _mfn(mfn)) == 0 )
> + {
> + dprintk(XENLOG_WARNING,
> + "guest_physmap_add_page failed. gpfn:%lx mfn:%lx fgfn:%lx\n",
> + gpfn, mfn, fgfn);
Either gdprintk() or printk(XENLOG_G_...). And to be useful this
needs to identify both the mapping domain (i.e. if not using
gdprink()) and the subject one.
> --- a/xen/include/public/memory.h
> +++ b/xen/include/public/memory.h
> @@ -208,7 +208,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_machphys_mapping_t);
> #define XENMAPSPACE_gmfn_range 3 /* GMFN range, XENMEM_add_to_physmap
> only. */
> #define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another dom,
> * XENMEM_add_to_physmap_range only.
> - */
> + * (PVH x86 only) */
Isn't this something that got introduced for ARM? If so, the way
you alter the comment is wrong.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |