|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] Question on struct grant table hypercall
On Tue, 2011-06-28 at 01:38 +0100, Daniel Castro wrote:
> Hello All,
>
>
> I am calling the hypercall to map the grant table on a HVM domain, on
> the code I have the cmd and struct gnttab_setup_table required to call
> the hypercall, yet on the struct you have XEN_GUEST_HANDLE as a type
> to a list of frames, my environment does not include the whole of xen,
> I have to include manually all the necessary structs and global
> variables needed. But the XEN_GUEST_HANDLE gives me an error, can I
> substitute the type with a simple array?
XEN_GUEST_HANDLE is a wrapper for a pointer rather than an array. IIRC
it was originally introduced to encapsulate some oddities of the
guest-pointer on the PPC architecture. These days I think the hypervisor
only uses to enforce alignment constraints on pointers. The tools also
use it to try and enforce type-safety for these pointers when hypercalls
are made from userspace (since the pointers need to be to memory which
is safe to use as a hypercall argument).
Although in principal you could replace the guest handle with a suitably
aligned pointer definition I think it would be wise to pull in the
necessary macros. They are defined in xen/include/public/arch-x86/xen.h.
You want the version corresponding to "__XEN_INTERFACE_VERSION__ >=
0x00030201". think you can also ignore the bits related to
XEN_GUEST_HANDLE_64 since they are for control domain use only. (IOW you
can ignore the override in xen/include/public/arch-x86/xen-x86_32.h).
You will also want some of the (__)DEFINE_XEN_GUEST_HANDLE calls from
xen/include/public/xen.h to define the baseline types you need. e.g.
your gnttab example below will require the
"__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long);" so that
XEN_GUEST_HANDLE(ulong) means something.
Ian.
>
> This is the code I am referring:
>
> //This code is slightly modified.
> /*
> * GNTTABOP_setup_table: Set up a grant table for <dom> comprising at least
> * <nr_frames> pages. The frame addresses are written to the <frame_list>.
> * Only <nr_frames> addresses are written, even if the table is larger.
> * NOTES:
> * 1. <dom> may be specified as DOMID_SELF.
> * 2. Only a sufficiently-privileged domain may specify <dom> != DOMID_SELF.
> * 3. Xen may not support more than a single grant-table page per domain.
> */
> #define GNTTABOP_setup_table 2
> struct gnttab_setup_table {
> /* IN parameters. */
> u32 dom;
> u32 nr_frames;
> /* OUT parameters. */
> u16 status; /* GNTST_* */
> //??????????????XEN_GUEST_HANDLE(ulong) frame_list;
> };
> typedef struct gnttab_setup_table gnttab_setup_table_t;
>
>
>
> Thanks for the help,
>
> Daniel
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|