Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eab656ae authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Ingo Molnar
Browse files

perf counters: clean up 'raw' type API



Impact: cleanup

Introduce a separate hw_event type.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 4ac13294
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ enum hw_event_types {
	 * If this bit is set in the type, then trigger NMI sampling:
	 */
	PERF_COUNT_NMI			= (1 << 30),
	PERF_COUNT_RAW			= (1 << 31),
};

/*
@@ -49,6 +50,12 @@ enum perf_record_type {
	PERF_RECORD_GROUP,
};

struct perf_counter_event {
	u32			hw_event_type;
	u32			hw_event_period;
	u64			hw_raw_ctrl;
};

/**
 * struct hw_perf_counter - performance counter hardware details
 */
+3 −5
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ struct compat_stat;
struct compat_timeval;
struct robust_list_head;
struct getcpu_cache;
struct perf_counter_event;

#include <linux/types.h>
#include <linux/aio_abi.h>
@@ -625,9 +626,6 @@ asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len);
int kernel_execve(const char *filename, char *const argv[], char *const envp[]);

asmlinkage int
sys_perf_counter_open(u32 hw_event_type,
		      u32 hw_event_period,
		      u32 record_type,
		      pid_t pid,
		      int cpu);
sys_perf_counter_open(struct perf_counter_event __user *uevent, u32 record_type,
		      pid_t pid, int cpu, int masterfd);
#endif
+8 −7
Original line number Diff line number Diff line
@@ -734,26 +734,27 @@ perf_counter_alloc(u32 hw_event_period, int cpu, u32 record_type)
 * @pid:		target pid
 */
asmlinkage int
sys_perf_counter_open(u32 hw_event_type,
		      u32 hw_event_period,
		      u32 record_type,
		      pid_t pid,
		      int cpu)
sys_perf_counter_open(struct perf_counter_event __user *uevent, u32 record_type,
		      pid_t pid, int cpu, int masterfd)
{
	struct perf_counter_context *ctx;
	struct perf_counter_event event;
	struct perf_counter *counter;
	int ret;

	if (copy_from_user(&event, uevent, sizeof(event)) != 0)
		return -EFAULT;

	ctx = find_get_context(pid, cpu);
	if (IS_ERR(ctx))
		return PTR_ERR(ctx);

	ret = -ENOMEM;
	counter = perf_counter_alloc(hw_event_period, cpu, record_type);
	counter = perf_counter_alloc(event.hw_event_period, cpu, record_type);
	if (!counter)
		goto err_put_context;

	ret = hw_perf_counter_init(counter, hw_event_type);
	ret = hw_perf_counter_init(counter, event.hw_event_type);
	if (ret)
		goto err_free_put_context;