[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] xc_map_foreign_range usage
Hi Alex, On Sun, Feb 24, 2008 at 10:22 AM, Alex V <allex.vong@xxxxxxxxx> wrote: > It seemed pretty straightforward but in xenctrl.h it's stated that: > -------------------------------------------- > In Linux, the ring queue for the control channel is accessible by > mapping the shared_info_frame (from xc_domain_getinfo()) + 2048. The > structure stored there is of type control_if_t. > --------------------------------------------- > > which confuses me since I could not find info about this structure and > therefore cast ret value to it. I think this might be a spurious comment, as I cannot see anything about this structure in the source of either Xen or PV Linux. > All I need is basically just to have an access from dom0 to the buffer > I allocated at domU. Could you tell me where I am able to see simple > example which deals with that? > > Assume I already malloc'ed some buffer at domU and granted access to > it (have a reference number - ref) > > Then in dom0 I map it using all info > > void* my_addr = xc_map_foreign_range(handle, dom_id, rw, ref); > > How can I change/read the buffer I granted access to dom0 previously? > I casted it to unsigned long and got an address (I suppose) but > casting it to (char*) and trying to print it out caused an segfault. First of all some questions. Did you allocate the buffer in user-space or kernel-space? Which guest operating system are you using? Did you grant access to it using the Xen grant table mechanism? xc_map_foreign_range() allows you to map the machine frame number (essentially the real physical address) of a page of memory from another domain into Dom0. Therefore, the last parameter in your call should be a machine frame number, and not a grant reference. However, a better way to do this would be to use the xc_gnttab_* functions to map the page. These assume that you have created a grant reference for your buffer in the guest domain. Then you can use the code like this: uint32_t domid = ...; uint32_t ref = ...; int xcg = xc_gnttab_open(); void *my_addr = xc_gnttab_map_grant_ref(xcg, dom_id, ref, PROT_READ | PROT_WRITE); Let me know if you have any further questions. Regards, Derek Murray. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |