mirror of https://gitee.com/openkylin/linux.git
perf_counter tools: Fix up the ABI shakeup
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <new-submission> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: John Kacur <jkacur@redhat.com> Cc: Stephane Eranian <eranian@googlemail.com> LKML-Reference: <new-submission> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
0d48696f87
commit
c70975bc8d
|
@ -322,7 +322,7 @@ static void synthesize_events(void)
|
||||||
|
|
||||||
static void open_counters(int cpu, pid_t pid)
|
static void open_counters(int cpu, pid_t pid)
|
||||||
{
|
{
|
||||||
struct perf_counter_hw_event hw_event;
|
struct perf_counter_attr attr;
|
||||||
int counter, group_fd;
|
int counter, group_fd;
|
||||||
int track = 1;
|
int track = 1;
|
||||||
|
|
||||||
|
@ -334,18 +334,18 @@ static void open_counters(int cpu, pid_t pid)
|
||||||
group_fd = -1;
|
group_fd = -1;
|
||||||
for (counter = 0; counter < nr_counters; counter++) {
|
for (counter = 0; counter < nr_counters; counter++) {
|
||||||
|
|
||||||
memset(&hw_event, 0, sizeof(hw_event));
|
memset(&attr, 0, sizeof(attr));
|
||||||
hw_event.config = event_id[counter];
|
attr.config = event_id[counter];
|
||||||
hw_event.irq_period = event_count[counter];
|
attr.sample_period = event_count[counter];
|
||||||
hw_event.record_type = PERF_RECORD_IP | PERF_RECORD_TID;
|
attr.sample_type = PERF_SAMPLE_IP | PERF_SAMPLE_TID;
|
||||||
hw_event.mmap = track;
|
attr.mmap = track;
|
||||||
hw_event.comm = track;
|
attr.comm = track;
|
||||||
hw_event.inherit = (cpu < 0) && inherit;
|
attr.inherit = (cpu < 0) && inherit;
|
||||||
|
|
||||||
track = 0; // only the first counter needs these
|
track = 0; // only the first counter needs these
|
||||||
|
|
||||||
fd[nr_cpu][counter] =
|
fd[nr_cpu][counter] =
|
||||||
sys_perf_counter_open(&hw_event, pid, cpu, group_fd, 0);
|
sys_perf_counter_open(&attr, pid, cpu, group_fd, 0);
|
||||||
|
|
||||||
if (fd[nr_cpu][counter] < 0) {
|
if (fd[nr_cpu][counter] < 0) {
|
||||||
int err = errno;
|
int err = errno;
|
||||||
|
|
|
@ -79,22 +79,22 @@ static __u64 walltime_nsecs;
|
||||||
|
|
||||||
static void create_perfstat_counter(int counter)
|
static void create_perfstat_counter(int counter)
|
||||||
{
|
{
|
||||||
struct perf_counter_hw_event hw_event;
|
struct perf_counter_attr attr;
|
||||||
|
|
||||||
memset(&hw_event, 0, sizeof(hw_event));
|
memset(&attr, 0, sizeof(attr));
|
||||||
hw_event.config = event_id[counter];
|
attr.config = event_id[counter];
|
||||||
hw_event.record_type = 0;
|
attr.sample_type = 0;
|
||||||
hw_event.exclude_kernel = event_mask[counter] & EVENT_MASK_KERNEL;
|
attr.exclude_kernel = event_mask[counter] & EVENT_MASK_KERNEL;
|
||||||
hw_event.exclude_user = event_mask[counter] & EVENT_MASK_USER;
|
attr.exclude_user = event_mask[counter] & EVENT_MASK_USER;
|
||||||
|
|
||||||
if (scale)
|
if (scale)
|
||||||
hw_event.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED |
|
attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED |
|
||||||
PERF_FORMAT_TOTAL_TIME_RUNNING;
|
PERF_FORMAT_TOTAL_TIME_RUNNING;
|
||||||
|
|
||||||
if (system_wide) {
|
if (system_wide) {
|
||||||
int cpu;
|
int cpu;
|
||||||
for (cpu = 0; cpu < nr_cpus; cpu ++) {
|
for (cpu = 0; cpu < nr_cpus; cpu ++) {
|
||||||
fd[cpu][counter] = sys_perf_counter_open(&hw_event, -1, cpu, -1, 0);
|
fd[cpu][counter] = sys_perf_counter_open(&attr, -1, cpu, -1, 0);
|
||||||
if (fd[cpu][counter] < 0) {
|
if (fd[cpu][counter] < 0) {
|
||||||
printf("perfstat error: syscall returned with %d (%s)\n",
|
printf("perfstat error: syscall returned with %d (%s)\n",
|
||||||
fd[cpu][counter], strerror(errno));
|
fd[cpu][counter], strerror(errno));
|
||||||
|
@ -102,10 +102,10 @@ static void create_perfstat_counter(int counter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
hw_event.inherit = inherit;
|
attr.inherit = inherit;
|
||||||
hw_event.disabled = 1;
|
attr.disabled = 1;
|
||||||
|
|
||||||
fd[0][counter] = sys_perf_counter_open(&hw_event, 0, -1, -1, 0);
|
fd[0][counter] = sys_perf_counter_open(&attr, 0, -1, -1, 0);
|
||||||
if (fd[0][counter] < 0) {
|
if (fd[0][counter] < 0) {
|
||||||
printf("perfstat error: syscall returned with %d (%s)\n",
|
printf("perfstat error: syscall returned with %d (%s)\n",
|
||||||
fd[0][counter], strerror(errno));
|
fd[0][counter], strerror(errno));
|
||||||
|
|
|
@ -537,7 +537,7 @@ static void mmap_read(struct mmap_data *md)
|
||||||
old += size;
|
old += size;
|
||||||
|
|
||||||
if (event->header.misc & PERF_EVENT_MISC_OVERFLOW) {
|
if (event->header.misc & PERF_EVENT_MISC_OVERFLOW) {
|
||||||
if (event->header.type & PERF_RECORD_IP)
|
if (event->header.type & PERF_SAMPLE_IP)
|
||||||
process_event(event->ip.ip, md->counter);
|
process_event(event->ip.ip, md->counter);
|
||||||
} else {
|
} else {
|
||||||
switch (event->header.type) {
|
switch (event->header.type) {
|
||||||
|
@ -563,7 +563,7 @@ static struct mmap_data mmap_array[MAX_NR_CPUS][MAX_COUNTERS];
|
||||||
|
|
||||||
static int __cmd_top(void)
|
static int __cmd_top(void)
|
||||||
{
|
{
|
||||||
struct perf_counter_hw_event hw_event;
|
struct perf_counter_attr attr;
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
int i, counter, group_fd, nr_poll = 0;
|
int i, counter, group_fd, nr_poll = 0;
|
||||||
unsigned int cpu;
|
unsigned int cpu;
|
||||||
|
@ -577,15 +577,15 @@ static int __cmd_top(void)
|
||||||
if (target_pid == -1 && profile_cpu == -1)
|
if (target_pid == -1 && profile_cpu == -1)
|
||||||
cpu = i;
|
cpu = i;
|
||||||
|
|
||||||
memset(&hw_event, 0, sizeof(hw_event));
|
memset(&attr, 0, sizeof(attr));
|
||||||
hw_event.config = event_id[counter];
|
attr.config = event_id[counter];
|
||||||
hw_event.irq_period = event_count[counter];
|
attr.sample_period = event_count[counter];
|
||||||
hw_event.record_type = PERF_RECORD_IP | PERF_RECORD_TID;
|
attr.sample_type = PERF_SAMPLE_IP | PERF_SAMPLE_TID;
|
||||||
hw_event.mmap = use_mmap;
|
attr.mmap = use_mmap;
|
||||||
hw_event.munmap = use_munmap;
|
attr.munmap = use_munmap;
|
||||||
hw_event.freq = freq;
|
attr.freq = freq;
|
||||||
|
|
||||||
fd[i][counter] = sys_perf_counter_open(&hw_event, target_pid, cpu, group_fd, 0);
|
fd[i][counter] = sys_perf_counter_open(&attr, target_pid, cpu, group_fd, 0);
|
||||||
if (fd[i][counter] < 0) {
|
if (fd[i][counter] < 0) {
|
||||||
int err = errno;
|
int err = errno;
|
||||||
printf("kerneltop error: syscall returned with %d (%s)\n",
|
printf("kerneltop error: syscall returned with %d (%s)\n",
|
||||||
|
|
|
@ -53,11 +53,11 @@ static inline unsigned long long rdclock(void)
|
||||||
_min1 < _min2 ? _min1 : _min2; })
|
_min1 < _min2 ? _min1 : _min2; })
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
sys_perf_counter_open(struct perf_counter_hw_event *hw_event_uptr,
|
sys_perf_counter_open(struct perf_counter_attr *attr_uptr,
|
||||||
pid_t pid, int cpu, int group_fd,
|
pid_t pid, int cpu, int group_fd,
|
||||||
unsigned long flags)
|
unsigned long flags)
|
||||||
{
|
{
|
||||||
return syscall(__NR_perf_counter_open, hw_event_uptr, pid, cpu,
|
return syscall(__NR_perf_counter_open, attr_uptr, pid, cpu,
|
||||||
group_fd, flags);
|
group_fd, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue