From 1896611f34db7159fe00a0b03efc4c96ddbb1ec2 Mon Sep 17 00:00:00 2001 From: Robert Richter Date: Wed, 25 Jul 2012 19:12:45 +0200 Subject: [PATCH] --- yaml --- r: 323047 b: refs/heads/master c: bad9ac2d7f878a31cf1ae8c1ee3768077d222bcb h: refs/heads/master i: 323045: a10b55cce9703edea39ced5864a196617cb5a7b2 323043: 810d165bd30294a5fac6e829871b96dcf9cfc062 323039: 0fe58be92d7895cd29976b57710447e5bf71203e v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/cpu/perf_event_amd_ibs.c | 12 ++++++++++++ trunk/include/linux/perf_event.h | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 022881171e25..35b280286648 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 35534b201c9f115c68962c095b5a9aad204d025f +refs/heads/master: bad9ac2d7f878a31cf1ae8c1ee3768077d222bcb diff --git a/trunk/arch/x86/kernel/cpu/perf_event_amd_ibs.c b/trunk/arch/x86/kernel/cpu/perf_event_amd_ibs.c index 7bfb5bec8630..eebd5ffe1bba 100644 --- a/trunk/arch/x86/kernel/cpu/perf_event_amd_ibs.c +++ b/trunk/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; diff --git a/trunk/include/linux/perf_event.h b/trunk/include/linux/perf_event.h index 33ed9d605f91..bdb41612bfec 100644 --- a/trunk/include/linux/perf_event.h +++ b/trunk/include/linux/perf_event.h @@ -274,6 +274,8 @@ struct perf_event_attr { __u64 branch_sample_type; /* enum branch_sample_type */ }; +#define perf_flags(attr) (*(&(attr)->read_format + 1)) + /* * Ioctls that can be done on a perf event fd: */