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-unstable] Enable compatibility mode operation for H

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Enable compatibility mode operation for HYPERVISOR_multicall.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 05 Jan 2007 12:55:27 -0800
Delivery-date: Fri, 05 Jan 2007 13:50:15 -0800
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 Emmanuel Ackaouy <ack@xxxxxxxxxxxxx>
# Date 1168018474 0
# Node ID c2a82e026497733a315a46a3a39c69a58850b8bf
# Parent  e5f24d5f71acbe0fe52ffbbab3817a189dc57ed6
Enable compatibility mode operation for HYPERVISOR_multicall.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
 xen/arch/x86/x86_64/asm-offsets.c  |   12 ++++++++++++
 xen/arch/x86/x86_64/compat/entry.S |    1 -
 xen/common/compat/Makefile         |    2 ++
 xen/common/compat/multicall.c      |   31 +++++++++++++++++++++++++++++++
 xen/common/multicall.c             |    5 ++++-
 xen/include/asm-x86/multicall.h    |   25 +++++++++++++++++++++++++
 xen/include/xen/multicall.h        |   10 +++++++++-
 7 files changed, 83 insertions(+), 3 deletions(-)

diff -r e5f24d5f71ac -r c2a82e026497 xen/arch/x86/x86_64/asm-offsets.c
--- a/xen/arch/x86/x86_64/asm-offsets.c Fri Jan 05 17:34:34 2007 +0000
+++ b/xen/arch/x86/x86_64/asm-offsets.c Fri Jan 05 17:34:34 2007 +0000
@@ -135,5 +135,17 @@ void __dummy__(void)
     OFFSET(MULTICALL_result, struct multicall_entry, result);
     BLANK();
 
+#ifdef CONFIG_COMPAT
+    OFFSET(COMPAT_MULTICALL_op, struct compat_multicall_entry, op);
+    OFFSET(COMPAT_MULTICALL_arg0, struct compat_multicall_entry, args[0]);
+    OFFSET(COMPAT_MULTICALL_arg1, struct compat_multicall_entry, args[1]);
+    OFFSET(COMPAT_MULTICALL_arg2, struct compat_multicall_entry, args[2]);
+    OFFSET(COMPAT_MULTICALL_arg3, struct compat_multicall_entry, args[3]);
+    OFFSET(COMPAT_MULTICALL_arg4, struct compat_multicall_entry, args[4]);
+    OFFSET(COMPAT_MULTICALL_arg5, struct compat_multicall_entry, args[5]);
+    OFFSET(COMPAT_MULTICALL_result, struct compat_multicall_entry, result);
+    BLANK();
+#endif
+
     DEFINE(IRQSTAT_shift, LOG_2(sizeof(irq_cpustat_t)));
 }
diff -r e5f24d5f71ac -r c2a82e026497 xen/arch/x86/x86_64/compat/entry.S
--- a/xen/arch/x86/x86_64/compat/entry.S        Fri Jan 05 17:34:34 2007 +0000
+++ b/xen/arch/x86/x86_64/compat/entry.S        Fri Jan 05 17:34:34 2007 +0000
@@ -279,7 +279,6 @@ CFIX14:
 .section .rodata, "a", @progbits
 
 #define compat_platform_op domain_crash_synchronous
-#define compat_multicall 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
diff -r e5f24d5f71ac -r c2a82e026497 xen/common/compat/Makefile
--- a/xen/common/compat/Makefile        Fri Jan 05 17:34:34 2007 +0000
+++ b/xen/common/compat/Makefile        Fri Jan 05 17:34:34 2007 +0000
@@ -1,7 +1,9 @@ obj-y += domain.o
 obj-y += domain.o
 obj-y += kernel.o
 obj-y += memory.o
+obj-y += multicall.o
 obj-y += xlat.o
 
 # extra dependencies
 kernel.o:      ../kernel.c
+multicall.o:   ../multicall.c
diff -r e5f24d5f71ac -r c2a82e026497 xen/common/compat/multicall.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/common/compat/multicall.c     Fri Jan 05 17:34:34 2007 +0000
@@ -0,0 +1,31 @@
+/******************************************************************************
+ * multicall.c
+ */
+
+#include <xen/config.h>
+#include <xen/types.h>
+#include <xen/multicall.h>
+
+#define COMPAT
+typedef int ret_t;
+#undef do_multicall_call
+
+DEFINE_XEN_GUEST_HANDLE(multicall_entry_compat_t);
+#define multicall_entry      compat_multicall_entry
+#define multicall_entry_t    multicall_entry_compat_t
+#define do_multicall_call    compat_multicall_call
+#define call                 compat_call
+#define do_multicall(l, n)   compat_multicall(_##l, n)
+#define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t)
+
+#include "../multicall.c"
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff -r e5f24d5f71ac -r c2a82e026497 xen/common/multicall.c
--- a/xen/common/multicall.c    Fri Jan 05 17:34:34 2007 +0000
+++ b/xen/common/multicall.c    Fri Jan 05 17:34:34 2007 +0000
@@ -13,9 +13,12 @@
 #include <asm/current.h>
 #include <asm/hardirq.h>
 
+#ifndef COMPAT
 DEFINE_PER_CPU(struct mc_state, mc_state);
+typedef long ret_t;
+#endif
 
-long
+ret_t
 do_multicall(
     XEN_GUEST_HANDLE(multicall_entry_t) call_list, unsigned int nr_calls)
 {
diff -r e5f24d5f71ac -r c2a82e026497 xen/include/asm-x86/multicall.h
--- a/xen/include/asm-x86/multicall.h   Fri Jan 05 17:34:34 2007 +0000
+++ b/xen/include/asm-x86/multicall.h   Fri Jan 05 17:34:34 2007 +0000
@@ -35,6 +35,31 @@
               "r8",  "r9",  "r10", "r11" );                  \
     } while ( 0 )
 
+#define compat_multicall_call(_call)                              \
+    do {                                                          \
+        __asm__ __volatile__ (                                    \
+            "    movl  "STR(COMPAT_MULTICALL_op)"(%0),%%eax; "    \
+            "    leaq  compat_hypercall_table(%%rip),%%rdi; "     \
+            "    cmpl  $("STR(NR_hypercalls)"),%%eax; "           \
+            "    jae   2f; "                                      \
+            "    movq  (%%rdi,%%rax,8),%%rax; "                   \
+            "    movl  "STR(COMPAT_MULTICALL_arg0)"(%0),%%edi; "  \
+            "    movl  "STR(COMPAT_MULTICALL_arg1)"(%0),%%esi; "  \
+            "    movl  "STR(COMPAT_MULTICALL_arg2)"(%0),%%edx; "  \
+            "    movl  "STR(COMPAT_MULTICALL_arg3)"(%0),%%ecx; "  \
+            "    movl  "STR(COMPAT_MULTICALL_arg4)"(%0),%%r8d; "  \
+            "    callq *%%rax; "                                  \
+            "1:  movl  %%eax,"STR(COMPAT_MULTICALL_result)"(%0)\n"\
+            ".section .fixup,\"ax\"\n"                            \
+            "2:  movl  $-"STR(ENOSYS)",%%eax\n"                   \
+            "    jmp   1b\n"                                      \
+            ".previous\n"                                         \
+            : : "b" (_call)                                       \
+              /* all the caller-saves registers */                \
+            : "rax", "rcx", "rdx", "rsi", "rdi",                  \
+              "r8",  "r9",  "r10", "r11" );                       \
+    } while ( 0 )
+
 #else
 
 #define do_multicall_call(_call)                             \
diff -r e5f24d5f71ac -r c2a82e026497 xen/include/xen/multicall.h
--- a/xen/include/xen/multicall.h       Fri Jan 05 17:34:34 2007 +0000
+++ b/xen/include/xen/multicall.h       Fri Jan 05 17:34:34 2007 +0000
@@ -7,6 +7,9 @@
 
 #include <xen/percpu.h>
 #include <asm/multicall.h>
+#ifdef CONFIG_COMPAT
+#include <compat/xen.h>
+#endif
 
 #define _MCSF_in_multicall   0
 #define _MCSF_call_preempted 1
@@ -14,7 +17,12 @@
 #define MCSF_call_preempted  (1<<_MCSF_call_preempted)
 struct mc_state {
     unsigned long flags;
-    struct multicall_entry call;
+    union {
+        struct multicall_entry call;
+#ifdef CONFIG_COMPAT
+        struct compat_multicall_entry compat_call;
+#endif
+    };
 };
 
 DECLARE_PER_CPU(struct mc_state, mc_state);

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Enable compatibility mode operation for HYPERVISOR_multicall., Xen patchbot-unstable <=