PERFORCE change 135624 for review

Kip Macy kmacy at FreeBSD.org
Sun Feb 17 21:03:32 PST 2008


http://perforce.freebsd.org/chv.cgi?CH=135624

Change 135624 by kmacy at pandemonium:kmacy:xen31 on 2008/02/18 05:03:22

	add compatibility hypercall support

Affected files ...

.. //depot/projects/xen31/sys/i386/include/cpufunc.h#7 edit
.. //depot/projects/xen31/sys/i386/include/pmap.h#11 edit
.. //depot/projects/xen31/sys/i386/include/xen/hypercall.h#8 edit
.. //depot/projects/xen31/sys/i386/include/xen/hypervisor.h#6 edit
.. //depot/projects/xen31/sys/i386/include/xen/xen-os.h#6 edit
.. //depot/projects/xen31/sys/kern/subr_kdb.c#4 edit
.. //depot/projects/xen31/sys/xen/features.c#2 edit

Differences ...

==== //depot/projects/xen31/sys/i386/include/cpufunc.h#7 (text+ko) ====

@@ -45,7 +45,6 @@
 #ifdef XEN
 #include <machine/psl.h>
 #define NO_EXCHANGE
-#include <machine/xen/hypervisor.h>
 #include <machine/xen/xen-os.h>
 #include <vm/vm.h>
 #include <vm/vm_page.h>

==== //depot/projects/xen31/sys/i386/include/pmap.h#11 (text+ko) ====

@@ -194,7 +194,6 @@
 
 
 #ifdef XEN
-#include <machine/xen/hypervisor.h>
 #include <machine/xen/xen-os.h>
 #include <machine/xen/xenvar.h>
 #include <machine/xen/xenpmap.h>

==== //depot/projects/xen31/sys/i386/include/xen/hypercall.h#8 (text+ko) ====

@@ -30,11 +30,14 @@
 #ifndef __HYPERCALL_H__
 #define __HYPERCALL_H__
 
+#include <sys/systm.h>
 #include <xen/interface/xen.h>
 #include <xen/interface/sched.h>
 
 #define __STR(x) #x
 #define STR(x) __STR(x)
+#define	ENOXENSYS	38
+
 
 #if defined(XEN)
 #define HYPERCALL_STR(name)                                     \
@@ -171,6 +174,13 @@
 	return _hypercall1(int, fpu_taskswitch, set);
 }
 
+static inline int 
+HYPERVISOR_sched_op_compat(
+	int cmd, unsigned long arg)
+{
+	return _hypercall2(int, sched_op_compat, cmd, arg);
+}
+
 static inline int
 HYPERVISOR_sched_op(
 	int cmd, void *arg)
@@ -245,9 +255,19 @@
 
 static inline int
 HYPERVISOR_event_channel_op(
-	int cmd, void *op)
+	int cmd, void *arg)
 {
-	return _hypercall2(int, event_channel_op, cmd, op);
+	int rc = _hypercall2(int, event_channel_op, cmd, arg);
+
+	if (__predict_false(rc == -ENOXENSYS)) {
+		struct evtchn_op op;
+		op.cmd = cmd;
+		memcpy(&op.u, arg, sizeof(op.u));
+		rc = _hypercall1(int, event_channel_op_compat, &op);
+		memcpy(arg, &op.u, sizeof(op.u));
+	}
+
+	return (rc);
 }
 
 static inline int
@@ -266,9 +286,19 @@
 
 static inline int
 HYPERVISOR_physdev_op(
-	int cmd, void *physdev_op)
+	int cmd, void *arg)
 {
-	return _hypercall2(int, physdev_op, cmd, physdev_op);
+	int rc = _hypercall2(int, physdev_op, cmd, arg);
+
+	if (__predict_false(rc == -ENOXENSYS)) {
+		struct physdev_op op;
+		op.cmd = cmd;
+		memcpy(&op.u, arg, sizeof(op.u));
+		rc = _hypercall1(int, physdev_op_compat, &op);
+		memcpy(arg, &op.u, sizeof(op.u));
+	}
+
+	return (rc);
 }
 
 static inline int
@@ -312,10 +342,13 @@
 	struct sched_shutdown sched_shutdown = {
 		.reason = SHUTDOWN_suspend
 	};
-	return _hypercall3(int, sched_op, SCHEDOP_shutdown,
+	int rc = _hypercall3(int, sched_op, SCHEDOP_shutdown,
 			   &sched_shutdown, srec);
+	if (rc == -ENOXENSYS)
+		rc = _hypercall3(int, sched_op_compat, SCHEDOP_shutdown,
+				 SHUTDOWN_suspend, srec);
+	return (rc);
 }
-#ifdef notyet
 static inline int
 HYPERVISOR_nmi_op(
         unsigned long op, void *arg)
@@ -323,6 +356,7 @@
         return _hypercall2(int, nmi_op, op, arg);
 }
 
+#ifdef notyet
 static inline unsigned long
 HYPERVISOR_hvm_op(
     int op, void *arg)

==== //depot/projects/xen31/sys/i386/include/xen/hypervisor.h#6 (text+ko) ====

@@ -16,6 +16,7 @@
 #endif
 
 #include <sys/cdefs.h>
+#include <sys/systm.h>
 #include <xen/interface/xen.h>
 #include <xen/interface/platform.h>
 #include <xen/interface/event_channel.h>

==== //depot/projects/xen31/sys/i386/include/xen/xen-os.h#6 (text+ko) ====

@@ -4,10 +4,14 @@
  * random collection of macros and definition
  */
 
-#ifndef _OS_H_
-#define _OS_H_
+#ifndef _XEN_OS_H_
+#define _XEN_OS_H_
 #include <machine/param.h>
+#ifdef PAE
+#define CONFIG_X86_PAE
+#endif
 
+#include <xen/interface/xen.h>
 
 /* Force a proper event-channel callback from Xen. */
 void force_evtchn_callback(void);
@@ -70,7 +74,6 @@
 /* Everything below this point is not included by assembler (.S) files. */
 #ifndef __ASSEMBLY__
 #include <sys/types.h>
-#include <machine/xen/hypervisor.h>
 
 void printk(const char *fmt, ...);
 

==== //depot/projects/xen31/sys/kern/subr_kdb.c#4 (text+ko) ====

@@ -306,6 +306,7 @@
  */
 #ifdef XEN
 #include <machine/cpu.h> /* needed for btext/etext */
+#include <machine/xen/hypervisor.h>
 #endif
 void
 kdb_enter(const char *why, const char *msg)

==== //depot/projects/xen31/sys/xen/features.c#2 (text+ko) ====

@@ -1,3 +1,4 @@
+#include <sys/types.h>
 #include <machine/xen/hypervisor.h>
 #include <machine/xen/features.h>
 


More information about the p4-projects mailing list