diff options
author | David S. Miller <davem@davemloft.net> | 2015-07-23 03:41:16 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-07-23 03:41:16 -0400 |
commit | c5e40ee287db61a79af1746954ee03ebbf1ff8a3 (patch) | |
tree | 007da00e75e9b84766ac4868421705300e1e2e14 /kernel/trace/trace_branch.c | |
parent | 052831879945be0d9fad2216b127147c565ec1b1 (diff) | |
parent | c5dfd654d0ec0a28fe81e7bd4d4fd984a9855e09 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
net/bridge/br_mdb.c
br_mdb.c conflict was a function call being removed to fix a bug in
'net' but whose signature was changed in 'net-next'.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/trace/trace_branch.c')
-rw-r--r-- | kernel/trace/trace_branch.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/kernel/trace/trace_branch.c b/kernel/trace/trace_branch.c index a87b43f49eb4..e2e12ad3186f 100644 --- a/kernel/trace/trace_branch.c +++ b/kernel/trace/trace_branch.c | |||
@@ -36,9 +36,12 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect) | |||
36 | struct trace_branch *entry; | 36 | struct trace_branch *entry; |
37 | struct ring_buffer *buffer; | 37 | struct ring_buffer *buffer; |
38 | unsigned long flags; | 38 | unsigned long flags; |
39 | int cpu, pc; | 39 | int pc; |
40 | const char *p; | 40 | const char *p; |
41 | 41 | ||
42 | if (current->trace_recursion & TRACE_BRANCH_BIT) | ||
43 | return; | ||
44 | |||
42 | /* | 45 | /* |
43 | * I would love to save just the ftrace_likely_data pointer, but | 46 | * I would love to save just the ftrace_likely_data pointer, but |
44 | * this code can also be used by modules. Ugly things can happen | 47 | * this code can also be used by modules. Ugly things can happen |
@@ -49,10 +52,10 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect) | |||
49 | if (unlikely(!tr)) | 52 | if (unlikely(!tr)) |
50 | return; | 53 | return; |
51 | 54 | ||
52 | local_irq_save(flags); | 55 | raw_local_irq_save(flags); |
53 | cpu = raw_smp_processor_id(); | 56 | current->trace_recursion |= TRACE_BRANCH_BIT; |
54 | data = per_cpu_ptr(tr->trace_buffer.data, cpu); | 57 | data = this_cpu_ptr(tr->trace_buffer.data); |
55 | if (atomic_inc_return(&data->disabled) != 1) | 58 | if (atomic_read(&data->disabled)) |
56 | goto out; | 59 | goto out; |
57 | 60 | ||
58 | pc = preempt_count(); | 61 | pc = preempt_count(); |
@@ -81,8 +84,8 @@ probe_likely_condition(struct ftrace_branch_data *f, int val, int expect) | |||
81 | __buffer_unlock_commit(buffer, event); | 84 | __buffer_unlock_commit(buffer, event); |
82 | 85 | ||
83 | out: | 86 | out: |
84 | atomic_dec(&data->disabled); | 87 | current->trace_recursion &= ~TRACE_BRANCH_BIT; |
85 | local_irq_restore(flags); | 88 | raw_local_irq_restore(flags); |
86 | } | 89 | } |
87 | 90 | ||
88 | static inline | 91 | static inline |