WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-3.2-testing] x86: fix a few 32-on-64 compat mode is

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-3.2-testing] x86: fix a few 32-on-64 compat mode issues
From: "Xen patchbot-3.2-testing" <patchbot-3.2-testing@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 13 May 2008 08:31:20 -0700
Delivery-date: Tue, 13 May 2008 08:31:59 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# 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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-3.2-testing] x86: fix a few 32-on-64 compat mode issues, Xen patchbot-3.2-testing <=