aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2010-10-24 13:15:06 +0100
committerKeir Fraser <keir@xen.org>2010-10-24 13:15:06 +0100
commita372e7a86e73f0580fd5ae03fb11555baffe2786 (patch)
treeb582af581b4e5821d23a66d3238fe15f07337e8a
parentd6b5b105305dcc2c200ab82b942489902ef7dc7a (diff)
downloadxen-a372e7a86e73f0580fd5ae03fb11555baffe2786.tar.gz
xen-a372e7a86e73f0580fd5ae03fb11555baffe2786.tar.bz2
xen-a372e7a86e73f0580fd5ae03fb11555baffe2786.zip
x86/kexec: fix very old regression and make compatible with modern Linux
c/s 13829 lost the (32-bit only) cpu_has_pae argument passed to the primary kernel's stub (in the 32-bit Xen case only), and Linux 2.6.27/.30 (32-/64-bit) introduced a new argument (for KEXEC_JUMP) which for now simply gets passed a hardcoded value. Signed-off-by: Jan Beulich <jbeulich@novell.com>
-rw-r--r--xen/arch/x86/machine_kexec.c12
-rw-r--r--xen/arch/x86/x86_64/compat_kexec.S1
-rw-r--r--xen/include/asm-x86/cpufeature.h2
3 files changed, 11 insertions, 4 deletions
diff --git a/xen/arch/x86/machine_kexec.c b/xen/arch/x86/machine_kexec.c
index d3f146854f..9e5e7abda5 100644
--- a/xen/arch/x86/machine_kexec.c
+++ b/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 *image)
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 */);
}
}
diff --git a/xen/arch/x86/x86_64/compat_kexec.S b/xen/arch/x86/x86_64/compat_kexec.S
index 6977e3eb5a..fc92af9c5e 100644
--- a/xen/arch/x86/x86_64/compat_kexec.S
+++ b/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 */
diff --git a/xen/include/asm-x86/cpufeature.h b/xen/include/asm-x86/cpufeature.h
index cd14b3b268..09d8307fca 100644
--- a/xen/include/asm-x86/cpufeature.h
+++ b/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)