You can see include/public/arch-x86/xen.h
/*
Structural guest handles introduced in 0x00030201. */
#if
__XEN_INTERFACE_VERSION__ >= 0x00030201
#define
___DEFINE_XEN_GUEST_HANDLE(name, type) \
typedef struct { type *p; } __guest_handle_ ## name
#else
#define
___DEFINE_XEN_GUEST_HANDLE(name, type) \
typedef type * __guest_handle_ ## name
#endif
#define
__DEFINE_XEN_GUEST_HANDLE(name, type) \
___DEFINE_XEN_GUEST_HANDLE(name, type); \
___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)
#define
DEFINE_XEN_GUEST_HANDLE(name) __DEFINE_XEN_GUEST_HANDLE(name, name)
#define
__XEN_GUEST_HANDLE(name)
__guest_handle_ ## name
#define
XEN_GUEST_HANDLE(name)
__XEN_GUEST_HANDLE(name)
#define
set_xen_guest_handle(hnd, val) do { (hnd).p = val; } while (0)
#ifdef
__XEN_TOOLS__
#define
get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0)
#endif
But I do
not know why they are in these forms. Maybe by doing this, compiler can do some
sort of type checking during compiling to avoid unintended programming errors? I
think some big people in the maillist can answer. J
Best
Regards
Shan
Haitao
From: 房海峰 [mailto:fanghaifeng@xxxxxxxxxx]
Sent: 2008年3月8日 11:02
To: Shan, Haitao
Cc: xen-devel
Subject: Re: RE: Re: RE:
[Xen-devel] where is the location of definitionof"do_xen_version"?
thank
you very much for your replying!
and
can you tell why xen do it in this way?
and
what is the "__guest_handle_ " ?
发送时间:
2008-03-07 20:54:54
收件人: fanghaifeng@xxxxxxxxxx; xen-devel
主题: RE: Re:
RE: [Xen-devel] where is the location of
definitionof"do_xen_version"?
Xen/common/kernel.c
#define DO(fn) long do_##fn
DO(xen_version) )(int cmd, XEN_GUEST_HANDLE(void) arg)
From:
xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
[mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of 房海峰
Sent: 2008年3月7日 18:50
To: xen-devel
Subject: Fw: Re: RE: [Xen-devel]
where is the location of definitionof"do_xen_version"?
发送时间:
2008-03-07 18:49:08
主题:
Re: RE: [Xen-devel] where is the location of definition
of"do_xen_version"?
but
the function you found is running in the user-space.
what
i need is the function as a hypercall.
发送时间:
2008-03-07 17:46:52
收件人: fanghaifeng@xxxxxxxxxx; xen-devel
主题:
RE: [Xen-devel] where is the location of definition
of"do_xen_version"?
88 static inline int do_xen_version(int xc_handle, int cmd, void *dest)
92 hypercall.op = __HYPERVISOR_xen_version;
93 hypercall.arg[0] = (unsigned long) cmd;
94 hypercall.arg[1] = (unsigned long) dest;
96 return do_xen_hypercall(xc_handle, &hypercall);
Ctags can help you find the definition a function.
Just run the following commands.
________________________________________
From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx [mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of 房海峰
Subject: [Xen-devel] where is the location of definition of "do_xen_version"?
Currently, i am studying the way of hypercall's implementation.
i have already known the flow of hypercall's execuation, and i decided to add a new hypercall into the Xen.
first, i want to know the detail of one hypercall function, for example, "do_xen_version", but i can not find
the location of definition of "do_xen_version". who can help me?
i have get some resualts as follows:
[root@vt-0 xen-3.1.0-src]# find ./ -name "*.*" | xargs grep "do_xen_version"
./xen/include/xen/hypercall.h:do_xen_version(
Binary file ./xen/common/built_in.o matches
Binary file ./xen/common/kernel.o matches
./xen/arch/x86/x86_32/entry.S: .long do_xen_version
./xen/arch/x86/x86_32/entry.S: .byte 2 /* do_xen_version */
Binary file ./xen/arch/x86/x86_32/built_in.o matches
Binary file ./xen/arch/x86/x86_32/entry.o matches
./xen/arch/x86/x86_64/entry.S: .quad do_xen_version
./xen/arch/x86/x86_64/entry.S: .byte 2 /* do_xen_version */
Binary file ./xen/arch/x86/built_in.o matches
Binary file ./xen/arch/x86/hvm/hvm.o matches
Binary file ./xen/arch/x86/hvm/built_in.o matches
./xen/arch/ia64/linux-xen/entry.S: data8 do_xen_version
./xen/arch/powerpc/powerpc64/hypercall_table.S: .quad do_xen_version
Binary file ./dist/install/boot/xen-syms-3.1.0 matches
./tools/libxc/xc_private.c: rc = do_xen_version(xc_handle, cmd, arg);
./tools/libxc/xc_private.h:static inline int do_xen_version(int xc_handle, int cmd, void *dest)
but the "do_xen_version" is not in those above.
________________________________________
_______________________________________________
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel