diff options
Diffstat (limited to 'kernel/trace/trace_irqsoff.c')
| -rw-r--r-- | kernel/trace/trace_irqsoff.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c index ece6cfb649fa..a7db7f040ae0 100644 --- a/kernel/trace/trace_irqsoff.c +++ b/kernel/trace/trace_irqsoff.c | |||
| @@ -95,7 +95,7 @@ irqsoff_tracer_call(unsigned long ip, unsigned long parent_ip) | |||
| 95 | disabled = atomic_inc_return(&data->disabled); | 95 | disabled = atomic_inc_return(&data->disabled); |
| 96 | 96 | ||
| 97 | if (likely(disabled == 1)) | 97 | if (likely(disabled == 1)) |
| 98 | trace_function(tr, data, ip, parent_ip, flags); | 98 | trace_function(tr, data, ip, parent_ip, flags, preempt_count()); |
| 99 | 99 | ||
| 100 | atomic_dec(&data->disabled); | 100 | atomic_dec(&data->disabled); |
| 101 | } | 101 | } |
| @@ -130,6 +130,7 @@ check_critical_timing(struct trace_array *tr, | |||
| 130 | unsigned long latency, t0, t1; | 130 | unsigned long latency, t0, t1; |
| 131 | cycle_t T0, T1, delta; | 131 | cycle_t T0, T1, delta; |
| 132 | unsigned long flags; | 132 | unsigned long flags; |
| 133 | int pc; | ||
| 133 | 134 | ||
| 134 | /* | 135 | /* |
| 135 | * usecs conversion is slow so we try to delay the conversion | 136 | * usecs conversion is slow so we try to delay the conversion |
| @@ -141,6 +142,8 @@ check_critical_timing(struct trace_array *tr, | |||
| 141 | 142 | ||
| 142 | local_save_flags(flags); | 143 | local_save_flags(flags); |
| 143 | 144 | ||
| 145 | pc = preempt_count(); | ||
| 146 | |||
| 144 | if (!report_latency(delta)) | 147 | if (!report_latency(delta)) |
| 145 | goto out; | 148 | goto out; |
| 146 | 149 | ||
| @@ -150,7 +153,7 @@ check_critical_timing(struct trace_array *tr, | |||
| 150 | if (!report_latency(delta)) | 153 | if (!report_latency(delta)) |
| 151 | goto out_unlock; | 154 | goto out_unlock; |
| 152 | 155 | ||
| 153 | trace_function(tr, data, CALLER_ADDR0, parent_ip, flags); | 156 | trace_function(tr, data, CALLER_ADDR0, parent_ip, flags, pc); |
| 154 | 157 | ||
| 155 | latency = nsecs_to_usecs(delta); | 158 | latency = nsecs_to_usecs(delta); |
| 156 | 159 | ||
| @@ -173,8 +176,8 @@ out_unlock: | |||
| 173 | out: | 176 | out: |
| 174 | data->critical_sequence = max_sequence; | 177 | data->critical_sequence = max_sequence; |
| 175 | data->preempt_timestamp = ftrace_now(cpu); | 178 | data->preempt_timestamp = ftrace_now(cpu); |
| 176 | tracing_reset(data); | 179 | tracing_reset(tr, cpu); |
| 177 | trace_function(tr, data, CALLER_ADDR0, parent_ip, flags); | 180 | trace_function(tr, data, CALLER_ADDR0, parent_ip, flags, pc); |
| 178 | } | 181 | } |
| 179 | 182 | ||
| 180 | static inline void | 183 | static inline void |
| @@ -203,11 +206,11 @@ start_critical_timing(unsigned long ip, unsigned long parent_ip) | |||
| 203 | data->critical_sequence = max_sequence; | 206 | data->critical_sequence = max_sequence; |
| 204 | data->preempt_timestamp = ftrace_now(cpu); | 207 | data->preempt_timestamp = ftrace_now(cpu); |
| 205 | data->critical_start = parent_ip ? : ip; | 208 | data->critical_start = parent_ip ? : ip; |
| 206 | tracing_reset(data); | 209 | tracing_reset(tr, cpu); |
| 207 | 210 | ||
| 208 | local_save_flags(flags); | 211 | local_save_flags(flags); |
| 209 | 212 | ||
| 210 | trace_function(tr, data, ip, parent_ip, flags); | 213 | trace_function(tr, data, ip, parent_ip, flags, preempt_count()); |
| 211 | 214 | ||
| 212 | per_cpu(tracing_cpu, cpu) = 1; | 215 | per_cpu(tracing_cpu, cpu) = 1; |
| 213 | 216 | ||
| @@ -234,14 +237,14 @@ stop_critical_timing(unsigned long ip, unsigned long parent_ip) | |||
| 234 | 237 | ||
| 235 | data = tr->data[cpu]; | 238 | data = tr->data[cpu]; |
| 236 | 239 | ||
| 237 | if (unlikely(!data) || unlikely(!head_page(data)) || | 240 | if (unlikely(!data) || |
| 238 | !data->critical_start || atomic_read(&data->disabled)) | 241 | !data->critical_start || atomic_read(&data->disabled)) |
| 239 | return; | 242 | return; |
| 240 | 243 | ||
| 241 | atomic_inc(&data->disabled); | 244 | atomic_inc(&data->disabled); |
| 242 | 245 | ||
| 243 | local_save_flags(flags); | 246 | local_save_flags(flags); |
| 244 | trace_function(tr, data, ip, parent_ip, flags); | 247 | trace_function(tr, data, ip, parent_ip, flags, preempt_count()); |
| 245 | check_critical_timing(tr, data, parent_ip ? : ip, cpu); | 248 | check_critical_timing(tr, data, parent_ip ? : ip, cpu); |
| 246 | data->critical_start = 0; | 249 | data->critical_start = 0; |
| 247 | atomic_dec(&data->disabled); | 250 | atomic_dec(&data->disabled); |
