aboutsummaryrefslogtreecommitdiffstats
path: root/include/litmus/feather_trace.h
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2010-05-31 12:52:35 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2010-06-01 10:43:11 -0400
commit753fb14dfb0662e1d38758ffc6876c0ab1c7bd9e (patch)
treed03e024cfd3d815e039a4c2d55f7c35108271af8 /include/litmus/feather_trace.h
parent62c186fde48926a30f4e61332a805430dc1325cd (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.h14
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
37static 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