diff options
author | Robert Richter <robert.richter@amd.com> | 2008-12-25 11:26:07 -0500 |
---|---|---|
committer | Robert Richter <robert.richter@amd.com> | 2009-01-07 16:37:44 -0500 |
commit | 2cc28b9f261dd28d69767a34682ce55a27d928ed (patch) | |
tree | eb99ee33781cc79ab09f2d70c93f14c90c664f91 /drivers/oprofile/cpu_buffer.h | |
parent | d358e75fc40cc3bbab11654ba0a88b232c543d12 (diff) |
oprofile: add op_cpu_buffer_write_reserve()
This function prepares the cpu buffer to write a sample.
Struct op_entry is used during operations on the ring buffer while
struct op_sample contains the data that is stored in the ring
buffer. Struct entry can be uninitialized. The function reserves a
data array that is specified by size. Use op_cpu_buffer_write_commit()
after preparing the sample. In case of errors a null pointer is
returned, otherwise the pointer to the sample.
Signed-off-by: Robert Richter <robert.richter@amd.com>
Diffstat (limited to 'drivers/oprofile/cpu_buffer.h')
-rw-r--r-- | drivers/oprofile/cpu_buffer.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/oprofile/cpu_buffer.h b/drivers/oprofile/cpu_buffer.h index 65b763ad72da..2d4bfdeb7fba 100644 --- a/drivers/oprofile/cpu_buffer.h +++ b/drivers/oprofile/cpu_buffer.h | |||
@@ -1,10 +1,11 @@ | |||
1 | /** | 1 | /** |
2 | * @file cpu_buffer.h | 2 | * @file cpu_buffer.h |
3 | * | 3 | * |
4 | * @remark Copyright 2002 OProfile authors | 4 | * @remark Copyright 2002-2009 OProfile authors |
5 | * @remark Read the file COPYING | 5 | * @remark Read the file COPYING |
6 | * | 6 | * |
7 | * @author John Levon <levon@movementarian.org> | 7 | * @author John Levon <levon@movementarian.org> |
8 | * @author Robert Richter <robert.richter@amd.com> | ||
8 | */ | 9 | */ |
9 | 10 | ||
10 | #ifndef OPROFILE_CPU_BUFFER_H | 11 | #ifndef OPROFILE_CPU_BUFFER_H |
@@ -31,12 +32,15 @@ void end_cpu_work(void); | |||
31 | struct op_sample { | 32 | struct op_sample { |
32 | unsigned long eip; | 33 | unsigned long eip; |
33 | unsigned long event; | 34 | unsigned long event; |
35 | unsigned long data[0]; | ||
34 | }; | 36 | }; |
35 | 37 | ||
36 | struct op_entry { | 38 | struct op_entry { |
37 | struct ring_buffer_event *event; | 39 | struct ring_buffer_event *event; |
38 | struct op_sample *sample; | 40 | struct op_sample *sample; |
39 | unsigned long irq_flags; | 41 | unsigned long irq_flags; |
42 | unsigned long size; | ||
43 | unsigned long *data; | ||
40 | }; | 44 | }; |
41 | 45 | ||
42 | struct oprofile_cpu_buffer { | 46 | struct oprofile_cpu_buffer { |
@@ -68,7 +72,8 @@ static inline void op_cpu_buffer_reset(int cpu) | |||
68 | cpu_buf->last_task = NULL; | 72 | cpu_buf->last_task = NULL; |
69 | } | 73 | } |
70 | 74 | ||
71 | int op_cpu_buffer_write_entry(struct op_entry *entry); | 75 | struct op_sample |
76 | *op_cpu_buffer_write_reserve(struct op_entry *entry, unsigned long size); | ||
72 | int op_cpu_buffer_write_commit(struct op_entry *entry); | 77 | int op_cpu_buffer_write_commit(struct op_entry *entry); |
73 | struct op_sample *op_cpu_buffer_read_entry(int cpu); | 78 | struct op_sample *op_cpu_buffer_read_entry(int cpu); |
74 | unsigned long op_cpu_buffer_entries(int cpu); | 79 | unsigned long op_cpu_buffer_entries(int cpu); |