All, Small and naive question about the semantics of copy_to/from_guest. In Kernel space I have created a linked list lets say 10 elements. Now I have created similar list in hypervisor. Now passing the list_head from kernel using hypercall. Now how do I copy the element between kernel and hypervisor. 1. copy_from_guest(hyp_list_head, arg, 1) or copy_from_guest(hyp_list_head, arg, <num_of_elements_list>) 2. copy_to_guest(arg, hyp_list_head, 1) or copy_to_guest(arg, hyp_list_head, <num of element in list>) 2nd question: I did first one, but first element of list was not accessible in hypervisor space, why? It looks like I am doing something horribly wrong, so can someone point out that. Thanks for any help -tej _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On 26/04/2010 03:32, "Tej" <bewith.tej@gmail.com> wrote:> Now passing the list_head from kernel using hypercall. Now how do I > copy the element between kernel and hypervisor. > > 1. copy_from_guest(hyp_list_head, arg, 1) or > copy_from_guest(hyp_list_head, arg, <num_of_elements_list>) > 2. copy_to_guest(arg, hyp_list_head, 1) or copy_to_guest(arg, > hyp_list_head, <num of element in list>)The first of these. Copy_{to,from}_guest can copy arrays of structures, but since this is a linked structure you''d have to do the copy one element at a time.> 2nd question: > I did first one, but first element of list was not accessible in > hypervisor space, why?Well, if you are really only copying the list_head, the above should work. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On Mon, Apr 26, 2010 at 11:03 AM, Keir Fraser <keir.fraser@eu.citrix.com> wrote:> On 26/04/2010 03:32, "Tej" <bewith.tej@gmail.com> wrote: > >> Now passing the list_head from kernel using hypercall. Now how do I >> copy the element between kernel and hypervisor. >> >> 1. copy_from_guest(hyp_list_head, arg, 1) or >> copy_from_guest(hyp_list_head, arg, <num_of_elements_list>) >> 2. copy_to_guest(arg, hyp_list_head, 1) or copy_to_guest(arg, >> hyp_list_head, <num of element in list>) > > The first of these. Copy_{to,from}_guest can copy arrays of structures, but > since this is a linked structure you''d have to do the copy one element at a > time.you mean to say, in hypervisor space copy first element using copy_from_guest(hyp_list_head, arg, 1), extract the next address from it and then copy again the next element using "copy_from_guest(hyp_list_head->next, arg->next, 1)" ???> >> 2nd question: >> I did first one, but first element of list was not accessible in >> hypervisor space, why? > > Well, if you are really only copying the list_head, the above should work.Yes, I have carried out the sample test, by allocating small struct linked list and then passing between hypervisor and kernel copy_from_guest(hyp_list_head, arg, 1) is working correctly. But my actial code is not working. Ok let me put some more effort, if not I will push the code for review. Thanks for your help> > -- Keir > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel