On 02/06/13 07:19, Kai Luo wrote:
Hi everyone:
    I am reading code of live migration process of hvm domain now.My question is that I can't find the transformation position that transform hvm domain‘s gpfn to mfn.That is,the method ,in file xc_linux_osdep.c,linux_privcmd_map_foreign_bulk(xc_interface *xch, xc_osdep_handle h,uint32_t dom, int prot,const xen_pfn_t *arr, int *err, unsigned int num),the list of xen_pfn_t contains the list of guest's mfns(gpfns in xen),for para-virtualization guests they are thransformed by the pfn_to_mfn() before assignment(in xc_domain_save()),for hvm guests however,I can not find a similar conversion process,they are directly conveyed to the dom's kernel directly without any transformation.So I continued to follow the process,finding the following key functions:
    privcmd_ioctl(struct file *file,unsigned int cmd, unsigned long data) 
     ->privcmd_ioctl_mmap_batch(udata, 2)
     ->->  traverse_pages(mmapcmd.num, sizeof(struct privcmd_mmap_entry),&pagelist,mmap_mfn_range, &state);
    Still no clue for the thransformation process,could you give any sugguestions?
    My second question is that is it possible that I give a list of hvm's mfns(not gpfns) and then get the contents held in memory in dom0?Does xen have any function of this kind?
Thank you all!
Jone    

Xen does the transformation.

All mapping functions take "Guest physical addresses", i.e. the values a guest puts in their pagetables.  For PV guests, this is MFNs but for HVM guests, only Xen can read the EPT/NPT pagetables to transform guest physical into host physical.

I am not aware of any supported interface which would allow dom0 to map raw mfns, nor should there be.  What is the problem you are trying to solve by doing this?

~Andrew