diff options
Diffstat (limited to 'kernel/profile.c')
-rw-r--r-- | kernel/profile.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/kernel/profile.c b/kernel/profile.c index 66f841b7fbd3..961b389fe52f 100644 --- a/kernel/profile.c +++ b/kernel/profile.c | |||
@@ -126,11 +126,9 @@ int __ref profile_init(void) | |||
126 | if (prof_buffer) | 126 | if (prof_buffer) |
127 | return 0; | 127 | return 0; |
128 | 128 | ||
129 | prof_buffer = vmalloc(buffer_bytes); | 129 | prof_buffer = vzalloc(buffer_bytes); |
130 | if (prof_buffer) { | 130 | if (prof_buffer) |
131 | memset(prof_buffer, 0, buffer_bytes); | ||
132 | return 0; | 131 | return 0; |
133 | } | ||
134 | 132 | ||
135 | free_cpumask_var(prof_cpu_mask); | 133 | free_cpumask_var(prof_cpu_mask); |
136 | return -ENOMEM; | 134 | return -ENOMEM; |
@@ -305,14 +303,12 @@ static void profile_discard_flip_buffers(void) | |||
305 | mutex_unlock(&profile_flip_mutex); | 303 | mutex_unlock(&profile_flip_mutex); |
306 | } | 304 | } |
307 | 305 | ||
308 | void profile_hits(int type, void *__pc, unsigned int nr_hits) | 306 | static void do_profile_hits(int type, void *__pc, unsigned int nr_hits) |
309 | { | 307 | { |
310 | unsigned long primary, secondary, flags, pc = (unsigned long)__pc; | 308 | unsigned long primary, secondary, flags, pc = (unsigned long)__pc; |
311 | int i, j, cpu; | 309 | int i, j, cpu; |
312 | struct profile_hit *hits; | 310 | struct profile_hit *hits; |
313 | 311 | ||
314 | if (prof_on != type || !prof_buffer) | ||
315 | return; | ||
316 | pc = min((pc - (unsigned long)_stext) >> prof_shift, prof_len - 1); | 312 | pc = min((pc - (unsigned long)_stext) >> prof_shift, prof_len - 1); |
317 | i = primary = (pc & (NR_PROFILE_GRP - 1)) << PROFILE_GRPSHIFT; | 313 | i = primary = (pc & (NR_PROFILE_GRP - 1)) << PROFILE_GRPSHIFT; |
318 | secondary = (~(pc << 1) & (NR_PROFILE_GRP - 1)) << PROFILE_GRPSHIFT; | 314 | secondary = (~(pc << 1) & (NR_PROFILE_GRP - 1)) << PROFILE_GRPSHIFT; |
@@ -419,16 +415,20 @@ out_free: | |||
419 | #define profile_discard_flip_buffers() do { } while (0) | 415 | #define profile_discard_flip_buffers() do { } while (0) |
420 | #define profile_cpu_callback NULL | 416 | #define profile_cpu_callback NULL |
421 | 417 | ||
422 | void profile_hits(int type, void *__pc, unsigned int nr_hits) | 418 | static void do_profile_hits(int type, void *__pc, unsigned int nr_hits) |
423 | { | 419 | { |
424 | unsigned long pc; | 420 | unsigned long pc; |
425 | |||
426 | if (prof_on != type || !prof_buffer) | ||
427 | return; | ||
428 | pc = ((unsigned long)__pc - (unsigned long)_stext) >> prof_shift; | 421 | pc = ((unsigned long)__pc - (unsigned long)_stext) >> prof_shift; |
429 | atomic_add(nr_hits, &prof_buffer[min(pc, prof_len - 1)]); | 422 | atomic_add(nr_hits, &prof_buffer[min(pc, prof_len - 1)]); |
430 | } | 423 | } |
431 | #endif /* !CONFIG_SMP */ | 424 | #endif /* !CONFIG_SMP */ |
425 | |||
426 | void profile_hits(int type, void *__pc, unsigned int nr_hits) | ||
427 | { | ||
428 | if (prof_on != type || !prof_buffer) | ||
429 | return; | ||
430 | do_profile_hits(type, __pc, nr_hits); | ||
431 | } | ||
432 | EXPORT_SYMBOL_GPL(profile_hits); | 432 | EXPORT_SYMBOL_GPL(profile_hits); |
433 | 433 | ||
434 | void profile_tick(int type) | 434 | void profile_tick(int type) |