2005-04-17 02:20:36 +04: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 13:14:15 +04:00
# include <linux/sched.h>
2005-04-17 02:20:36 +04: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-15 03:58:48 +03:00
unsigned long sample_invalid_eip ;
2005-04-17 02:20:36 +04:00
int cpu ;
2006-11-22 17:57:56 +03:00
struct delayed_work work ;
2008-05-15 03:05:31 +04:00
} ;
2005-04-17 02:20:36 +04:00
2008-04-28 13:14:15 +04:00
DECLARE_PER_CPU ( struct oprofile_cpu_buffer , cpu_buffer ) ;
2005-04-17 02:20:36 +04: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
# endif /* OPROFILE_CPU_BUFFER_H */