1/** 2 * @file cpu_buffer.h 3 * 4 * @remark Copyright 2002 OProfile authors 5 * @remark Read the file COPYING 6 * 7 * @author John Levon <levon@movementarian.org> 8 */ 9 10#ifndef OPROFILE_CPU_BUFFER_H 11#define OPROFILE_CPU_BUFFER_H 12 13#include <linux/types.h> 14#include <linux/spinlock.h> 15#include <linux/workqueue.h> 16#include <linux/cache.h> 17 18struct task_struct; 19 20int alloc_cpu_buffers(void); 21void free_cpu_buffers(void); 22 23void start_cpu_work(void); 24void end_cpu_work(void); 25 26/* CPU buffer is composed of such entries (which are 27 * also used for context switch notes) 28 */ 29struct op_sample { 30 unsigned long eip; 31 unsigned long event; 32}; 33 34struct oprofile_cpu_buffer { 35 volatile unsigned long head_pos; 36 volatile unsigned long tail_pos; 37 unsigned long buffer_size; 38 struct task_struct * last_task; 39 int last_is_kernel; 40 int tracing; 41 struct op_sample * buffer; 42 unsigned long sample_received; 43 unsigned long sample_lost_overflow; 44 unsigned long backtrace_aborted; 45 int cpu; 46 struct delayed_work work; 47} ____cacheline_aligned; 48 49extern struct oprofile_cpu_buffer cpu_buffer[]; 50 51void cpu_buffer_reset(struct oprofile_cpu_buffer * cpu_buf); 52 53/* transient events for the CPU buffer -> event buffer */ 54#define CPU_IS_KERNEL 1 55#define CPU_TRACE_BEGIN 2 56 57#endif /* OPROFILE_CPU_BUFFER_H */ 58