| From 7c30f352c852bae2715ad65ac4a38ca9af7d7696 Mon Sep 17 00:00:00 2001 |
| From: Matthias Kaehlcke <mka@chromium.org> |
| Date: Mon, 8 May 2017 15:55:05 -0700 |
| Subject: jiffies.h: declare jiffies and jiffies_64 with ____cacheline_aligned_in_smp |
| |
| From: Matthias Kaehlcke <mka@chromium.org> |
| |
| commit 7c30f352c852bae2715ad65ac4a38ca9af7d7696 upstream. |
| |
| jiffies_64 is defined in kernel/time/timer.c with |
| ____cacheline_aligned_in_smp, however this macro is not part of the |
| declaration of jiffies and jiffies_64 in jiffies.h. |
| |
| As a result clang generates the following warning: |
| |
| kernel/time/timer.c:57:26: error: section does not match previous declaration [-Werror,-Wsection] |
| __visible u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES; |
| ^ |
| include/linux/cache.h:39:36: note: expanded from macro '__cacheline_aligned_in_smp' |
| ^ |
| include/linux/cache.h:34:4: note: expanded from macro '__cacheline_aligned' |
| __section__(".data..cacheline_aligned"))) |
| ^ |
| include/linux/jiffies.h:77:12: note: previous attribute is here |
| extern u64 __jiffy_data jiffies_64; |
| ^ |
| include/linux/jiffies.h:70:38: note: expanded from macro '__jiffy_data' |
| |
| Link: http://lkml.kernel.org/r/20170403190200.70273-1-mka@chromium.org |
| Signed-off-by: Matthias Kaehlcke <mka@chromium.org> |
| Cc: "Jason A . Donenfeld" <Jason@zx2c4.com> |
| Cc: Grant Grundler <grundler@chromium.org> |
| Cc: Michael Davidson <md@google.com> |
| Cc: Greg Hackmann <ghackmann@google.com> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Nathan Chancellor <natechancellor@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| include/linux/jiffies.h | 11 +++-------- |
| 1 file changed, 3 insertions(+), 8 deletions(-) |
| |
| --- a/include/linux/jiffies.h |
| +++ b/include/linux/jiffies.h |
| @@ -1,6 +1,7 @@ |
| #ifndef _LINUX_JIFFIES_H |
| #define _LINUX_JIFFIES_H |
| |
| +#include <linux/cache.h> |
| #include <linux/math64.h> |
| #include <linux/kernel.h> |
| #include <linux/types.h> |
| @@ -63,19 +64,13 @@ extern int register_refined_jiffies(long |
| /* TICK_USEC is the time between ticks in usec assuming fake USER_HZ */ |
| #define TICK_USEC ((1000000UL + USER_HZ/2) / USER_HZ) |
| |
| -/* some arch's have a small-data section that can be accessed register-relative |
| - * but that can only take up to, say, 4-byte variables. jiffies being part of |
| - * an 8-byte variable may not be correctly accessed unless we force the issue |
| - */ |
| -#define __jiffy_data __attribute__((section(".data"))) |
| - |
| /* |
| * The 64-bit value is not atomic - you MUST NOT read it |
| * without sampling the sequence number in jiffies_lock. |
| * get_jiffies_64() will do this for you as appropriate. |
| */ |
| -extern u64 __jiffy_data jiffies_64; |
| -extern unsigned long volatile __jiffy_data jiffies; |
| +extern u64 __cacheline_aligned_in_smp jiffies_64; |
| +extern unsigned long volatile __cacheline_aligned_in_smp jiffies; |
| |
| #if (BITS_PER_LONG < 64) |
| u64 get_jiffies_64(void); |