UBUNTU: SAUCE: x86 fix up jiffies/jiffies_64 handling
authorAndy Whitcroft <apw@canonical.com>
Thu, 20 Jan 2011 22:07:14 +0000 (22:07 +0000)
committerLeann Ogasawara <leann.ogasawara@canonical.com>
Mon, 28 Mar 2011 13:53:03 +0000 (06:53 -0700)
Based on a patched by Anvin, H Peter <h.peter.anvin@intel.com> and Shaohua
Li <shaohua.li@intel.com>.

Signed-off-by: Andy Whitcroft <apw@canonical.com>

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

index bf47007..d8f1c6d 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)
@@ -203,6 +201,7 @@ SECTIONS
                *(.jiffies)
        }
        jiffies = VVIRT(.jiffies);
+       jiffies_64 = jiffies;
 
        .vsyscall_3 ADDR(.vsyscall_0) + 3072: AT(VLOAD(.vsyscall_3)) {
                *(.vsyscall_3)
index d645992..7928550 100644 (file)
@@ -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>
@@ -54,6 +55,14 @@ u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES;
 
 EXPORT_SYMBOL(jiffies_64);
 
+#ifdef CONFIG_X86
+#if defined(__LITTLE_ENDIAN) || (BITS_PER_LONG >= 64)
+asm(".global jiffies; jiffies = jiffies_64");
+#else
+asm(".global jiffies; jiffies = jiffies_64 + 4");
+#endif
+#endif
+
 /*
  * per-CPU timer vector definitions:
  */