2009-05-02 00:29:57 +08:00
|
|
|
#ifndef _PERF_PERF_H
|
|
|
|
#define _PERF_PERF_H
|
|
|
|
|
2009-05-24 00:28:58 +08:00
|
|
|
#if defined(__x86_64__) || defined(__i386__)
|
|
|
|
#include "../../arch/x86/include/asm/unistd.h"
|
|
|
|
#define rmb() asm volatile("lfence" ::: "memory")
|
|
|
|
#define cpu_relax() asm volatile("rep; nop" ::: "memory");
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __powerpc__
|
|
|
|
#include "../../arch/powerpc/include/asm/unistd.h"
|
|
|
|
#define rmb() asm volatile ("sync" ::: "memory")
|
|
|
|
#define cpu_relax() asm volatile ("" ::: "memory");
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <time.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/syscall.h>
|
|
|
|
|
|
|
|
#include "../../include/linux/perf_counter.h"
|
perf_counter tools: Define and use our own u64, s64 etc. definitions
On 64-bit powerpc, __u64 is defined to be unsigned long rather than
unsigned long long. This causes compiler warnings every time we
print a __u64 value with %Lx.
Rather than changing __u64, we define our own u64 to be unsigned long
long on all architectures, and similarly s64 as signed long long.
For consistency we also define u32, s32, u16, s16, u8 and s8. These
definitions are put in a new header, types.h, because these definitions
are needed in util/string.h and util/symbol.h.
The main change here is the mechanical change of __[us]{64,32,16,8}
to remove the "__". The other changes are:
* Create types.h
* Include types.h in perf.h, util/string.h and util/symbol.h
* Add types.h to the LIB_H definition in Makefile
* Added (u64) casts in process_overflow_event() and print_sym_table()
to kill two remaining warnings.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: benh@kernel.crashing.org
LKML-Reference: <19003.33494.495844.956580@cargo.ozlabs.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-06-19 20:21:42 +08:00
|
|
|
#include "types.h"
|
2009-05-24 00:28:58 +08:00
|
|
|
|
2009-05-02 00:29:57 +08:00
|
|
|
/*
|
|
|
|
* prctl(PR_TASK_PERF_COUNTERS_DISABLE) will (cheaply) disable all
|
|
|
|
* counters in the current task.
|
|
|
|
*/
|
|
|
|
#define PR_TASK_PERF_COUNTERS_DISABLE 31
|
|
|
|
#define PR_TASK_PERF_COUNTERS_ENABLE 32
|
|
|
|
|
2009-05-02 00:39:47 +08:00
|
|
|
#ifndef NSEC_PER_SEC
|
|
|
|
# define NSEC_PER_SEC 1000000000ULL
|
|
|
|
#endif
|
|
|
|
|
|
|
|
static inline unsigned long long rdclock(void)
|
|
|
|
{
|
|
|
|
struct timespec ts;
|
|
|
|
|
|
|
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
|
|
|
return ts.tv_sec * 1000000000ULL + ts.tv_nsec;
|
|
|
|
}
|
2009-05-02 00:29:57 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Pick up some kernel type conventions:
|
|
|
|
*/
|
|
|
|
#define __user
|
|
|
|
#define asmlinkage
|
|
|
|
|
|
|
|
#define unlikely(x) __builtin_expect(!!(x), 0)
|
|
|
|
#define min(x, y) ({ \
|
|
|
|
typeof(x) _min1 = (x); \
|
|
|
|
typeof(y) _min2 = (y); \
|
|
|
|
(void) (&_min1 == &_min2); \
|
|
|
|
_min1 < _min2 ? _min1 : _min2; })
|
|
|
|
|
|
|
|
static inline int
|
2009-06-12 18:46:55 +08:00
|
|
|
sys_perf_counter_open(struct perf_counter_attr *attr,
|
2009-05-02 00:29:57 +08:00
|
|
|
pid_t pid, int cpu, int group_fd,
|
|
|
|
unsigned long flags)
|
|
|
|
{
|
2009-06-12 18:46:55 +08:00
|
|
|
attr->size = sizeof(*attr);
|
|
|
|
return syscall(__NR_perf_counter_open, attr, pid, cpu,
|
2009-05-02 00:29:57 +08:00
|
|
|
group_fd, flags);
|
|
|
|
}
|
|
|
|
|
2009-05-25 15:59:50 +08:00
|
|
|
#define MAX_COUNTERS 256
|
|
|
|
#define MAX_NR_CPUS 256
|
2009-05-02 00:29:57 +08:00
|
|
|
|
2009-06-19 05:22:55 +08:00
|
|
|
struct perf_file_header {
|
perf_counter tools: Define and use our own u64, s64 etc. definitions
On 64-bit powerpc, __u64 is defined to be unsigned long rather than
unsigned long long. This causes compiler warnings every time we
print a __u64 value with %Lx.
Rather than changing __u64, we define our own u64 to be unsigned long
long on all architectures, and similarly s64 as signed long long.
For consistency we also define u32, s32, u16, s16, u8 and s8. These
definitions are put in a new header, types.h, because these definitions
are needed in util/string.h and util/symbol.h.
The main change here is the mechanical change of __[us]{64,32,16,8}
to remove the "__". The other changes are:
* Create types.h
* Include types.h in perf.h, util/string.h and util/symbol.h
* Add types.h to the LIB_H definition in Makefile
* Added (u64) casts in process_overflow_event() and print_sym_table()
to kill two remaining warnings.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: benh@kernel.crashing.org
LKML-Reference: <19003.33494.495844.956580@cargo.ozlabs.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-06-19 20:21:42 +08:00
|
|
|
u64 version;
|
|
|
|
u64 sample_type;
|
|
|
|
u64 data_size;
|
2009-06-19 05:22:55 +08:00
|
|
|
};
|
|
|
|
|
2009-05-02 00:29:57 +08:00
|
|
|
#endif
|