[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] guest physical to xen machine copy?
On 28/9/08 21:19, "Dan Magenheimer" <dan.magenheimer@xxxxxxxxxx> wrote: >> 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? Use p2m_is_ram() instead of checking individual p2m ram type enumerations. Use [un]map_domain_page instead of [un]map_domain_page_global. -- Keir > 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 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |