diff options
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event_amd_ibs.c | 12 | ||||
| -rw-r--r-- | include/linux/perf_event.h | 2 |
2 files changed, 14 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 7bfb5bec8630..eebd5ffe1bba 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) | |||
| 209 | return -EOPNOTSUPP; | 209 | return -EOPNOTSUPP; |
| 210 | } | 210 | } |
| 211 | 211 | ||
| 212 | static const struct perf_event_attr ibs_notsupp = { | ||
| 213 | .exclude_user = 1, | ||
| 214 | .exclude_kernel = 1, | ||
| 215 | .exclude_hv = 1, | ||
| 216 | .exclude_idle = 1, | ||
| 217 | .exclude_host = 1, | ||
| 218 | .exclude_guest = 1, | ||
| 219 | }; | ||
| 220 | |||
| 212 | static int perf_ibs_init(struct perf_event *event) | 221 | static int perf_ibs_init(struct perf_event *event) |
| 213 | { | 222 | { |
| 214 | struct hw_perf_event *hwc = &event->hw; | 223 | struct hw_perf_event *hwc = &event->hw; |
| @@ -229,6 +238,9 @@ static int perf_ibs_init(struct perf_event *event) | |||
| 229 | if (event->pmu != &perf_ibs->pmu) | 238 | if (event->pmu != &perf_ibs->pmu) |
| 230 | return -ENOENT; | 239 | return -ENOENT; |
| 231 | 240 | ||
| 241 | if (perf_flags(&event->attr) & perf_flags(&ibs_notsupp)) | ||
| 242 | return -EINVAL; | ||
| 243 | |||
| 232 | if (config & ~perf_ibs->config_mask) | 244 | if (config & ~perf_ibs->config_mask) |
| 233 | return -EINVAL; | 245 | return -EINVAL; |
| 234 | 246 | ||
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 33ed9d605f91..bdb41612bfec 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
| @@ -274,6 +274,8 @@ struct perf_event_attr { | |||
| 274 | __u64 branch_sample_type; /* enum branch_sample_type */ | 274 | __u64 branch_sample_type; /* enum branch_sample_type */ |
| 275 | }; | 275 | }; |
| 276 | 276 | ||
| 277 | #define perf_flags(attr) (*(&(attr)->read_format + 1)) | ||
| 278 | |||
| 277 | /* | 279 | /* |
| 278 | * Ioctls that can be done on a perf event fd: | 280 | * Ioctls that can be done on a perf event fd: |
| 279 | */ | 281 | */ |
