Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 18 Jan 2011 22:29:21 +0000 (14:29 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 18 Jan 2011 22:29:21 +0000 (14:29 -0800)
* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86: Clear irqstack thread_info
  x86: Make relocatable kernel work with new binutils

arch/x86/kernel/irq_32.c
arch/x86/kernel/vmlinux.lds.S

index 48ff6dc..9974d21 100644 (file)
@@ -129,8 +129,7 @@ void __cpuinit irq_ctx_init(int cpu)
        irqctx = page_address(alloc_pages_node(cpu_to_node(cpu),
                                               THREAD_FLAGS,
                                               THREAD_ORDER));
-       irqctx->tinfo.task              = NULL;
-       irqctx->tinfo.exec_domain       = NULL;
+       memset(&irqctx->tinfo, 0, sizeof(struct thread_info));
        irqctx->tinfo.cpu               = cpu;
        irqctx->tinfo.preempt_count     = HARDIRQ_OFFSET;
        irqctx->tinfo.addr_limit        = MAKE_MM_SEG(0);
@@ -140,10 +139,8 @@ void __cpuinit irq_ctx_init(int cpu)
        irqctx = page_address(alloc_pages_node(cpu_to_node(cpu),
                                               THREAD_FLAGS,
                                               THREAD_ORDER));
-       irqctx->tinfo.task              = NULL;
-       irqctx->tinfo.exec_domain       = NULL;
+       memset(&irqctx->tinfo, 0, sizeof(struct thread_info));
        irqctx->tinfo.cpu               = cpu;
-       irqctx->tinfo.preempt_count     = 0;
        irqctx->tinfo.addr_limit        = MAKE_MM_SEG(0);
 
        per_cpu(softirq_ctx, cpu) = irqctx;
index bf47007..b34ab80 100644 (file)
@@ -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)
@@ -142,6 +140,15 @@ SECTIONS
                CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES)
 
                DATA_DATA
+               /*
+                * Workaround a binutils (2.20.51.0.12 to 2.21.51.0.3) bug.
+                * This makes jiffies relocatable in such binutils
+                */
+#ifdef CONFIG_X86_32
+               jiffies = jiffies_64;
+#else
+               jiffies_64 = jiffies;
+#endif
                CONSTRUCTORS
 
                /* rarely changed data like cpu maps */