Index: 2006-10-04/xen/arch/x86/x86_64/compat/entry.S
==================================================================---
2006-10-04.orig/xen/arch/x86/x86_64/compat/entry.S	2006-10-04 15:20:16.000000000
+0200
+++ 2006-10-04/xen/arch/x86/x86_64/compat/entry.S	2006-10-04 15:20:20.000000000
+0200
@@ -276,13 +276,18 @@ CFIX14:
         .quad CFLT14,CFIX14
 .previous
 
+compat_arch_sched_op:
+        # Ensure we return success even if we return via schedule_tail()
+        xorl  %eax,%eax
+        GET_GUEST_REGS(%r10)
+        movl  %eax,UREGS_rax(%r10)
+        jmp   compat_sched_op
+
 .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
Index: 2006-10-04/xen/common/Makefile
==================================================================---
2006-10-04.orig/xen/common/Makefile	2006-10-04 15:09:52.000000000 +0200
+++ 2006-10-04/xen/common/Makefile	2006-10-04 15:20:20.000000000 +0200
@@ -34,3 +34,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-10-04/xen/common/compat/schedule.c
==================================================================--- /dev/null
1970-01-01 00:00:00.000000000 +0000
+++ 2006-10-04/xen/common/compat/schedule.c	2006-10-04 15:20:20.000000000 +0200
@@ -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-10-04/xen/common/schedule.c
==================================================================---
2006-10-04.orig/xen/common/schedule.c	2006-10-04 15:11:03.000000000 +0200
+++ 2006-10-04/xen/common/schedule.c	2006-10-04 15:20:20.000000000 +0200
@@ -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)
 {
@@ -735,6 +742,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-10-04/xen/include/xlat.lst
==================================================================---
2006-10-04.orig/xen/include/xlat.lst	2006-10-04 15:20:09.000000000 +0200
+++ 2006-10-04/xen/include/xlat.lst	2006-10-04 15:20:20.000000000 +0200
@@ -25,4 +25,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
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel