Loading include/linux/perf_counter.h +7 −0 Original line number Diff line number Diff line Loading @@ -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), }; /* Loading @@ -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 */ Loading include/linux/syscalls.h +3 −5 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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 kernel/perf_counter.c +8 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
include/linux/perf_counter.h +7 −0 Original line number Diff line number Diff line Loading @@ -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), }; /* Loading @@ -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 */ Loading
include/linux/syscalls.h +3 −5 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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
kernel/perf_counter.c +8 −7 Original line number Diff line number Diff line Loading @@ -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; Loading