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 + +#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 #include #include @@ -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