168 lines
4.9 KiB
Diff
168 lines
4.9 KiB
Diff
Enable compatibility mode operation for HYPERVISOR_sched_op and
|
|
HYPERVISOR_set_timer_op.
|
|
|
|
Index: 2006-12-18/xen/arch/x86/x86_64/compat/entry.S
|
|
===================================================================
|
|
--- 2006-12-18.orig/xen/arch/x86/x86_64/compat/entry.S 2006-12-18 09:49:55.000000000 +0100
|
|
+++ 2006-12-18/xen/arch/x86/x86_64/compat/entry.S 2006-12-18 09:49:57.000000000 +0100
|
|
@@ -279,10 +279,8 @@ CFIX14:
|
|
.section .rodata, "a", @progbits
|
|
|
|
#define compat_platform_op domain_crash_synchronous
|
|
-#define compat_set_timer_op domain_crash_synchronous
|
|
#define compat_grant_table_op domain_crash_synchronous
|
|
#define compat_acm_op domain_crash_synchronous
|
|
-#define compat_arch_sched_op domain_crash_synchronous
|
|
#define compat_xenoprof_op domain_crash_synchronous
|
|
#define compat_sysctl domain_crash_synchronous
|
|
#define compat_domctl domain_crash_synchronous
|
|
@@ -317,7 +315,7 @@ ENTRY(compat_hypercall_table)
|
|
.quad compat_mmuext_op
|
|
.quad compat_acm_op
|
|
.quad compat_nmi_op
|
|
- .quad compat_arch_sched_op
|
|
+ .quad compat_sched_op
|
|
.quad compat_callback_op /* 30 */
|
|
.quad compat_xenoprof_op
|
|
.quad do_event_channel_op
|
|
@@ -359,7 +357,7 @@ ENTRY(compat_hypercall_args_table)
|
|
.byte 4 /* compat_mmuext_op */
|
|
.byte 1 /* compat_acm_op */
|
|
.byte 2 /* compat_nmi_op */
|
|
- .byte 2 /* compat_arch_sched_op */
|
|
+ .byte 2 /* compat_sched_op */
|
|
.byte 2 /* compat_callback_op */ /* 30 */
|
|
.byte 2 /* compat_xenoprof_op */
|
|
.byte 2 /* compat_event_channel_op */
|
|
Index: 2006-12-18/xen/common/Makefile
|
|
===================================================================
|
|
--- 2006-12-18.orig/xen/common/Makefile 2006-12-18 09:43:12.000000000 +0100
|
|
+++ 2006-12-18/xen/common/Makefile 2006-12-18 09:49:57.000000000 +0100
|
|
@@ -39,3 +39,8 @@ subdir-$(CONFIG_COMPAT) += compat
|
|
|
|
# Object file contains changeset and compiler information.
|
|
version.o: $(BASEDIR)/include/xen/compile.h
|
|
+
|
|
+ifeq ($(CONFIG_COMPAT),y)
|
|
+# extra dependencies
|
|
+schedule.o: compat/schedule.c
|
|
+endif
|
|
Index: 2006-12-18/xen/common/compat/schedule.c
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ 2006-12-18/xen/common/compat/schedule.c 2006-12-18 09:49:57.000000000 +0100
|
|
@@ -0,0 +1,51 @@
|
|
+/****************************************************************************
|
|
+ * schedule.c
|
|
+ *
|
|
+ */
|
|
+
|
|
+#include <compat/sched.h>
|
|
+
|
|
+#define COMPAT
|
|
+#define ret_t int
|
|
+
|
|
+#define do_sched_op compat_sched_op
|
|
+
|
|
+#define xen_sched_shutdown sched_shutdown
|
|
+CHECK_sched_shutdown;
|
|
+#undef xen_sched_shutdown
|
|
+
|
|
+#define xen_sched_remote_shutdown sched_remote_shutdown
|
|
+CHECK_sched_remote_shutdown;
|
|
+#undef xen_sched_remote_shutdown
|
|
+
|
|
+static int compat_poll(struct compat_sched_poll *compat)
|
|
+{
|
|
+ struct sched_poll native;
|
|
+
|
|
+#define XLAT_sched_poll_HNDL_ports(_d_, _s_) \
|
|
+ guest_from_compat_handle((_d_)->ports, (_s_)->ports)
|
|
+ XLAT_sched_poll(&native, compat);
|
|
+#undef XLAT_sched_poll_HNDL_ports
|
|
+
|
|
+ return do_poll(&native);
|
|
+}
|
|
+
|
|
+#define do_poll compat_poll
|
|
+#define sched_poll compat_sched_poll
|
|
+
|
|
+#include "../schedule.c"
|
|
+
|
|
+int compat_set_timer_op(u32 lo, s32 hi)
|
|
+{
|
|
+ return do_set_timer_op(((s64)hi << 32) | lo);
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Local variables:
|
|
+ * mode: C
|
|
+ * c-set-style: "BSD"
|
|
+ * c-basic-offset: 4
|
|
+ * tab-width: 4
|
|
+ * indent-tabs-mode: nil
|
|
+ * End:
|
|
+ */
|
|
Index: 2006-12-18/xen/common/schedule.c
|
|
===================================================================
|
|
--- 2006-12-18.orig/xen/common/schedule.c 2006-12-18 09:46:14.000000000 +0100
|
|
+++ 2006-12-18/xen/common/schedule.c 2006-12-18 09:49:57.000000000 +0100
|
|
@@ -13,6 +13,7 @@
|
|
*
|
|
*/
|
|
|
|
+#ifndef COMPAT
|
|
#include <xen/config.h>
|
|
#include <xen/init.h>
|
|
#include <xen/lib.h>
|
|
@@ -366,9 +367,13 @@ long do_sched_op_compat(int cmd, unsigne
|
|
return ret;
|
|
}
|
|
|
|
-long do_sched_op(int cmd, XEN_GUEST_HANDLE(void) arg)
|
|
+typedef long ret_t;
|
|
+
|
|
+#endif /* !COMPAT */
|
|
+
|
|
+ret_t do_sched_op(int cmd, XEN_GUEST_HANDLE(void) arg)
|
|
{
|
|
- long ret = 0;
|
|
+ ret_t ret = 0;
|
|
|
|
switch ( cmd )
|
|
{
|
|
@@ -445,6 +450,8 @@ long do_sched_op(int cmd, XEN_GUEST_HAND
|
|
return ret;
|
|
}
|
|
|
|
+#ifndef COMPAT
|
|
+
|
|
/* Per-domain one-shot-timer hypercall. */
|
|
long do_set_timer_op(s_time_t timeout)
|
|
{
|
|
@@ -736,6 +743,12 @@ void dump_runq(unsigned char key)
|
|
local_irq_restore(flags);
|
|
}
|
|
|
|
+#ifdef CONFIG_COMPAT
|
|
+#include "compat/schedule.c"
|
|
+#endif
|
|
+
|
|
+#endif /* !COMPAT */
|
|
+
|
|
/*
|
|
* Local variables:
|
|
* mode: C
|
|
Index: 2006-12-18/xen/include/xlat.lst
|
|
===================================================================
|
|
--- 2006-12-18.orig/xen/include/xlat.lst 2006-12-18 09:49:49.000000000 +0100
|
|
+++ 2006-12-18/xen/include/xlat.lst 2006-12-18 09:49:57.000000000 +0100
|
|
@@ -26,4 +26,7 @@
|
|
! memory_map memory.h
|
|
! memory_reservation memory.h
|
|
! translate_gpfn_list memory.h
|
|
+! sched_poll sched.h
|
|
+? sched_remote_shutdown sched.h
|
|
+? sched_shutdown sched.h
|
|
! vcpu_runstate_info vcpu.h
|