[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [mini-os master] mini-os: support hvm_op hypercall
commit 80bc3a714282035d4b33bbdf8ba42e6d0c45a1bb Author: Juergen Gross <jgross@xxxxxxxx> AuthorDate: Thu Aug 18 13:00:27 2016 +0200 Commit: Wei Liu <wei.liu2@xxxxxxxxxx> CommitDate: Wed Aug 24 11:37:05 2016 +0100 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__ */ /* -- generated by git-patchbot for /home/xen/git/mini-os.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |