[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] xc_map_foreign_range usage

  • To: "Alex V" <allex.vong@xxxxxxxxx>
  • From: "Derek Murray" <Derek.Murray@xxxxxxxxxxxx>
  • Date: Sun, 24 Feb 2008 11:11:00 +0000
  • Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
  • Delivery-date: Sun, 24 Feb 2008 03:11:25 -0800
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:reply-to:sender:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references:x-google-sender-auth; b=C3ZnFGd1stEG0zzWVBYwisVVj2Ar2k8dn9GMkMAyofhAhiShHVMHNqgfWfTtzVNdoc4/+PWvU9IW5DKziI+MGb2pcAC5y39uX4oyZThup/h1i3lWPiRVI9ePwY9SBge1uamK+rIc/DRNpfF+xpTzzQ9oOYPUArRjr24ZL+jfXfo=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

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 |

Let me know if you have any further questions.


Derek Murray.

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.