diff options
author | Stephane Eranian <eranian@google.com> | 2013-07-04 18:30:11 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2013-07-05 02:54:43 -0400 |
commit | e5302920da9ef23f9d19d4e9ac85704cc25bee7a (patch) | |
tree | bea762940dbb32ec98e99de896ad3a6d450cc025 | |
parent | 100ac5331519866afa9b000b10642b00cb6d03dd (diff) |
perf: Fix interrupt handler timing harness
This patch fixes a serious bug in:
14c63f17b1fd perf: Drop sample rate when sampling is too slow
There was an misunderstanding on the API of the do_div()
macro. It returns the remainder of the division and this
was not what the function expected leading to disabling the
interrupt latency watchdog.
This patch also remove a duplicate assignment in
perf_sample_event_took().
Signed-off-by: Stephane Eranian <eranian@google.com>
Cc: peterz@infradead.org
Cc: dave.hansen@linux.intel.com
Cc: ak@linux.intel.com
Cc: jolsa@redhat.com
Link: http://lkml.kernel.org/r/20130704223010.GA30625@quad
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | kernel/events/core.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index 1db3af933704..1833bc5a84a7 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
@@ -182,7 +182,7 @@ void update_perf_cpu_limits(void) | |||
182 | u64 tmp = perf_sample_period_ns; | 182 | u64 tmp = perf_sample_period_ns; |
183 | 183 | ||
184 | tmp *= sysctl_perf_cpu_time_max_percent; | 184 | tmp *= sysctl_perf_cpu_time_max_percent; |
185 | tmp = do_div(tmp, 100); | 185 | do_div(tmp, 100); |
186 | atomic_set(&perf_sample_allowed_ns, tmp); | 186 | atomic_set(&perf_sample_allowed_ns, tmp); |
187 | } | 187 | } |
188 | 188 | ||
@@ -232,7 +232,7 @@ DEFINE_PER_CPU(u64, running_sample_length); | |||
232 | void perf_sample_event_took(u64 sample_len_ns) | 232 | void perf_sample_event_took(u64 sample_len_ns) |
233 | { | 233 | { |
234 | u64 avg_local_sample_len; | 234 | u64 avg_local_sample_len; |
235 | u64 local_samples_len = __get_cpu_var(running_sample_length); | 235 | u64 local_samples_len; |
236 | 236 | ||
237 | if (atomic_read(&perf_sample_allowed_ns) == 0) | 237 | if (atomic_read(&perf_sample_allowed_ns) == 0) |
238 | return; | 238 | return; |