[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 07/22] mini-os: support hvm_op hypercall
Support the HYPERVISOR_hvm_op() hypercall which is needed for HVMlite. Add convenience functions hvm_get_parameter() and hvm_set_parameter(). Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Reviewed-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> --- arch/arm/setup.c | 15 --------------- hypervisor.c | 27 +++++++++++++++++++++++++++ include/hypervisor.h | 5 +++++ include/x86/x86_32/hypercall-x86_32.h | 6 ++++++ include/x86/x86_64/hypercall-x86_64.h | 6 ++++++ 5 files changed, 44 insertions(+), 15 deletions(-) diff --git a/arch/arm/setup.c b/arch/arm/setup.c index 06afe46..cbe67c6 100644 --- a/arch/arm/setup.c +++ b/arch/arm/setup.c @@ -25,21 +25,6 @@ extern char shared_info_page[PAGE_SIZE]; void *device_tree; -static int hvm_get_parameter(int idx, uint64_t *value) -{ - struct xen_hvm_param xhv; - int ret; - - xhv.domid = DOMID_SELF; - xhv.index = idx; - ret = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv); - if (ret < 0) { - BUG(); - } - *value = xhv.value; - return ret; -} - static void get_console(void) { uint64_t v = -1; diff --git a/hypervisor.c b/hypervisor.c index 1b61d9b..715cfe8 100644 --- a/hypervisor.c +++ b/hypervisor.c @@ -36,6 +36,33 @@ int in_callback; +#ifndef CONFIG_PARAVIRT +int hvm_get_parameter(int idx, uint64_t *value) +{ + struct xen_hvm_param xhv; + int ret; + + xhv.domid = DOMID_SELF; + xhv.index = idx; + ret = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv); + if ( ret < 0 ) + BUG(); + + *value = xhv.value; + return ret; +} + +int hvm_set_parameter(int idx, uint64_t value) +{ + struct xen_hvm_param xhv; + + xhv.domid = DOMID_SELF; + xhv.index = idx; + xhv.value = value; + return HYPERVISOR_hvm_op(HVMOP_set_param, &xhv); +} +#endif + void do_hypervisor_callback(struct pt_regs *regs) { unsigned long l1, l2, l1i, l2i; diff --git a/include/hypervisor.h b/include/hypervisor.h index 21b3566..6e421b1 100644 --- a/include/hypervisor.h +++ b/include/hypervisor.h @@ -23,6 +23,7 @@ #else #error "Unsupported architecture" #endif +#include <xen/hvm/hvm_op.h> #include <mini-os/traps.h> /* @@ -37,6 +38,10 @@ extern union start_info_union start_info_union; #define start_info (start_info_union.start_info) /* hypervisor.c */ +#ifndef CONFIG_PARAVIRT +int hvm_get_parameter(int idx, uint64_t *value); +int hvm_set_parameter(int idx, uint64_t value); +#endif void force_evtchn_callback(void); void do_hypervisor_callback(struct pt_regs *regs); void mask_evtchn(uint32_t port); diff --git a/include/x86/x86_32/hypercall-x86_32.h b/include/x86/x86_32/hypercall-x86_32.h index 99a4ee3..5c93464 100644 --- a/include/x86/x86_32/hypercall-x86_32.h +++ b/include/x86/x86_32/hypercall-x86_32.h @@ -324,6 +324,12 @@ HYPERVISOR_domctl( return _hypercall1(int, domctl, op); } +static inline unsigned long +HYPERVISOR_hvm_op(int op, void *arg) +{ + return _hypercall2(unsigned long, hvm_op, op, arg); +} + #endif /* __HYPERCALL_X86_32_H__ */ /* diff --git a/include/x86/x86_64/hypercall-x86_64.h b/include/x86/x86_64/hypercall-x86_64.h index e00b3bd..6171812 100644 --- a/include/x86/x86_64/hypercall-x86_64.h +++ b/include/x86/x86_64/hypercall-x86_64.h @@ -331,6 +331,12 @@ HYPERVISOR_domctl( return _hypercall1(int, domctl, op); } +static inline unsigned long +HYPERVISOR_hvm_op(int op, void *arg) +{ + return _hypercall2(unsigned long, hvm_op, op, arg); +} + #endif /* __HYPERCALL_X86_64_H__ */ /* -- 2.6.6 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |