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-devel

[Xen-devel] [PATCH] fix a few compat mode issues

To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] fix a few compat mode issues
From: "Jan Beulich" <jbeulich@xxxxxxxxxx>
Date: Fri, 09 May 2008 10:07:09 +0100
Delivery-date: Fri, 09 May 2008 02:07:03 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
- 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>

Index: 2008-05-08/xen/arch/x86/x86_64/domain.c
===================================================================
--- 2008-05-08.orig/xen/arch/x86/x86_64/domain.c        2007-06-04 
08:35:35.000000000 +0200
+++ 2008-05-08/xen/arch/x86/x86_64/domain.c     2008-05-08 12:12:17.000000000 
+0200
@@ -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;
     }
 
Index: 2008-05-08/xen/common/compat/domain.c
===================================================================
--- 2008-05-08.orig/xen/common/compat/domain.c  2008-04-16 16:08:05.000000000 
+0200
+++ 2008-05-08/xen/common/compat/domain.c       2008-05-08 12:12:17.000000000 
+0200
@@ -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);
@@ -77,6 +80,19 @@ int compat_vcpu_op(int cmd, int vcpuid, 
         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;
+    }
+
     default:
         rc = arch_compat_vcpu_op(cmd, v, arg);
         break;
Index: 2008-05-08/xen/include/xlat.lst
===================================================================
--- 2008-05-08.orig/xen/include/xlat.lst        2008-05-07 12:21:37.000000000 
+0200
+++ 2008-05-08/xen/include/xlat.lst     2008-05-08 12:12:17.000000000 +0200
@@ -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
@@ -41,7 +42,11 @@
 ?      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
 !      power_register                  platform.h
Index: 2008-05-08/xen/tools/get-fields.sh
===================================================================
--- 2008-05-08.orig/xen/tools/get-fields.sh     2007-11-02 17:25:59.000000000 
+0100
+++ 2008-05-08/xen/tools/get-fields.sh  2008-05-08 12:12:17.000000000 +0200
@@ -310,7 +310,6 @@ build_body ()
        done
        echo " \\"
        echo "} while (0)"
-       echo ""
 }
 
 check_field ()



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] fix a few compat mode issues, Jan Beulich <=