diff options
Diffstat (limited to 'drivers/oprofile')
-rw-r--r-- | drivers/oprofile/cpu_buffer.c | 7 | ||||
-rw-r--r-- | drivers/oprofile/cpu_buffer.h | 1 | ||||
-rw-r--r-- | drivers/oprofile/oprofile_stats.c | 4 |
3 files changed, 12 insertions, 0 deletions
diff --git a/drivers/oprofile/cpu_buffer.c b/drivers/oprofile/cpu_buffer.c index a83c3db7d18f..c93d3d2640ab 100644 --- a/drivers/oprofile/cpu_buffer.c +++ b/drivers/oprofile/cpu_buffer.c | |||
@@ -64,6 +64,8 @@ int alloc_cpu_buffers(void) | |||
64 | b->head_pos = 0; | 64 | b->head_pos = 0; |
65 | b->sample_received = 0; | 65 | b->sample_received = 0; |
66 | b->sample_lost_overflow = 0; | 66 | b->sample_lost_overflow = 0; |
67 | b->backtrace_aborted = 0; | ||
68 | b->sample_invalid_eip = 0; | ||
67 | b->cpu = i; | 69 | b->cpu = i; |
68 | INIT_DELAYED_WORK(&b->work, wq_sync_buffer); | 70 | INIT_DELAYED_WORK(&b->work, wq_sync_buffer); |
69 | } | 71 | } |
@@ -175,6 +177,11 @@ static int log_sample(struct oprofile_cpu_buffer * cpu_buf, unsigned long pc, | |||
175 | 177 | ||
176 | cpu_buf->sample_received++; | 178 | cpu_buf->sample_received++; |
177 | 179 | ||
180 | if (pc == ESCAPE_CODE) { | ||
181 | cpu_buf->sample_invalid_eip++; | ||
182 | return 0; | ||
183 | } | ||
184 | |||
178 | if (nr_available_slots(cpu_buf) < 3) { | 185 | if (nr_available_slots(cpu_buf) < 3) { |
179 | cpu_buf->sample_lost_overflow++; | 186 | cpu_buf->sample_lost_overflow++; |
180 | return 0; | 187 | return 0; |
diff --git a/drivers/oprofile/cpu_buffer.h b/drivers/oprofile/cpu_buffer.h index 49900d9e3235..c66c025abe75 100644 --- a/drivers/oprofile/cpu_buffer.h +++ b/drivers/oprofile/cpu_buffer.h | |||
@@ -42,6 +42,7 @@ struct oprofile_cpu_buffer { | |||
42 | unsigned long sample_received; | 42 | unsigned long sample_received; |
43 | unsigned long sample_lost_overflow; | 43 | unsigned long sample_lost_overflow; |
44 | unsigned long backtrace_aborted; | 44 | unsigned long backtrace_aborted; |
45 | unsigned long sample_invalid_eip; | ||
45 | int cpu; | 46 | int cpu; |
46 | struct delayed_work work; | 47 | struct delayed_work work; |
47 | } ____cacheline_aligned; | 48 | } ____cacheline_aligned; |
diff --git a/drivers/oprofile/oprofile_stats.c b/drivers/oprofile/oprofile_stats.c index f0acb661c253..d1f6d776e9e4 100644 --- a/drivers/oprofile/oprofile_stats.c +++ b/drivers/oprofile/oprofile_stats.c | |||
@@ -26,6 +26,8 @@ void oprofile_reset_stats(void) | |||
26 | cpu_buf = &cpu_buffer[i]; | 26 | cpu_buf = &cpu_buffer[i]; |
27 | cpu_buf->sample_received = 0; | 27 | cpu_buf->sample_received = 0; |
28 | cpu_buf->sample_lost_overflow = 0; | 28 | cpu_buf->sample_lost_overflow = 0; |
29 | cpu_buf->backtrace_aborted = 0; | ||
30 | cpu_buf->sample_invalid_eip = 0; | ||
29 | } | 31 | } |
30 | 32 | ||
31 | atomic_set(&oprofile_stats.sample_lost_no_mm, 0); | 33 | atomic_set(&oprofile_stats.sample_lost_no_mm, 0); |
@@ -61,6 +63,8 @@ void oprofile_create_stats_files(struct super_block * sb, struct dentry * root) | |||
61 | &cpu_buf->sample_lost_overflow); | 63 | &cpu_buf->sample_lost_overflow); |
62 | oprofilefs_create_ro_ulong(sb, cpudir, "backtrace_aborted", | 64 | oprofilefs_create_ro_ulong(sb, cpudir, "backtrace_aborted", |
63 | &cpu_buf->backtrace_aborted); | 65 | &cpu_buf->backtrace_aborted); |
66 | oprofilefs_create_ro_ulong(sb, cpudir, "sample_invalid_eip", | ||
67 | &cpu_buf->sample_invalid_eip); | ||
64 | } | 68 | } |
65 | 69 | ||
66 | oprofilefs_create_ro_atomic(sb, dir, "sample_lost_no_mm", | 70 | oprofilefs_create_ro_atomic(sb, dir, "sample_lost_no_mm", |