[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.2-testing] x86: fix a few 32-on-64 compat mode issues
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1210688604 -3600 # Node ID 498e719bd90475f1cca4b407e3d62e95b80676be # Parent 80730d294e51e39a7f8f58708d1de2f735001392 x86: fix a few 32-on-64 compat mode issues - handle VCPUOP_register_vcpu_info and VCPUOP_get_physid (and add respective layout checks) - add missing structure size check for struct vcpu_info - add missing layout check for vcpu_set_periodic_timer - handle VCPUOP_set_singleshot_timer via argument translation as the structure sizes differ (due to padding in 64-bits) Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> xen-unstable changeset: 17612:945394931d9e5cb6094f5117acc0a9f55e1019d9 xen-unstable date: Mon May 12 10:15:07 2008 +0100 --- xen/arch/x86/x86_64/domain.c | 19 ++++++++++++++++--- xen/common/compat/domain.c | 20 ++++++++++++++++++-- xen/include/xlat.lst | 5 +++++ xen/tools/get-fields.sh | 1 - 4 files changed, 39 insertions(+), 6 deletions(-) diff -r 80730d294e51 -r 498e719bd904 xen/arch/x86/x86_64/domain.c --- a/xen/arch/x86/x86_64/domain.c Tue May 13 15:19:47 2008 +0100 +++ b/xen/arch/x86/x86_64/domain.c Tue May 13 15:23:24 2008 +0100 @@ -9,11 +9,23 @@ #include <asm/hypercall.h> #include <compat/vcpu.h> +#define xen_vcpu_info vcpu_info +CHECK_SIZE_(struct, vcpu_info); +#undef xen_vcpu_info + +#define xen_vcpu_register_vcpu_info vcpu_register_vcpu_info +CHECK_vcpu_register_vcpu_info; +#undef xen_vcpu_register_vcpu_info + +#define xen_vcpu_get_physid vcpu_get_physid +CHECK_vcpu_get_physid; +#undef xen_vcpu_get_physid + int arch_compat_vcpu_op( int cmd, struct vcpu *v, XEN_GUEST_HANDLE(void) arg) { - long rc = 0; + int rc = -ENOSYS; switch ( cmd ) { @@ -51,8 +63,9 @@ arch_compat_vcpu_op( break; } - default: - rc = -ENOSYS; + case VCPUOP_register_vcpu_info: + case VCPUOP_get_physid: + rc = arch_do_vcpu_op(cmd, v, arg); break; } diff -r 80730d294e51 -r 498e719bd904 xen/common/compat/domain.c --- a/xen/common/compat/domain.c Tue May 13 15:19:47 2008 +0100 +++ b/xen/common/compat/domain.c Tue May 13 15:23:24 2008 +0100 @@ -11,11 +11,15 @@ #include <xen/hypercall.h> #include <compat/vcpu.h> +#define xen_vcpu_set_periodic_timer vcpu_set_periodic_timer +CHECK_vcpu_set_periodic_timer; +#undef xen_vcpu_set_periodic_timer + int compat_vcpu_op(int cmd, int vcpuid, XEN_GUEST_HANDLE(void) arg) { struct domain *d = current->domain; struct vcpu *v; - long rc = 0; + int rc = 0; if ( (vcpuid < 0) || (vcpuid >= MAX_VIRT_CPUS) ) return -EINVAL; @@ -57,7 +61,6 @@ int compat_vcpu_op(int cmd, int vcpuid, case VCPUOP_is_up: case VCPUOP_set_periodic_timer: case VCPUOP_stop_periodic_timer: - case VCPUOP_set_singleshot_timer: case VCPUOP_stop_singleshot_timer: case VCPUOP_send_nmi: rc = do_vcpu_op(cmd, vcpuid, arg); @@ -74,6 +77,19 @@ int compat_vcpu_op(int cmd, int vcpuid, xlat_vcpu_runstate_info(&runstate.nat); if ( copy_to_guest(arg, &runstate.cmp, 1) ) rc = -EFAULT; + break; + } + + case VCPUOP_set_singleshot_timer: + { + struct compat_vcpu_set_singleshot_timer cmp; + struct vcpu_set_singleshot_timer *nat; + + if ( copy_from_guest(&cmp, arg, 1) ) + return -EFAULT; + nat = (void *)COMPAT_ARG_XLAT_VIRT_START(current->vcpu_id); + XLAT_vcpu_set_singleshot_timer(nat, &cmp); + rc = do_vcpu_op(cmd, vcpuid, guest_handle_from_ptr(nat, void)); break; } diff -r 80730d294e51 -r 498e719bd904 xen/include/xlat.lst --- a/xen/include/xlat.lst Tue May 13 15:19:47 2008 +0100 +++ b/xen/include/xlat.lst Tue May 13 15:23:24 2008 +0100 @@ -5,6 +5,7 @@ ? mmu_update xen.h ! mmuext_op xen.h ! start_info xen.h +? vcpu_info xen.h ? vcpu_time_info xen.h ! cpu_user_regs arch-x86/xen-@arch@.h ! trap_info arch-x86/xen.h @@ -40,6 +41,10 @@ ? sched_remote_shutdown sched.h ? sched_shutdown sched.h ? t_buf trace.h +? vcpu_get_physid vcpu.h +? vcpu_register_vcpu_info vcpu.h ! vcpu_runstate_info vcpu.h +? vcpu_set_periodic_timer vcpu.h +! vcpu_set_singleshot_timer vcpu.h ? xenoprof_init xenoprof.h ? xenoprof_passive xenoprof.h diff -r 80730d294e51 -r 498e719bd904 xen/tools/get-fields.sh --- a/xen/tools/get-fields.sh Tue May 13 15:19:47 2008 +0100 +++ b/xen/tools/get-fields.sh Tue May 13 15:23:24 2008 +0100 @@ -310,7 +310,6 @@ build_body () done echo " \\" echo "} while (0)" - echo "" } check_field () _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |