Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1031048AbbDWXhe (ORCPT ); Thu, 23 Apr 2015 19:37:34 -0400 Received: from mail7.hitachi.co.jp ([133.145.228.42]:46397 "EHLO mail7.hitachi.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934082AbbDWXhb (ORCPT ); Thu, 23 Apr 2015 19:37:31 -0400 Message-ID: <55398233.1090508@hitachi.com> Date: Fri, 24 Apr 2015 08:37:23 +0900 From: Masami Hiramatsu Organization: Hitachi, Ltd., Japan User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20120614 Thunderbird/13.0.1 MIME-Version: 1.0 To: Arnaldo Carvalho de Melo CC: Peter Zijlstra , Linux Kernel Mailing List , David Ahern , namhyung@kernel.org, Jiri Olsa , Ingo Molnar Subject: Re: Re: [PATCH perf/core v2 3/8] perf probe: Accept multiple filter options References: <20150423134610.26128.82557.stgit@localhost.localdomain> <20150423134616.26128.40942.stgit@localhost.localdomain> <20150423145524.GG7881@kernel.org> In-Reply-To: <20150423145524.GG7881@kernel.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5146 Lines: 158 (2015/04/23 23:55), Arnaldo Carvalho de Melo wrote: > Em Thu, Apr 23, 2015 at 10:46:17PM +0900, Masami Hiramatsu escreveu: >> Accept multiple filter options. Each filters are combined >> by logical-or. E.g. --filter abc* --filter *def is same >> as --filter abc*|*def > > Please break this patch in two, one introducing the new strfilter > functionality, the other making perf-probe use it. > > This way if later I had to revert the perf-probe part but keep the > strfilter, if used by a later patch, that would be possible. > > I.e. in general please try to add new functionality for a library > function in a patch and the actual use of it in another patch. OK, I'll split strfilter features(__or, __string) out from these patches. > I applied the first two, and will continue after you reply to this, > thanks! thanks! > > - Arnaldo > >> Signed-off-by: Masami Hiramatsu >> --- >> tools/perf/builtin-probe.c | 14 +++++++++----- >> tools/perf/util/strfilter.c | 34 ++++++++++++++++++++++++++++++++++ >> tools/perf/util/strfilter.h | 13 +++++++++++++ >> 3 files changed, 56 insertions(+), 5 deletions(-) >> >> diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c >> index 92dcce0..be17075 100644 >> --- a/tools/perf/builtin-probe.c >> +++ b/tools/perf/builtin-probe.c >> @@ -262,21 +262,25 @@ static int opt_set_filter(const struct option *opt __maybe_unused, >> const char *str, int unset __maybe_unused) >> { >> const char *err; >> + int ret = 0; >> >> if (str) { >> pr_debug2("Set filter: %s\n", str); >> - if (params.filter) >> - strfilter__delete(params.filter); >> - params.filter = strfilter__new(str, &err); >> if (!params.filter) { >> + params.filter = strfilter__new(str, &err); >> + if (!params.filter) >> + ret = err ? -EINVAL : -ENOMEM; >> + } else >> + ret = strfilter__or(params.filter, str, &err); >> + >> + if (ret == -EINVAL) { >> pr_err("Filter parse error at %td.\n", err - str + 1); >> pr_err("Source: \"%s\"\n", str); >> pr_err(" %*c\n", (int)(err - str + 1), '^'); >> - return -EINVAL; >> } >> } >> >> - return 0; >> + return ret; >> } >> >> static int init_params(void) >> diff --git a/tools/perf/util/strfilter.c b/tools/perf/util/strfilter.c >> index 79a757a..cd659e6 100644 >> --- a/tools/perf/util/strfilter.c >> +++ b/tools/perf/util/strfilter.c >> @@ -170,6 +170,40 @@ struct strfilter *strfilter__new(const char *rules, const char **err) >> return filter; >> } >> >> +static int strfilter__add(struct strfilter *filter, bool _or, const char *rules, >> + const char **err) >> +{ >> + struct strfilter_node *right, *root; >> + const char *ep = NULL; >> + >> + if (!filter || !rules) >> + return -EINVAL; >> + >> + right = strfilter_node__new(rules, &ep); >> + if (!right || *ep != '\0') { >> + if (err) >> + *err = ep; >> + goto error; >> + } >> + root = strfilter_node__alloc(_or ? OP_or : OP_and, filter->root, right); >> + if (!root) { >> + ep = NULL; >> + goto error; >> + } >> + >> + filter->root = root; >> + return 0; >> + >> +error: >> + strfilter_node__delete(right); >> + return ep ? -EINVAL : -ENOMEM; >> +} >> + >> +int strfilter__or(struct strfilter *filter, const char *rules, const char **err) >> +{ >> + return strfilter__add(filter, true, rules, err); >> +} >> + >> static bool strfilter_node__compare(struct strfilter_node *node, >> const char *str) >> { >> diff --git a/tools/perf/util/strfilter.h b/tools/perf/util/strfilter.h >> index fe611f3..c81ff97 100644 >> --- a/tools/perf/util/strfilter.h >> +++ b/tools/perf/util/strfilter.h >> @@ -29,6 +29,19 @@ struct strfilter { >> struct strfilter *strfilter__new(const char *rules, const char **err); >> >> /** >> + * strfilter__or - Add an additional rule by logical-or >> + * @filter: Original string filter >> + * @rules: Filter rule to add at left of the root of @filter >> + * by using logical-and. >> + * @err: Pointer which points an error detected on @rules >> + * >> + * Parse @rules and join it to the @filter by using logical-or. >> + * Return 0 if success, or return the error code. >> + */ >> +int strfilter__or(struct strfilter *filter, >> + const char *rules, const char **err); >> + >> +/** >> * strfilter__compare - compare given string and a string filter >> * @filter: String filter >> * @str: target string > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > -- Masami HIRAMATSU Linux Technology Research Center, System Productivity Research Dept. Center for Technology Innovation - Systems Engineering Hitachi, Ltd., Research & Development Group E-mail: masami.hiramatsu.pt@hitachi.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/