2005-04-16 15:20:36 -07:00
/**
* @ file cpu_buffer . h
*
* @ remark Copyright 2002 OProfile authors
* @ remark Read the file COPYING
*
* @ author John Levon < levon @ movementarian . org >
*/
# ifndef OPROFILE_CPU_BUFFER_H
# define OPROFILE_CPU_BUFFER_H
# include <linux/types.h>
# include <linux/spinlock.h>
# include <linux/workqueue.h>
# include <linux/cache.h>
2008-04-28 02:14:15 -07:00
# include <linux/sched.h>
2005-04-16 15:20:36 -07:00
struct task_struct ;
int alloc_cpu_buffers ( void ) ;
void free_cpu_buffers ( void ) ;
void start_cpu_work ( void ) ;
void end_cpu_work ( 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 ;
int tracing ;
struct op_sample * buffer ;
unsigned long sample_received ;
unsigned long sample_lost_overflow ;
unsigned long backtrace_aborted ;
2007-11-14 16:58:48 -08:00
unsigned long sample_invalid_eip ;
2005-04-16 15:20:36 -07:00
int cpu ;
2006-11-22 14:57:56 +00:00
struct delayed_work work ;
2008-05-14 16:05:31 -07:00
} ;
2005-04-16 15:20:36 -07:00
2008-04-28 02:14:15 -07:00
DECLARE_PER_CPU ( struct oprofile_cpu_buffer , cpu_buffer ) ;
2005-04-16 15:20:36 -07:00
void cpu_buffer_reset ( struct oprofile_cpu_buffer * cpu_buf ) ;
/* transient events for the CPU buffer -> event buffer */
# define CPU_IS_KERNEL 1
# define CPU_TRACE_BEGIN 2
2008-07-22 21:08:54 +02:00
# define IBS_FETCH_BEGIN 3
# define IBS_OP_BEGIN 4
2005-04-16 15:20:36 -07:00
# endif /* OPROFILE_CPU_BUFFER_H */