diff options
Diffstat (limited to 'arch/x86/kernel/cpu/perf_event_amd_ibs.c')
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_amd_ibs.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/perf_event_amd_ibs.c b/arch/x86/kernel/cpu/perf_event_amd_ibs.c index 7bfb5bec863..eebd5ffe1bb 100644 --- a/arch/x86/kernel/cpu/perf_event_amd_ibs.c +++ b/arch/x86/kernel/cpu/perf_event_amd_ibs.c @@ -209,6 +209,15 @@ static int perf_ibs_precise_event(struct perf_event *event, u64 *config)  	return -EOPNOTSUPP;  } +static const struct perf_event_attr ibs_notsupp = { +	.exclude_user	= 1, +	.exclude_kernel	= 1, +	.exclude_hv	= 1, +	.exclude_idle	= 1, +	.exclude_host	= 1, +	.exclude_guest	= 1, +}; +  static int perf_ibs_init(struct perf_event *event)  {  	struct hw_perf_event *hwc = &event->hw; @@ -229,6 +238,9 @@ static int perf_ibs_init(struct perf_event *event)  	if (event->pmu != &perf_ibs->pmu)  		return -ENOENT; +	if (perf_flags(&event->attr) & perf_flags(&ibs_notsupp)) +		return -EINVAL; +  	if (config & ~perf_ibs->config_mask)  		return -EINVAL;  |