/** * @file cpu_buffer.h * * @remark Copyright 2002 OProfile authors * @remark Read the file COPYING * * @author John Levon */ #ifndef OPROFILE_CPU_BUFFER_H #define OPROFILE_CPU_BUFFER_H #include #include #include struct task_struct; /* allocate a sample buffer for each CPU */ int alloc_cpu_buffers(void); void free_cpu_buffers(void); /* CPU buffer is composed of such entries (which are * also used for context switch notes) */ struct op_sample { unsigned long eip; unsigned long event; }; struct oprofile_cpu_buffer { volatile unsigned long head_pos; volatile unsigned long tail_pos; unsigned long buffer_size; struct task_struct * last_task; int last_is_kernel; struct op_sample * buffer; unsigned long sample_received; unsigned long sample_lost_overflow; unsigned long sample_lost_task_exit; } ____cacheline_aligned; extern struct oprofile_cpu_buffer cpu_buffer[]; void cpu_buffer_reset(struct oprofile_cpu_buffer *cpu_buf); #endif /* OPROFILE_CPU_BUFFER_H */