diff options
author | Emmanuel Ackaouy <ack@xensource.com> | 2007-01-05 17:34:35 +0000 |
---|---|---|
committer | Emmanuel Ackaouy <ack@xensource.com> | 2007-01-05 17:34:35 +0000 |
commit | 2942f45e09fb239f07af6d980f6a60e5d92ae04e (patch) | |
tree | 7a7dee5b9952fd58b2252d00b730fdb044e28123 | |
parent | 75a2a59383d0e0bb7c89917a3fdad683bad4996c (diff) | |
download | xen-2942f45e09fb239f07af6d980f6a60e5d92ae04e.tar.gz xen-2942f45e09fb239f07af6d980f6a60e5d92ae04e.tar.bz2 xen-2942f45e09fb239f07af6d980f6a60e5d92ae04e.zip |
Enable compatibility mode operation for HYPERVISOR_sched_op and
HYPERVISOR_set_timer_op.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
-rw-r--r-- | xen/arch/x86/x86_64/compat/entry.S | 6 | ||||
-rw-r--r-- | xen/common/Makefile | 5 | ||||
-rw-r--r-- | xen/common/compat/schedule.c | 51 | ||||
-rw-r--r-- | xen/common/schedule.c | 17 | ||||
-rw-r--r-- | xen/include/xlat.lst | 3 |
5 files changed, 76 insertions, 6 deletions
diff --git a/xen/arch/x86/x86_64/compat/entry.S b/xen/arch/x86/x86_64/compat/entry.S index fa62fe4160..a7decff144 100644 --- a/xen/arch/x86/x86_64/compat/entry.S +++ b/xen/arch/x86/x86_64/compat/entry.S @@ -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 --git a/xen/common/Makefile b/xen/common/Makefile index 680fd60b8c..2beaa128c0 100644 --- a/xen/common/Makefile +++ b/xen/common/Makefile @@ -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 --git a/xen/common/compat/schedule.c b/xen/common/compat/schedule.c new file mode 100644 index 0000000000..5795279978 --- /dev/null +++ b/xen/common/compat/schedule.c @@ -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 --git a/xen/common/schedule.c b/xen/common/schedule.c index 4083426cb0..69fbb02634 100644 --- a/xen/common/schedule.c +++ b/xen/common/schedule.c @@ -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, unsigned long arg) 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_HANDLE(void) arg) 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 --git a/xen/include/xlat.lst b/xen/include/xlat.lst index df786c0d53..5ac6430a91 100644 --- a/xen/include/xlat.lst +++ b/xen/include/xlat.lst @@ -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 |