aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-12-11 06:46:46 -0500
committerIngo Molnar <mingo@elte.hu>2008-12-11 09:45:51 -0500
commit621a01eac89b5e2f81a4cf576568b31f40a02724 (patch)
tree79a7f2a8d49017077f40cfac4e78ee255cf2f43e /include/linux
parentccff286d85098ba5438e22aa2ea807fc1e18cf2f (diff)
perf counters: hw driver API
Impact: restructure code, introduce hw_ops driver abstraction Introduce this abstraction to handle counter details: struct hw_perf_counter_ops { void (*hw_perf_counter_enable) (struct perf_counter *counter); void (*hw_perf_counter_disable) (struct perf_counter *counter); void (*hw_perf_counter_read) (struct perf_counter *counter); }; This will be useful to support assymetric hw details, and it will also be useful to implement "software counters". (Counters that count kernel managed sw events such as pagefaults, context-switches, wall-clock time or task-local time.) Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/perf_counter.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h
index 7af7d8965460..27385641ecb6 100644
--- a/include/linux/perf_counter.h
+++ b/include/linux/perf_counter.h
@@ -113,6 +113,17 @@ struct perf_data {
113 u8 data[PERF_DATA_BUFLEN]; 113 u8 data[PERF_DATA_BUFLEN];
114}; 114};
115 115
116struct perf_counter;
117
118/**
119 * struct hw_perf_counter_ops - performance counter hw ops
120 */
121struct hw_perf_counter_ops {
122 void (*hw_perf_counter_enable) (struct perf_counter *counter);
123 void (*hw_perf_counter_disable) (struct perf_counter *counter);
124 void (*hw_perf_counter_read) (struct perf_counter *counter);
125};
126
116/** 127/**
117 * struct perf_counter - performance counter kernel representation: 128 * struct perf_counter - performance counter kernel representation:
118 */ 129 */
@@ -120,6 +131,7 @@ struct perf_counter {
120 struct list_head list_entry; 131 struct list_head list_entry;
121 struct list_head sibling_list; 132 struct list_head sibling_list;
122 struct perf_counter *group_leader; 133 struct perf_counter *group_leader;
134 struct hw_perf_counter_ops *hw_ops;
123 135
124 int active; 136 int active;
125#if BITS_PER_LONG == 64 137#if BITS_PER_LONG == 64
@@ -185,6 +197,9 @@ struct perf_cpu_context {
185extern int perf_max_counters; 197extern int perf_max_counters;
186 198
187#ifdef CONFIG_PERF_COUNTERS 199#ifdef CONFIG_PERF_COUNTERS
200extern struct hw_perf_counter_ops *
201hw_perf_counter_init(struct perf_counter *counter);
202
188extern void perf_counter_task_sched_in(struct task_struct *task, int cpu); 203extern void perf_counter_task_sched_in(struct task_struct *task, int cpu);
189extern void perf_counter_task_sched_out(struct task_struct *task, int cpu); 204extern void perf_counter_task_sched_out(struct task_struct *task, int cpu);
190extern void perf_counter_task_tick(struct task_struct *task, int cpu); 205extern void perf_counter_task_tick(struct task_struct *task, int cpu);