]> xenbits.xensource.com Git - people/pauldu/mini-os.git/commitdiff
mini-os: support hvm_op hypercall
authorJuergen Gross <jgross@suse.com>
Thu, 18 Aug 2016 11:00:27 +0000 (13:00 +0200)
committerWei Liu <wei.liu2@citrix.com>
Wed, 24 Aug 2016 10:37:05 +0000 (11:37 +0100)
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@suse.com>
Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
arch/arm/setup.c
hypervisor.c
include/hypervisor.h
include/x86/x86_32/hypercall-x86_32.h
include/x86/x86_64/hypercall-x86_64.h

index 06afe46a413cc1cc2b06ac385608aef884f9d476..cbe67c69f7bb5c4aea8da3d1fb3bbbf3f7377dd8 100644 (file)
@@ -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;
index 1b61d9bca2f5d4fd62e7c277e509a5fc882e8dea..715cfe8e5f9fc44412ad004169f49f50cb56318f 100644 (file)
 
 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;
index 21b3566a2e89ee1163f14e0371d3dcdc866d0449..6e421b1447de351ce40be8072aa8e552990756a8 100644 (file)
@@ -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);
index 99a4ee3c81795cdea08c92f377fd9ea0bae45dc4..5c93464c02438bf8e40df8fb18617ebc7c1f60e6 100644 (file)
@@ -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__ */
 
 /*
index e00b3bddabf2e53bea3c4cf90528eff252cfcb3b..617181293a7c9e576143944c9ff5763167a3a634 100644 (file)
@@ -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__ */
 
 /*