diff options
author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2010-05-31 12:52:35 -0400 |
---|---|---|
committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2010-06-01 10:43:11 -0400 |
commit | 753fb14dfb0662e1d38758ffc6876c0ab1c7bd9e (patch) | |
tree | d03e024cfd3d815e039a4c2d55f7c35108271af8 /include/litmus/feather_trace.h | |
parent | 62c186fde48926a30f4e61332a805430dc1325cd (diff) |
Make platform-specific Feather-Trace depend on !CONFIG_DEBUG_RODATA
Feather-Trace rewrites instructions in the kernel's .text segment.
This segment may be write-protected if CONFIG_DEBUG_RODATA is selected.
In this case, fall back to the default flag-based Feather-Trace
implementation. In the future, we could either adopt the ftrace method
of rewriting .text addresses using non-.text mappings or we could
consider replacing Feather-Trace with ftrace altogether.
For now, this patch avoids unexpected runtime errors.
Diffstat (limited to 'include/litmus/feather_trace.h')
-rw-r--r-- | include/litmus/feather_trace.h | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/include/litmus/feather_trace.h b/include/litmus/feather_trace.h index f3bbfa0935ef..028dfb206fb0 100644 --- a/include/litmus/feather_trace.h +++ b/include/litmus/feather_trace.h | |||
@@ -19,7 +19,12 @@ static inline int fetch_and_dec(int *val) | |||
19 | return atomic_sub_return(1, (atomic_t*) val) + 1; | 19 | return atomic_sub_return(1, (atomic_t*) val) + 1; |
20 | } | 20 | } |
21 | 21 | ||
22 | #ifdef CONFIG_ARCH_HAS_FEATHER_TRACE | 22 | /* Don't use rewriting implementation if kernel text pages are read-only. |
23 | * Ftrace gets around this by using the identity mapping, but that's more | ||
24 | * effort that is warrented right now for Feather-Trace. | ||
25 | * Eventually, it may make sense to replace Feather-Trace with ftrace. | ||
26 | */ | ||
27 | #if defined(CONFIG_ARCH_HAS_FEATHER_TRACE) && !defined(CONFIG_DEBUG_RODATA) | ||
23 | 28 | ||
24 | #include <asm/feather_trace.h> | 29 | #include <asm/feather_trace.h> |
25 | 30 | ||
@@ -27,6 +32,13 @@ static inline int fetch_and_dec(int *val) | |||
27 | 32 | ||
28 | /* provide default implementation */ | 33 | /* provide default implementation */ |
29 | 34 | ||
35 | #include <asm/timex.h> /* for get_cycles() */ | ||
36 | |||
37 | static inline unsigned long long ft_timestamp(void) | ||
38 | { | ||
39 | return get_cycles(); | ||
40 | } | ||
41 | |||
30 | #define feather_callback | 42 | #define feather_callback |
31 | 43 | ||
32 | #define MAX_EVENTS 1024 | 44 | #define MAX_EVENTS 1024 |