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

Re: [Xen-devel] kexec woes with 32-bit secondary kernel

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: Re: [Xen-devel] kexec woes with 32-bit secondary kernel
From: "Jan Beulich" <JBeulich@xxxxxxxxxx>
Date: Mon, 20 Sep 2010 13:56:00 +0100
Delivery-date: Mon, 20 Sep 2010 05:56:57 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <4C93AA320200007800017756@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/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <4C93AA320200007800017756@xxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
>>> On 17.09.10 at 17:49, "Jan Beulich" <JBeulich@xxxxxxxxxx> wrote:
> Ever since c/s 13829, the native (32-bit -> 32-bit) call to invoke the
> secondary kernel has been missing its fourth argument. Apparently
> this worked out because the respective stack location was non-zero.
> 
> Starting with Linux 2.6.27 (32-bit) and 2.6.30 (64-bit) a new
> argument is being expected by the secondary kernel, and again
> apparently out of pure luck the 64-bit -> 64-bit case still appears
> to work for those of our customers who want to use it.
> 
> The question really is whether this code has ever been tested
> with sufficiently recent kernels in all three variants (32->32, 64->64,
> and 64->32).
> 
> While it seems that putting together a patch to address this
> shouldn't be that difficult, a second question is how we can avoid
> getting into the same situation again when Linux extends the
> protocol again.

Below a tentative, untested patch.

Jan

--- 2010-09-20.orig/xen/arch/x86/machine_kexec.c
+++ 2010-09-20/xen/arch/x86/machine_kexec.c
@@ -23,7 +23,11 @@
 typedef void (*relocate_new_kernel_t)(
                 unsigned long indirection_page,
                 unsigned long *page_list,
-                unsigned long start_address);
+                unsigned long start_address,
+#ifdef __i386__
+                unsigned int cpu_has_pae,
+#endif
+                unsigned int preserve_context);
 
 extern int machine_kexec_get_xen(xen_kexec_range_t *range);
 
@@ -121,7 +125,11 @@ void machine_kexec(xen_kexec_image_t *im
 
         rnk = (relocate_new_kernel_t) image->page_list[1];
         (*rnk)(image->indirection_page, image->page_list,
-               image->start_address);
+               image->start_address,
+#ifdef __i386__
+               1 /* cpu_has_pae */,
+#endif
+               0 /* preserve_context */);
     }
 }
 
--- 2010-09-20.orig/xen/arch/x86/x86_64/compat_kexec.S
+++ 2010-09-20/xen/arch/x86/x86_64/compat_kexec.S
@@ -119,6 +119,7 @@ compatibility_mode:
         movl %eax, %ss
 
         /* Push arguments onto stack. */
+        pushl $0   /* 20(%esp) - preserve context */
         pushl $1   /* 16(%esp) - cpu has pae */
         pushl %ecx /* 12(%esp) - start address */
         pushl %edx /*  8(%esp) - page list */
--- 2010-09-20.orig/xen/include/asm-x86/cpufeature.h
+++ 2010-09-20/xen/include/asm-x86/cpufeature.h
@@ -139,7 +139,6 @@
 #define cpu_has_de             boot_cpu_has(X86_FEATURE_DE)
 #define cpu_has_pse            boot_cpu_has(X86_FEATURE_PSE)
 #define cpu_has_tsc            boot_cpu_has(X86_FEATURE_TSC)
-#define cpu_has_pae            boot_cpu_has(X86_FEATURE_PAE)
 #define cpu_has_pge            boot_cpu_has(X86_FEATURE_PGE)
 #define cpu_has_pat            boot_cpu_has(X86_FEATURE_PAT)
 #define cpu_has_apic           boot_cpu_has(X86_FEATURE_APIC)
@@ -165,7 +164,6 @@
 #define cpu_has_de             1
 #define cpu_has_pse            1
 #define cpu_has_tsc            1
-#define cpu_has_pae            1
 #define cpu_has_pge            1
 #define cpu_has_pat            1
 #define cpu_has_apic           boot_cpu_has(X86_FEATURE_APIC)



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