Received: by 10.192.165.148 with SMTP id m20csp209865imm; Fri, 4 May 2018 09:04:02 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrJwGfO+IjK9aEgdf15jo9fvoRzg1zIgfjgSUMZfjrNyoPiM8vtFtSMDvO63u3rv+kZSBx7 X-Received: by 10.98.159.202 with SMTP id v71mr27405898pfk.233.1525449842641; Fri, 04 May 2018 09:04:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525449842; cv=none; d=google.com; s=arc-20160816; b=S2DF063flSewlTmzcmysXJC6nEZV8UrgAMlq8f7p04Lw+yqAjBWTxQcAyvCbCTrOZy b2WNsHHxy7wd3tedPc/J9b6uKI9ExLJwGgFgq1zUxJCPFaeVdoRUKc26Cf2nBS4LF6KW 2mI1App6GJWsX0Ur7MHLoo/CcjsIZK7qDnR0w90bKNqaULE824GlOME99y0rQa1BVwKG OgLKoqyWiv5RZ9kyEBQFSJJHannO9A2tNJYYSeT9G2jWoIJ1Gc3gJLe5K8aE1j+qPON0 Bjbr9WGEdroKtRpdV2HQaLiGgyuy45yGstZBAWOjOZCHIG5mrVaouwX55/uxGwd5YDds LPMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=3aYX1oKym3DhpQMfoC+hIeDJN0LTj4CGa6bu4bk2v50=; b=ISgGMPhpv3X6AxCjQt0u7Rv/4W9DQWyXeVRKX24zlVVymTV8uVnyPRZqobBLd82G1s svnW2hzpIC2XnlqP7fEkFftC4fY/IGZ8x051o0G2xLL/bVNbyy0Dp7Dlnwdu1Ax6whA3 TJu5TToGRUuqUVZ/dqeIpdA8KtvY2HibCfBXkl60jN3qFdPC6kJzAH8ZyT5mSD/yqixM oViM8Ajdpf3rZjY8xAYckVjB2TNSn8aUcp1WNPX+brVUd3dgbUr/xmoegnQqnvhrBpuy aZFvD6O3YtK0Xs+c5yXncyx/1KuXL3AhTz0kpLk4JSViuPHjk3ST6ZtaySg1q/feqS/R H2Tw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m2-v6si2894903pgs.349.2018.05.04.09.03.23; Fri, 04 May 2018 09:04:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751538AbeEDQCe (ORCPT + 99 others); Fri, 4 May 2018 12:02:34 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:34616 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751196AbeEDQCd (ORCPT ); Fri, 4 May 2018 12:02:33 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8FA8C406EA4F; Fri, 4 May 2018 16:02:32 +0000 (UTC) Received: from krava (unknown [10.43.17.154]) by smtp.corp.redhat.com (Postfix) with SMTP id 6CC5611166F4; Fri, 4 May 2018 16:02:29 +0000 (UTC) Date: Fri, 4 May 2018 18:02:28 +0200 From: Jiri Olsa To: Adrian Hunter Cc: Arnaldo Carvalho de Melo , Ingo Molnar , Clark Williams , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Jiri Olsa , Alexander Shishkin , David Ahern , Namhyung Kim , Peter Zijlstra , Arnaldo Carvalho de Melo , kan.liang@linux.intel.com Subject: Re: [PATCH 05/12] perf pmu: Fix pmu events parsing rule Message-ID: <20180504160228.GA25229@krava> References: <20180425160008.3407-1-acme@kernel.org> <20180425160008.3407-6-acme@kernel.org> <448c4e21-8232-3d04-cac4-49b95c8bca3a@intel.com> <20180503103717.GA14776@krava> <0c33d3f9-4b76-c94c-7306-e93e8cd8d4aa@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <0c33d3f9-4b76-c94c-7306-e93e8cd8d4aa@intel.com> User-Agent: Mutt/1.9.1 (2017-09-22) X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Fri, 04 May 2018 16:02:32 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Fri, 04 May 2018 16:02:32 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'jolsa@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, May 03, 2018 at 02:38:15PM +0300, Adrian Hunter wrote: SNIP > >>> index 7afeb80cc39e..d14464c42714 100644 > >>> --- a/tools/perf/util/parse-events.y > >>> +++ b/tools/perf/util/parse-events.y > >>> @@ -224,15 +224,15 @@ event_def: event_pmu | > >>> event_bpf_file > >>> > >>> event_pmu: > >>> -PE_NAME opt_event_config > >>> +PE_NAME '/' event_config '/' > >> > >> These are not equivalent because opt_event_config allows '//' > >> but event_config cannot be an empty string. > > > > yep, overlooked this one, how about patch below > > Seems to work but gives build warnings: > > util/parse-events.y: warning: 1 shift/reduce conflict [-Wconflicts-sr] > util/parse-events.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr] I had to make an explicit rule, so I moved the original rule code into separate function.. hence the patch is little bigger ;-) cc-ing Kan Liang, who recently changed this code, I'll still have to rebase this one his recent change, once it gets in, but should be easy jirka --- tools/perf/util/parse-events.c | 43 +++++++++++++++++++++++++++++++++++ tools/perf/util/parse-events.h | 3 +++ tools/perf/util/parse-events.y | 51 +++++++++++++----------------------------- 3 files changed, 62 insertions(+), 35 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 2fb0272146d8..33e3fc147f35 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "term.h" #include "../perf.h" #include "evlist.h" @@ -1287,6 +1288,48 @@ int parse_events_add_pmu(struct parse_events_state *parse_state, return evsel ? 0 : -ENOMEM; } +int parse_events_pmu(struct parse_events_state *parse_state, + struct list_head *list, char *name, + struct list_head *head_config) +{ + struct list_head *orig_terms; + struct perf_pmu *pmu = NULL; + char *pattern = NULL; + int ok = 0; + + if (!parse_events_add_pmu(parse_state, list, name, head_config, false)) + return 0; + + if (parse_events_copy_term_list(head_config, &orig_terms)) + return -1; + + if (asprintf(&pattern, "%s*", name) < 0) + goto out; + + while ((pmu = perf_pmu__scan(pmu)) != NULL) { + struct list_head *terms; + char *tmp = pmu->name; + + if (!strncmp(tmp, "uncore_", 7) && + strncmp(tmp, "uncore_", 7)) + tmp += 7; + if (!fnmatch(pattern, tmp, 0)) { + if (parse_events_copy_term_list(orig_terms, &terms)) { + ok = 0; + goto out; + } + if (!parse_events_add_pmu(parse_state, list, pmu->name, terms, true)) + ok++; + parse_events_terms__delete(terms); + } + } + +out: + parse_events_terms__delete(orig_terms); + free(pattern); + return ok ? 0 : -1; +} + int parse_events_multi_pmu_add(struct parse_events_state *parse_state, char *str, struct list_head **listp) { diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 5015cfd58277..743586213ee4 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -168,6 +168,9 @@ int parse_events_add_breakpoint(struct list_head *list, int *idx, int parse_events_add_pmu(struct parse_events_state *parse_state, struct list_head *list, char *name, struct list_head *head_config, bool auto_merge_stats); +int parse_events_pmu(struct parse_events_state *parse_state, + struct list_head *list, char *name, + struct list_head *head_config); int parse_events_multi_pmu_add(struct parse_events_state *parse_state, char *str, diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index d14464c42714..a93f8c660395 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -8,7 +8,6 @@ #define YYDEBUG 1 -#include #include #include #include @@ -226,44 +225,26 @@ event_def: event_pmu | event_pmu: PE_NAME '/' event_config '/' { - struct list_head *list, *orig_terms, *terms; + struct list_head *list; + + ALLOC_LIST(list); - if (parse_events_copy_term_list($3, &orig_terms)) + if (parse_events_pmu(_parse_state, list, $1, $3)) YYABORT; - ALLOC_LIST(list); - if (parse_events_add_pmu(_parse_state, list, $1, $3, false)) { - struct perf_pmu *pmu = NULL; - int ok = 0; - char *pattern; - - if (asprintf(&pattern, "%s*", $1) < 0) - YYABORT; - - while ((pmu = perf_pmu__scan(pmu)) != NULL) { - char *name = pmu->name; - - if (!strncmp(name, "uncore_", 7) && - strncmp($1, "uncore_", 7)) - name += 7; - if (!fnmatch(pattern, name, 0)) { - if (parse_events_copy_term_list(orig_terms, &terms)) { - free(pattern); - YYABORT; - } - if (!parse_events_add_pmu(_parse_state, list, pmu->name, terms, true)) - ok++; - parse_events_terms__delete(terms); - } - } - - free(pattern); - - if (!ok) - YYABORT; - } parse_events_terms__delete($3); - parse_events_terms__delete(orig_terms); + $$ = list; +} +| +PE_NAME '/' '/' +{ + struct list_head *list; + + ALLOC_LIST(list); + + if (parse_events_pmu(_parse_state, list, $1, NULL)) + YYABORT; + $$ = list; } | -- 2.13.6