|   | 
      | 
  
  
      | 
      | 
  
 
     | 
    | 
  
  
     | 
    | 
  
  
    |   | 
      | 
  
  
    | 
         
xen-devel
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
 
 |   
 
 | 
    | 
  
  
    |   | 
    |