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

Re: [Xen-devel] [PATCH] docs: Document some more hypercalls



On Mon, 2012-03-26 at 18:06 +0100, Ian Jackson wrote:
> Some of these could probably do with some review from people who know
> what these hypercalls actually do.
> 
> Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> 
> ---
>  xen/include/public/arch-x86/xen.h |   30 ++++++++++++++++++++++++++++++
>  xen/include/public/arch-x86_64.h  |   16 ++++++++++++++++
>  xen/include/public/platform.h     |    4 ++++
>  3 files changed, 50 insertions(+), 0 deletions(-)
> 
> diff --git a/xen/include/public/arch-x86/xen.h 
> b/xen/include/public/arch-x86/xen.h
> index d663cef..1c186d7 100644
> --- a/xen/include/public/arch-x86/xen.h
> +++ b/xen/include/public/arch-x86/xen.h
> @@ -65,6 +65,11 @@ typedef unsigned long xen_pfn_t;
>   * SEGMENT DESCRIPTOR TABLES
>   */
>  /*
> + * ` enum neg_errnoval
> + * ` HYPERVISOR_set_gdt(const xen_pfn_t frames[], unsigned int entries);
> + * `
> + */
> +/*
>   * A number of GDT entries are reserved by Xen. These are not situated at the
>   * start of the GDT because some stupid OSes export hard-coded selector 
> values
>   * in their ABI. These hard-coded values are always near the start of the 
> GDT,
> @@ -83,6 +88,13 @@ typedef unsigned long xen_ulong_t;
>  
>  /*
>   * ` enum neg_errnoval
> + * ` HYPERVISOR_stack_switch(unsigned long ss, unsigned long esp);
> + * `
> + * Sets the stack segment and pointer for the current vcpu.
> + */
> +
> +/*
> + * ` enum neg_errnoval
>   * ` HYPERVISOR_set_trap_table(const struct trap_info traps[]);
>   * `
>   */
> @@ -183,6 +195,24 @@ typedef struct arch_shared_info arch_shared_info_t;
>  #endif /* !__ASSEMBLY__ */
>  
>  /*
> + * ` enum neg_errnoval
> + * ` HYPERVISOR_fpu_taskswitch(int set);
> + * `
> + * Sets (if set!=0) or clears (if set==0) CR0.TS.
> + */
> +
> +/*
> + * ` enum neg_errnoval
> + * ` HYPERVISOR_set_debugreg(int regno, unsigned long value);
> + *
> + * ` unsigned long
> + * ` HYPERVISOR_get_debugreg(int regno);
> + * For 0<=reg<=7, returns the debug register value.

Specifically these are the 8 architectural x86 debug registers %db0-7,
this is an x86 only hypercall

> + * For other values of reg, returns ((unsigned long)-EINVAL).
> + * (Unfortunately, this interface is defective.)

I guess you say this because you can't distinguish -EINVAL from a valid
value.

Since these are architectural registers this isn't as bad as it could be
I suppose, you would never expect to probe for these registers using the
EINVAL return code.

> + */
> +
> +/*
>   * Prefix forces emulation of some non-trapping instructions.
>   * Currently only CPUID.
>   */
> diff --git a/xen/include/public/arch-x86_64.h 
> b/xen/include/public/arch-x86_64.h
> index fbb2639..409805f 100644
> --- a/xen/include/public/arch-x86_64.h
> +++ b/xen/include/public/arch-x86_64.h
> @@ -25,3 +25,19 @@
>   */
>  
>  #include "arch-x86/xen.h"
> +
> +/*
> + * ` enum neg_errnoval
> + * ` HYPERVISOR_set_callbacks(unsigned long event_selector,
> + * `                          unsigned long event_address,
> + * `                          unsigned long failsafe_selector,
> + * `                          unsigned long failsafe_address);
> + * `
> + * Register for callbacks on events.  When an event (from an event
> + * channel) occurs, event_address is used as the value of eip.

I think this interface is somewhat deprecated in favour of
__HYPERVISOR_callback_op.

> + *
> + * A similar callback occurs if the segment selectors are invalid.
> + * failsafe_address is used as the value of eip.
> + *
> + * On x86_64, event_selector and failsafe_selector are ignored (???).

Right, x86_64 doesn't really have selectors, just a vestigial remnant of
selectors.

> + */


> diff --git a/xen/include/public/platform.h b/xen/include/public/platform.h
> index 7b8d6e8..68e4177 100644
> --- a/xen/include/public/platform.h
> +++ b/xen/include/public/platform.h
> @@ -490,6 +490,10 @@ struct xenpf_mem_hotadd
>      uint32_t flags;
>  };
>  
> +/*
> + * ` enum neg_errnoval
> + * ` HYPERVISOR_platform_op(const struct xen_platform_op*);
> + */
>  struct xen_platform_op {
>      uint32_t cmd;
>      uint32_t interface_version; /* XENPF_INTERFACE_VERSION */



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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