aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/events/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/events/core.c')
-rw-r--r--kernel/events/core.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 5aeb4c74fb99..932babd9e86c 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -4968,6 +4968,11 @@ static void __perf_event_period(struct perf_event *event,
4968 } 4968 }
4969} 4969}
4970 4970
4971static int perf_event_check_period(struct perf_event *event, u64 value)
4972{
4973 return event->pmu->check_period(event, value);
4974}
4975
4971static int perf_event_period(struct perf_event *event, u64 __user *arg) 4976static int perf_event_period(struct perf_event *event, u64 __user *arg)
4972{ 4977{
4973 u64 value; 4978 u64 value;
@@ -4984,6 +4989,9 @@ static int perf_event_period(struct perf_event *event, u64 __user *arg)
4984 if (event->attr.freq && value > sysctl_perf_event_sample_rate) 4989 if (event->attr.freq && value > sysctl_perf_event_sample_rate)
4985 return -EINVAL; 4990 return -EINVAL;
4986 4991
4992 if (perf_event_check_period(event, value))
4993 return -EINVAL;
4994
4987 event_function_call(event, __perf_event_period, &value); 4995 event_function_call(event, __perf_event_period, &value);
4988 4996
4989 return 0; 4997 return 0;
@@ -9600,6 +9608,11 @@ static int perf_pmu_nop_int(struct pmu *pmu)
9600 return 0; 9608 return 0;
9601} 9609}
9602 9610
9611static int perf_event_nop_int(struct perf_event *event, u64 value)
9612{
9613 return 0;
9614}
9615
9603static DEFINE_PER_CPU(unsigned int, nop_txn_flags); 9616static DEFINE_PER_CPU(unsigned int, nop_txn_flags);
9604 9617
9605static void perf_pmu_start_txn(struct pmu *pmu, unsigned int flags) 9618static void perf_pmu_start_txn(struct pmu *pmu, unsigned int flags)
@@ -9900,6 +9913,9 @@ got_cpu_context:
9900 pmu->pmu_disable = perf_pmu_nop_void; 9913 pmu->pmu_disable = perf_pmu_nop_void;
9901 } 9914 }
9902 9915
9916 if (!pmu->check_period)
9917 pmu->check_period = perf_event_nop_int;
9918
9903 if (!pmu->event_idx) 9919 if (!pmu->event_idx)
9904 pmu->event_idx = perf_event_idx_default; 9920 pmu->event_idx = perf_event_idx_default;
9905 9921