aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/oprofile/cpu_buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/oprofile/cpu_buffer.c')
-rw-r--r--drivers/oprofile/cpu_buffer.c18
1 files changed, 1 insertions, 17 deletions
diff --git a/drivers/oprofile/cpu_buffer.c b/drivers/oprofile/cpu_buffer.c
index 7e5e650e409f..d6f5de686363 100644
--- a/drivers/oprofile/cpu_buffer.c
+++ b/drivers/oprofile/cpu_buffer.c
@@ -148,22 +148,6 @@ static unsigned long nr_available_slots(struct oprofile_cpu_buffer const *b)
148 return tail + (b->buffer_size - head) - 1; 148 return tail + (b->buffer_size - head) - 1;
149} 149}
150 150
151static void increment_head(struct oprofile_cpu_buffer *b)
152{
153 unsigned long new_head = b->head_pos + 1;
154
155 /*
156 * Ensure anything written to the slot before we increment is
157 * visible
158 */
159 wmb();
160
161 if (new_head < b->buffer_size)
162 b->head_pos = new_head;
163 else
164 b->head_pos = 0;
165}
166
167static inline void 151static inline void
168add_sample(struct oprofile_cpu_buffer *cpu_buf, 152add_sample(struct oprofile_cpu_buffer *cpu_buf,
169 unsigned long pc, unsigned long event) 153 unsigned long pc, unsigned long event)
@@ -171,7 +155,7 @@ add_sample(struct oprofile_cpu_buffer *cpu_buf,
171 struct op_sample *entry = cpu_buffer_write_entry(cpu_buf); 155 struct op_sample *entry = cpu_buffer_write_entry(cpu_buf);
172 entry->eip = pc; 156 entry->eip = pc;
173 entry->event = event; 157 entry->event = event;
174 increment_head(cpu_buf); 158 cpu_buffer_write_commit(cpu_buf);
175} 159}
176 160
177static inline void 161static inline void