# HG changeset patch
# User Emmanuel Ackaouy <ack@xxxxxxxxxxxxx>
# Date 1168018475 0
# Node ID 883c0080dd05a212260f2f97701cbee60c411600
# Parent c2a82e026497733a315a46a3a39c69a58850b8bf
Enable compatibility mode operation for HYPERVISOR_sched_op and
HYPERVISOR_set_timer_op.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
xen/arch/x86/x86_64/compat/entry.S | 6 +---
xen/common/Makefile | 5 +++
xen/common/compat/schedule.c | 51 +++++++++++++++++++++++++++++++++++++
xen/common/schedule.c | 19 +++++++++++--
xen/include/xlat.lst | 3 ++
5 files changed, 77 insertions(+), 7 deletions(-)
diff -r c2a82e026497 -r 883c0080dd05 xen/arch/x86/x86_64/compat/entry.S
--- a/xen/arch/x86/x86_64/compat/entry.S Fri Jan 05 17:34:34 2007 +0000
+++ b/xen/arch/x86/x86_64/compat/entry.S Fri Jan 05 17:34:35 2007 +0000
@@ -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 */
diff -r c2a82e026497 -r 883c0080dd05 xen/common/Makefile
--- a/xen/common/Makefile Fri Jan 05 17:34:34 2007 +0000
+++ b/xen/common/Makefile Fri Jan 05 17:34:35 2007 +0000
@@ -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
diff -r c2a82e026497 -r 883c0080dd05 xen/common/compat/schedule.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/common/compat/schedule.c Fri Jan 05 17:34:35 2007 +0000
@@ -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:
+ */
diff -r c2a82e026497 -r 883c0080dd05 xen/common/schedule.c
--- a/xen/common/schedule.c Fri Jan 05 17:34:34 2007 +0000
+++ b/xen/common/schedule.c Fri Jan 05 17:34:35 2007 +0000
@@ -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)
-{
- long ret = 0;
+typedef long ret_t;
+
+#endif /* !COMPAT */
+
+ret_t do_sched_op(int cmd, XEN_GUEST_HANDLE(void) arg)
+{
+ ret_t ret = 0;
switch ( cmd )
{
@@ -444,6 +449,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
diff -r c2a82e026497 -r 883c0080dd05 xen/include/xlat.lst
--- a/xen/include/xlat.lst Fri Jan 05 17:34:34 2007 +0000
+++ b/xen/include/xlat.lst Fri Jan 05 17:34:35 2007 +0000
@@ -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
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|