Messages in this thread Patch in this message | | | Subject | RE: Linux 2.6.38-rc1 doesn't boot | From | Shaohua Li <> | Date | Fri, 21 Jan 2011 15:18:59 +0800 |
| |
On Thu, 2011-01-20 at 23:08 +0800, Anvin, H Peter wrote: > (The patch will need to be paired with removing the hacks in the linker script.) > > -----Original Message----- > From: Ingo Molnar [mailto:mingo@elte.hu] > Sent: Thursday, January 20, 2011 3:26 AM > To: Li, Shaohua > Cc: Anvin, H Peter; Markus Trippelsdorf; Lu, Hongjiu; Linus Torvalds; Linux Kernel Mailing List; Sam Ravnborg > Subject: Re: Linux 2.6.38-rc1 doesn't boot > > > * Shaohua Li <shaohua.li@intel.com> wrote: > > > it's not a build failure, without it, my i386 kernel can't boot > > actually. > > Please try hpa's patch in this thread on top of very latest (today's) -git or latest > -tip: > > http://people.redhat.com/mingo/tip.git/README > > Does that result in a booting system? That way we can avoid most of the linker > script madness. Need some changes to make it compile and work on both 32 and 64 bit kernel. below one is working for me:
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index bf47007..d8f1c6d 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S @@ -34,11 +34,9 @@ OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT) #ifdef CONFIG_X86_32 OUTPUT_ARCH(i386) ENTRY(phys_startup_32) -jiffies = jiffies_64; #else OUTPUT_ARCH(i386:x86-64) ENTRY(phys_startup_64) -jiffies_64 = jiffies; #endif #if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) @@ -203,6 +201,7 @@ SECTIONS *(.jiffies) } jiffies = VVIRT(.jiffies); + jiffies_64 = jiffies; .vsyscall_3 ADDR(.vsyscall_0) + 3072: AT(VLOAD(.vsyscall_3)) { *(.vsyscall_3) diff --git a/kernel/timer.c b/kernel/timer.c index 43ca993..36cb5e3 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -41,6 +41,7 @@ #include <linux/sched.h> #include <linux/slab.h> +#include <asm/byteorder.h> #include <asm/uaccess.h> #include <asm/unistd.h> #include <asm/div64.h> @@ -53,6 +54,11 @@ u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES; EXPORT_SYMBOL(jiffies_64); +#if defined(__LITTLE_ENDIAN) || (BITS_PER_LONG >= 64) +asm(".global jiffies; jiffies = jiffies_64"); +#else +asm(".global jiffies; jiffies = jiffies_64 + 4"); +#endif /* * per-CPU timer vector definitions:
| |