[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-devel] guest physical to xen machine copy?
Hmmm... gfn_to_mfn() when used as below seems to just return the original gfn, e.g. guest_mfn = gfn_to_mfn(current->domain,gpfn,&t); Is this correct? Note that current->domain is a 32-bit paravirtualized domain and xen is 64-bit, if that matters. (Is there a better way if one knows that the domain is always pv?) > Use p2m_is_ram() instead of checking individual p2m ram type In copying the other direction (e.g. copy_page_TO_guest), I think I need to check for t==p2m_ram_rw, right? If so, the "Not necessarily true" comment in static inline _gfn_to_mfn in include/asm-x86/p2m.h worries me. Should it? Dan > -----Original Message----- > From: Keir Fraser [mailto:keir.fraser@xxxxxxxxxxxxx] > Sent: Monday, September 29, 2008 12:49 AM > To: Dan Magenheimer; Xen-Devel (E-mail); Tian, Kevin > Subject: 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 |