mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
Enable compatibility mode operation for HYPERVISOR_sched_op and
HYPERVISOR_set_timer_op. Signed-off-by: Jan Beulich <jbeulich@novell.com>
This commit is contained in:
1 parent
75a2a59383
commit
2942f45e09
5 files changed
+76
-6
No files matched your search
@@ -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 */
|
||||
|
||||
@@ -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
|
||||
@@ -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:
|
||||
*/
|
||||
+15
-2
@@ -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
|
||||
|
||||
@@ -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
|
||||