[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] The hypercall will fail and return EFAULT when the page becomes COW by forking process in linux
> On Mon, 2012-07-02 at 07:40 +0100, Wangzhenguo wrote: > > Hi, everybody > > I meet a trouble. in dom0, I call the xc_domain_set_pod_target > hypercall in one thread, and meanwhile fork a process in another thread, > it will return EFAULT by the function of copy_to_user failed in > hypervisor. I see that when forking a process, the page will become COW, > copy_to_user will cause a wirte protection page fault and return EFAULT. > > Is There any ideas for it? > > You must lock down any memory to be used as a hypercall argument. > > libxc provides the xc_hypercall_buffer interfaces specifically for this > reason. > > Also in general you should be using libxc instead of open coding your > own hypercalls. In this case xc_domain_get_pod_target() is the function > to use. Thanks for your reply. Yes, I use the libxl coding in my program(The simple code is just for emulating the COW page). The following is the context that causes the EFAULT error. There are many threads in my program, one thread(thread1) calls the libxl_set_memory_target to set pod, another thread(thread2) calls fork at between the t2 and t3 time. After fork, all pages are COW in the program. And I think any get operation hypercalls will fail when another thread calls fork at between the t2 and t3 time. time thread1 thread2 | | t0:call libxl_set_memory_target(libxl) | | | t1: xc_domain_set_pod_target(libxc) | | | t2: do_xen_hypercall(privcmd) | | fork t3: __HYPERVISOR_memory_op | | | t4: return EFAULT | > > Ian. > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |