lkml.org 
[lkml]   [2015]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] perf/x86: fix filter_events() bug with event mappings
On Sun, Dec 06, 2015 at 10:35:06PM +0100, Stephane Eranian wrote:

SNIP

>
> This problem was introduced into commit 8300daa26.
>
> Fixes: 8300daa26 ("perf/x86: Filter out undefined events from sysfs events attribute")
>
> Patch is relative to tip.git commit 03b6b9f.
>
> Signed-off-by: Stephane Eranian <eranian@google.com>
> ---
> arch/x86/kernel/cpu/perf_event.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
> index e7e63a9..70e16c7 100644
> --- a/arch/x86/kernel/cpu/perf_event.c
> +++ b/arch/x86/kernel/cpu/perf_event.c
> @@ -1534,6 +1534,7 @@ static void __init filter_events(struct attribute **attrs)
> {
> struct device_attribute *d;
> struct perf_pmu_events_attr *pmu_attr;
> + int offset = 0;
> int i, j;
>
> for (i = 0; attrs[i]; i++) {
> @@ -1542,14 +1543,23 @@ static void __init filter_events(struct attribute **attrs)
> /* str trumps id */
> if (pmu_attr->event_str)
> continue;
> - if (x86_pmu.event_map(i))
> + if (x86_pmu.event_map(i + offset))
> continue;
>
> for (j = i; attrs[j]; j++)
> attrs[j] = attrs[j + 1];
> + attrs[j] = NULL;

hum.. the loop above quits when attrs[j] == NULL,
so I dont think u need to assign it again after

the NULL should get shifted in the last iteration of the loop above

>
> /* Check the shifted attr. */
> i--;
> +
> + /*
> + * event_map() is index based, the attrs array is organized
> + * by increasing event index. If we shift the events, then
> + * we need to compensate for the event_map(), otherwise
> + * we are looking up the wrong event in the map
> + */
> + offset++;

ouch, thanks for fixing this

I tested the patch and it fixes the issue

jirka


\
 
 \ /
  Last update: 2015-12-07 11:01    [W:0.064 / U:0.772 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site