[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] kexec woes with 32-bit secondary kernel
>>> 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |