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 k

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Enable compatibility mode operation for kexec.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 05 Jan 2007 12:55:34 -0800
Delivery-date: Fri, 05 Jan 2007 13:50:07 -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 1168018481 0
# Node ID b8eeb4537e095e3f7cb556947427054e934d7b29
# Parent  762cb69ce3be132461498271f720812fe00ac463
Enable compatibility mode operation for kexec.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
 xen/arch/x86/x86_64/compat/entry.S |    2 +
 xen/common/Makefile                |    1 
 xen/common/compat/kexec.c          |   33 +++++++++++++++++++++++++++++
 xen/common/kexec.c                 |   42 +++++++++++++++++++++++++++++--------
 xen/include/xlat.lst               |    2 +
 5 files changed, 71 insertions(+), 9 deletions(-)

diff -r 762cb69ce3be -r b8eeb4537e09 xen/arch/x86/x86_64/compat/entry.S
--- a/xen/arch/x86/x86_64/compat/entry.S        Fri Jan 05 17:34:40 2007 +0000
+++ b/xen/arch/x86/x86_64/compat/entry.S        Fri Jan 05 17:34:41 2007 +0000
@@ -316,6 +316,7 @@ ENTRY(compat_hypercall_table)
         .quad compat_ni_hypercall
         .quad compat_sysctl             /* 35 */
         .quad compat_domctl
+        .quad compat_kexec_op
         .rept NR_hypercalls-((.-compat_hypercall_table)/8)
         .quad compat_ni_hypercall
         .endr
@@ -358,6 +359,7 @@ ENTRY(compat_hypercall_args_table)
         .byte 0 /* compat_ni_hypercall      */
         .byte 1 /* compat_sysctl            */  /* 35 */
         .byte 1 /* compat_domctl            */
+        .byte 2 /* compat_kexec_op          */
         .rept NR_hypercalls-(.-compat_hypercall_args_table)
         .byte 0 /* compat_ni_hypercall      */
         .endr
diff -r 762cb69ce3be -r b8eeb4537e09 xen/common/Makefile
--- a/xen/common/Makefile       Fri Jan 05 17:34:40 2007 +0000
+++ b/xen/common/Makefile       Fri Jan 05 17:34:41 2007 +0000
@@ -44,6 +44,7 @@ ifeq ($(CONFIG_COMPAT),y)
 # extra dependencies
 acm_ops.o: compat/acm_ops.c
 grant_table.o: compat/grant_table.c
+kexec.o: compat/kexec.c
 schedule.o: compat/schedule.c
 xenoprof.o: compat/xenoprof.c
 endif
diff -r 762cb69ce3be -r b8eeb4537e09 xen/common/compat/kexec.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/common/compat/kexec.c Fri Jan 05 17:34:41 2007 +0000
@@ -0,0 +1,33 @@
+/*
+ * compat/kexec.c
+ */
+
+#include <compat/kexec.h>
+
+#define COMPAT
+#define ret_t int
+
+#define do_kexec_op compat_kexec_op
+
+#undef kexec_get
+#define kexec_get(x)      compat_kexec_get_##x
+#define xen_kexec_range   compat_kexec_range
+#define xen_kexec_range_t compat_kexec_range_t
+
+#define kexec_load_unload compat_kexec_load_unload
+#define xen_kexec_load    compat_kexec_load
+#define xen_kexec_load_t  compat_kexec_load_t
+
+CHECK_kexec_exec;
+
+#include "../kexec.c"
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff -r 762cb69ce3be -r b8eeb4537e09 xen/common/kexec.c
--- a/xen/common/kexec.c        Fri Jan 05 17:34:40 2007 +0000
+++ b/xen/common/kexec.c        Fri Jan 05 17:34:41 2007 +0000
@@ -22,6 +22,10 @@
 #include <xen/version.h>
 #include <public/elfnote.h>
 
+#ifndef COMPAT
+
+typedef long ret_t;
+
 DEFINE_PER_CPU (crash_note_t, crash_notes);
 cpumask_t crash_saved_cpus;
 
@@ -143,21 +147,25 @@ static __init int register_crashdump_tri
 }
 __initcall(register_crashdump_trigger);
 
-static int kexec_get_reserve(xen_kexec_range_t *range)
+#define kexec_get(x)      kexec_get_##x
+
+#endif
+
+static int kexec_get(reserve)(xen_kexec_range_t *range)
 {
     range->start = kexec_crash_area.start;
     range->size = kexec_crash_area.size;
     return 0;
 }
 
-static int kexec_get_xen(xen_kexec_range_t *range)
+static int kexec_get(xen)(xen_kexec_range_t *range)
 {
     range->start = virt_to_maddr(_start);
     range->size = (unsigned long)_end - (unsigned long)_start;
     return 0;
 }
 
-static int kexec_get_cpu(xen_kexec_range_t *range)
+static int kexec_get(cpu)(xen_kexec_range_t *range)
 {
     if ( range->nr < 0 || range->nr >= num_present_cpus() )
         return -EINVAL;
@@ -167,7 +175,7 @@ static int kexec_get_cpu(xen_kexec_range
     return 0;
 }
 
-static int kexec_get_range(XEN_GUEST_HANDLE(void) uarg)
+static int kexec_get(range)(XEN_GUEST_HANDLE(void) uarg)
 {
     xen_kexec_range_t range;
     int ret = -EINVAL;
@@ -178,13 +186,13 @@ static int kexec_get_range(XEN_GUEST_HAN
     switch ( range.range )
     {
     case KEXEC_RANGE_MA_CRASH:
-        ret = kexec_get_reserve(&range);
+        ret = kexec_get(reserve)(&range);
         break;
     case KEXEC_RANGE_MA_XEN:
-        ret = kexec_get_xen(&range);
+        ret = kexec_get(xen)(&range);
         break;
     case KEXEC_RANGE_MA_CPU:
-        ret = kexec_get_cpu(&range);
+        ret = kexec_get(cpu)(&range);
         break;
     }
 
@@ -193,6 +201,8 @@ static int kexec_get_range(XEN_GUEST_HAN
 
     return ret;
 }
+
+#ifndef COMPAT
 
 static int kexec_load_get_bits(int type, int *base, int *bit)
 {
@@ -211,6 +221,8 @@ static int kexec_load_get_bits(int type,
     }
     return 0;
 }
+
+#endif
 
 static int kexec_load_unload(unsigned long op, XEN_GUEST_HANDLE(void) uarg)
 {
@@ -234,7 +246,11 @@ static int kexec_load_unload(unsigned lo
 
         BUG_ON(test_bit((base + !pos), &kexec_flags)); /* must be free */
 
+#ifndef COMPAT
         memcpy(image, &load.image, sizeof(*image));
+#else
+        XLAT_kexec_image(image, &load.image);
+#endif
 
         if ( !(ret = machine_kexec_load(load.type, base + !pos, image)) )
         {
@@ -259,6 +275,8 @@ static int kexec_load_unload(unsigned lo
     return ret;
 }
 
+#ifndef COMPAT
+
 static int kexec_exec(XEN_GUEST_HANDLE(void) uarg)
 {
     xen_kexec_exec_t exec;
@@ -292,7 +310,9 @@ static int kexec_exec(XEN_GUEST_HANDLE(v
     return -EINVAL; /* never reached */
 }
 
-long do_kexec_op(unsigned long op, XEN_GUEST_HANDLE(void) uarg)
+#endif
+
+ret_t do_kexec_op(unsigned long op, XEN_GUEST_HANDLE(void) uarg)
 {
     unsigned long flags;
     int ret = -EINVAL;
@@ -303,7 +323,7 @@ long do_kexec_op(unsigned long op, XEN_G
     switch ( op )
     {
     case KEXEC_CMD_kexec_get_range:
-        ret = kexec_get_range(uarg);
+        ret = kexec_get(range)(uarg);
         break;
     case KEXEC_CMD_kexec_load:
     case KEXEC_CMD_kexec_unload:
@@ -321,6 +341,10 @@ long do_kexec_op(unsigned long op, XEN_G
 
     return ret;
 }
+
+#if defined(CONFIG_COMPAT) && !defined(COMPAT)
+#include "compat/kexec.c"
+#endif
 
 /*
  * Local variables:
diff -r 762cb69ce3be -r b8eeb4537e09 xen/include/xlat.lst
--- a/xen/include/xlat.lst      Fri Jan 05 17:34:40 2007 +0000
+++ b/xen/include/xlat.lst      Fri Jan 05 17:34:41 2007 +0000
@@ -32,6 +32,8 @@
 !      gnttab_transfer                 grant_table.h
 ?      gnttab_unmap_grant_ref          grant_table.h
 ?      grant_entry                     grant_table.h
+?      kexec_exec                      kexec.h
+!      kexec_image                     kexec.h
 !      add_to_physmap                  memory.h
 !      foreign_memory_map              memory.h
 !      memory_exchange                 memory.h

_______________________________________________
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 kexec., Xen patchbot-unstable <=