| From 60b0a8c3d2480f3b57282b47b7cae7ee71c48635 Mon Sep 17 00:00:00 2001 |
| From: Matthias Kaehlcke <mka@chromium.org> |
| Date: Fri, 2 Jun 2017 14:46:16 -0700 |
| Subject: frv: declare jiffies to be located in the .data section |
| |
| From: Matthias Kaehlcke <mka@chromium.org> |
| |
| commit 60b0a8c3d2480f3b57282b47b7cae7ee71c48635 upstream. |
| |
| Commit 7c30f352c852 ("jiffies.h: declare jiffies and jiffies_64 with |
| ____cacheline_aligned_in_smp") removed a section specification from the |
| jiffies declaration that caused conflicts on some platforms. |
| |
| Unfortunately this change broke the build for frv: |
| |
| kernel/built-in.o: In function `__do_softirq': (.text+0x6460): relocation truncated to fit: R_FRV_GPREL12 against symbol |
| `jiffies' defined in *ABS* section in .tmp_vmlinux1 |
| kernel/built-in.o: In function `__do_softirq': (.text+0x6574): relocation truncated to fit: R_FRV_GPREL12 against symbol |
| `jiffies' defined in *ABS* section in .tmp_vmlinux1 |
| kernel/built-in.o: In function `pwq_activate_delayed_work': workqueue.c:(.text+0x15b9c): relocation truncated to fit: R_FRV_GPREL12 against |
| symbol `jiffies' defined in *ABS* section in .tmp_vmlinux1 |
| ... |
| |
| Add __jiffy_arch_data to the declaration of jiffies and use it on frv to |
| include the section specification. For all other platforms |
| __jiffy_arch_data (currently) has no effect. |
| |
| Fixes: 7c30f352c852 ("jiffies.h: declare jiffies and jiffies_64 with ____cacheline_aligned_in_smp") |
| Link: http://lkml.kernel.org/r/20170516221333.177280-1-mka@chromium.org |
| Signed-off-by: Matthias Kaehlcke <mka@chromium.org> |
| Reported-by: Guenter Roeck <linux@roeck-us.net> |
| Tested-by: Guenter Roeck <linux@roeck-us.net> |
| Reviewed-by: David Howells <dhowells@redhat.com> |
| Cc: Sudip Mukherjee <sudipm.mukherjee@gmail.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/frv/include/asm/timex.h | 6 ++++++ |
| include/linux/jiffies.h | 6 +++++- |
| 2 files changed, 11 insertions(+), 1 deletion(-) |
| |
| --- a/arch/frv/include/asm/timex.h |
| +++ b/arch/frv/include/asm/timex.h |
| @@ -16,5 +16,11 @@ static inline cycles_t get_cycles(void) |
| #define vxtime_lock() do {} while (0) |
| #define vxtime_unlock() do {} while (0) |
| |
| +/* This attribute is used in include/linux/jiffies.h alongside with |
| + * __cacheline_aligned_in_smp. It is assumed that __cacheline_aligned_in_smp |
| + * for frv does not contain another section specification. |
| + */ |
| +#define __jiffy_arch_data __attribute__((__section__(".data"))) |
| + |
| #endif |
| |
| --- a/include/linux/jiffies.h |
| +++ b/include/linux/jiffies.h |
| @@ -64,13 +64,17 @@ 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) |
| |
| +#ifndef __jiffy_arch_data |
| +#define __jiffy_arch_data |
| +#endif |
| + |
| /* |
| * 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 __cacheline_aligned_in_smp jiffies_64; |
| -extern unsigned long volatile __cacheline_aligned_in_smp jiffies; |
| +extern unsigned long volatile __cacheline_aligned_in_smp __jiffy_arch_data jiffies; |
| |
| #if (BITS_PER_LONG < 64) |
| u64 get_jiffies_64(void); |