diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-generic/unaligned.h | 21 | ||||
-rw-r--r-- | include/linux/ftrace.h | 34 |
2 files changed, 31 insertions, 24 deletions
diff --git a/include/asm-generic/unaligned.h b/include/asm-generic/unaligned.h index 03cf5936bad6..1ac097279db1 100644 --- a/include/asm-generic/unaligned.h +++ b/include/asm-generic/unaligned.h | |||
@@ -4,22 +4,27 @@ | |||
4 | /* | 4 | /* |
5 | * This is the most generic implementation of unaligned accesses | 5 | * This is the most generic implementation of unaligned accesses |
6 | * and should work almost anywhere. | 6 | * and should work almost anywhere. |
7 | * | ||
8 | * If an architecture can handle unaligned accesses in hardware, | ||
9 | * it may want to use the linux/unaligned/access_ok.h implementation | ||
10 | * instead. | ||
11 | */ | 7 | */ |
12 | #include <asm/byteorder.h> | 8 | #include <asm/byteorder.h> |
13 | 9 | ||
10 | /* Set by the arch if it can handle unaligned accesses in hardware. */ | ||
11 | #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS | ||
12 | # include <linux/unaligned/access_ok.h> | ||
13 | #endif | ||
14 | |||
14 | #if defined(__LITTLE_ENDIAN) | 15 | #if defined(__LITTLE_ENDIAN) |
15 | # include <linux/unaligned/le_struct.h> | 16 | # ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS |
16 | # include <linux/unaligned/be_byteshift.h> | 17 | # include <linux/unaligned/le_struct.h> |
18 | # include <linux/unaligned/be_byteshift.h> | ||
19 | # endif | ||
17 | # include <linux/unaligned/generic.h> | 20 | # include <linux/unaligned/generic.h> |
18 | # define get_unaligned __get_unaligned_le | 21 | # define get_unaligned __get_unaligned_le |
19 | # define put_unaligned __put_unaligned_le | 22 | # define put_unaligned __put_unaligned_le |
20 | #elif defined(__BIG_ENDIAN) | 23 | #elif defined(__BIG_ENDIAN) |
21 | # include <linux/unaligned/be_struct.h> | 24 | # ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS |
22 | # include <linux/unaligned/le_byteshift.h> | 25 | # include <linux/unaligned/be_struct.h> |
26 | # include <linux/unaligned/le_byteshift.h> | ||
27 | # endif | ||
23 | # include <linux/unaligned/generic.h> | 28 | # include <linux/unaligned/generic.h> |
24 | # define get_unaligned __get_unaligned_be | 29 | # define get_unaligned __get_unaligned_be |
25 | # define put_unaligned __put_unaligned_be | 30 | # define put_unaligned __put_unaligned_be |
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index ae9504b4b67d..2018751cad9e 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
@@ -616,25 +616,27 @@ static inline void __ftrace_enabled_restore(int enabled) | |||
616 | #endif | 616 | #endif |
617 | } | 617 | } |
618 | 618 | ||
619 | #ifndef HAVE_ARCH_CALLER_ADDR | 619 | /* All archs should have this, but we define it for consistency */ |
620 | #ifndef ftrace_return_address0 | ||
621 | # define ftrace_return_address0 __builtin_return_address(0) | ||
622 | #endif | ||
623 | |||
624 | /* Archs may use other ways for ADDR1 and beyond */ | ||
625 | #ifndef ftrace_return_address | ||
620 | # ifdef CONFIG_FRAME_POINTER | 626 | # ifdef CONFIG_FRAME_POINTER |
621 | # define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) | 627 | # define ftrace_return_address(n) __builtin_return_address(n) |
622 | # define CALLER_ADDR1 ((unsigned long)__builtin_return_address(1)) | ||
623 | # define CALLER_ADDR2 ((unsigned long)__builtin_return_address(2)) | ||
624 | # define CALLER_ADDR3 ((unsigned long)__builtin_return_address(3)) | ||
625 | # define CALLER_ADDR4 ((unsigned long)__builtin_return_address(4)) | ||
626 | # define CALLER_ADDR5 ((unsigned long)__builtin_return_address(5)) | ||
627 | # define CALLER_ADDR6 ((unsigned long)__builtin_return_address(6)) | ||
628 | # else | 628 | # else |
629 | # define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) | 629 | # define ftrace_return_address(n) 0UL |
630 | # define CALLER_ADDR1 0UL | ||
631 | # define CALLER_ADDR2 0UL | ||
632 | # define CALLER_ADDR3 0UL | ||
633 | # define CALLER_ADDR4 0UL | ||
634 | # define CALLER_ADDR5 0UL | ||
635 | # define CALLER_ADDR6 0UL | ||
636 | # endif | 630 | # endif |
637 | #endif /* ifndef HAVE_ARCH_CALLER_ADDR */ | 631 | #endif |
632 | |||
633 | #define CALLER_ADDR0 ((unsigned long)ftrace_return_address0) | ||
634 | #define CALLER_ADDR1 ((unsigned long)ftrace_return_address(1)) | ||
635 | #define CALLER_ADDR2 ((unsigned long)ftrace_return_address(2)) | ||
636 | #define CALLER_ADDR3 ((unsigned long)ftrace_return_address(3)) | ||
637 | #define CALLER_ADDR4 ((unsigned long)ftrace_return_address(4)) | ||
638 | #define CALLER_ADDR5 ((unsigned long)ftrace_return_address(5)) | ||
639 | #define CALLER_ADDR6 ((unsigned long)ftrace_return_address(6)) | ||
638 | 640 | ||
639 | #ifdef CONFIG_IRQSOFF_TRACER | 641 | #ifdef CONFIG_IRQSOFF_TRACER |
640 | extern void time_hardirqs_on(unsigned long a0, unsigned long a1); | 642 | extern void time_hardirqs_on(unsigned long a0, unsigned long a1); |