Hello xen developers :) I''m reading source codes of xen and got a question in tool-stack part and got series of questions: In file tools/libxc/xc_linux_osdep.c, function linux_privcmd_map_foreign_bulk, I notice that mmap and ioctl IOCTL_PRIVCMD_MMAPBATCH_V2, are used for mapping a foreign memory into dom0. Is it because mmap is for mapping from /proc/xen/privcmd to dom0 memory and ioctl is for mapping from foreign memory (probably domU) into /proc/xen/privcmd? Also, I am trying to understand how ioctl IOCTL_PRIVCMD_MMAPBATCH_V2 works, and it is quite hard. In function privcmd_ioctl_mmap_batch, it allocates pages in dom0 side, and I don''t understand why do we need this allocation. If we map a page from foreign domain, just changing grant table is not enough? Please enlighten me. Also, I see that in function mmap_batch_fn (i.e., called with the newly allocated pages), xen_remap_domain_mfn_range function is called. Could you tell me what does this function (xen_remap_domain_mfn_range) do briefly. It would help me understand xen more! Best regards, Thomas
On 27/05/13 14:06, Sengul Thomas wrote:> Hello xen developers :) > > I''m reading source codes of xen and got a question in tool-stack part > and got series of questions: > > In file tools/libxc/xc_linux_osdep.c, function linux_privcmd_map_foreign_bulk, > I notice that mmap and ioctl IOCTL_PRIVCMD_MMAPBATCH_V2, are used > for mapping a foreign memory into dom0. > > Is it because mmap is for mapping from /proc/xen/privcmd to dom0 memory and > ioctl is for mapping from foreign memory (probably domU) into /proc/xen/privcmd? > > Also, I am trying to understand how ioctl IOCTL_PRIVCMD_MMAPBATCH_V2 works, > and it is quite hard. > In function privcmd_ioctl_mmap_batch, it allocates pages in dom0 side, > and I don''t understand why do we need this allocation. > If we map a page from foreign domain, just changing grant table is not enough? > Please enlighten me.A foreign mapping is unrelated to grant tables. Grant tables are used for a domain to negotiate to allow other domains access to parts of its memory. Foreign mappings are for the toolstack needing to play with a domains memory without its knowledge. It is the basis of domain create/migrate etc. ~Andrew> > Also, I see that in function mmap_batch_fn (i.e., called with the > newly allocated pages), > xen_remap_domain_mfn_range function is called. > Could you tell me what does this function (xen_remap_domain_mfn_range) > do briefly. > It would help me understand xen more! > > Best regards, > Thomas > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel
On Mon, 2013-05-27 at 22:06 +0900, Sengul Thomas wrote:> Hello xen developers :) > > I''m reading source codes of xen and got a question in tool-stack part > and got series of questions: > > In file tools/libxc/xc_linux_osdep.c, function linux_privcmd_map_foreign_bulk, > I notice that mmap and ioctl IOCTL_PRIVCMD_MMAPBATCH_V2, are used > for mapping a foreign memory into dom0. > > Is it because mmap is for mapping from /proc/xen/privcmd to dom0 memory and > ioctl is for mapping from foreign memory (probably domU) into /proc/xen/privcmd?As far as privcmd is concerned mmap is effectively used as a way to reserve some virtual address in the current process, while the ioctl is used to fill it with memory mapped from a foreign domain.> Also, I am trying to understand how ioctl IOCTL_PRIVCMD_MMAPBATCH_V2 works, > and it is quite hard. > In function privcmd_ioctl_mmap_batch, it allocates pages in dom0 side, > and I don''t understand why do we need this allocation.Just to give us a hole where we can then map the domU page, i.e. it just gives us the dom0 internal datastructures, like struct page *.> If we map a page from foreign domain, just changing grant table is not enough?No because as Andrew says grant tables and privileged foreign maps are not the same thing.> Also, I see that in function mmap_batch_fn (i.e., called with the > newly allocated pages), > xen_remap_domain_mfn_range function is called. > Could you tell me what does this function (xen_remap_domain_mfn_range) > do briefly.IIRC it calls a callback function for each PTE involved in mapping the given range of addresses, which we then use to make the foreign mapping. Ian.