[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-devel] guest physical to xen machine copy?



> You can try gfn_to_mfn.

Thanks!  Then if I have a page_info pointer and a gpfn, will
this code work for copying?  Or can it be made simpler?

Thanks,
Dan

#include <asm/p2m.h>
static int
copy_page_from_guest(struct page_info *dst_pi, XEN_GUEST_HANDLE(void) gpfn)
{
    int i;
    unsigned long dst_mfn, guest_mfn;
    void *dst_va, *guest_va;
    p2m_type_t t;

    if (is_pv_32on64_vcpu(current))
        gpfn.p = (void *)((unsigned long)gpfn.p & 0xfffffUL);
    dst_mfn = page_to_mfn(dst_pi);
    guest_mfn = gfn_to_mfn(current->domain,(unsigned long)gpfn.p,&t);
    if (t != p2m_ram_rw && t != p2m_ram_ro)
        return(0);  /* do I need to worry about p2m_ram_logdirty? */
    dst_va = map_domain_page_global(dst_mfn);
    guest_va = map_domain_page_global(guest_mfn);
/*  i = __copy_from_guest(dst_va, guest_va, PAGE_SIZE); */
    i = __copy_from_user(dst_va, guest_va, PAGE_SIZE);
    unmap_domain_page_global(guest_va);
    unmap_domain_page_global(dst_va);
    return (!i);
}


> -----Original Message-----
> From:
> Sent: Saturday, September 27, 2008 8:38 PM
> To: Dan Magenheimer; Xen-Devel (E-mail)
> Subject: RE: [Xen-devel] guest physical to xen machine copy?
>
>
> You can try gfn_to_mfn...
>
> Thanks,
> Kevin
>
> >From: Dan Magenheimer
> >Sent: 2008年9月28日 5:33
> >
> >Sorry for my poor x86 memory model knowlege...
> >
> >In some code I am working on, I currently pass the
> >address of a guest page from a domain via a hypercall
> >and in Xen either copy to or from the guest page
> >using:
> >
> >__copy_from_guest(xen_va, guest_va, PAGE_SIZE)
> >
> >or
> >
> >__copy_to_guest(guest_va, xen_va, PAGE_SIZE)
> >
> >where guest_va is declared as a XEN_GUEST_HANDLE(void)
> >
> >Now I'd like to switch the hypercall interface so
> >that the domain passes a guest physical address
> >(or guest physical frame number) instead of a guest
> >virtual address.
> >
> >I see code that does get_gpfn_from_mfn() but not
> >the opposite.  What do I need to do to copy a
> >page of data from a guest pfn to a Xen mfn (or
> >vice versa)?  And is a guest physical address
> >still referenced as a XEN_GUEST_HANDLE?
> >
> >It's probably very simple but I can't find it...
> >
> >Thanks,
> >Dan
> >
> >P.S. This has to work on 32- or 64-bit guests to
> >both 32- and 64-bit hypervisors.
> >
> >_______________________________________________
> >Xen-devel mailing list
> >Xen-devel@xxxxxxxxxxxxxxxxxxx
> >http://lists.xensource.com/xen-devel
> >
>

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.