From mboxrd@z Thu Jan 1 00:00:00 1970 From: Song Liu Subject: Re: [PATCH v5 3/6] perf: implement pmu perf_kprobe Date: Wed, 20 Dec 2017 18:10:11 +0000 Message-ID: References: <20171206224518.3598254-1-songliubraving@fb.com> <20171206224518.3598254-6-songliubraving@fb.com> <20171220100301.bvacqfua4hj2onzq@hirez.programming.kicks-ass.net> <20171220101426.cquh5uv4bgj4bk7y@hirez.programming.kicks-ass.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: Steven Rostedt , "mingo@redhat.com" , David Miller , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "Daniel Borkmann" , Kernel Team To: Peter Zijlstra Return-path: In-Reply-To: <20171220101426.cquh5uv4bgj4bk7y@hirez.programming.kicks-ass.net> Content-Language: en-US Content-ID: Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org > On Dec 20, 2017, at 2:14 AM, Peter Zijlstra wrote: >=20 > On Wed, Dec 20, 2017 at 11:03:01AM +0100, Peter Zijlstra wrote: >> On Wed, Dec 06, 2017 at 02:45:15PM -0800, Song Liu wrote: >>> @@ -8537,7 +8620,7 @@ static int perf_event_set_filter(struct perf_even= t *event, void __user *arg) >>> char *filter_str; >>> int ret =3D -EINVAL; >>>=20 >>> - if ((event->attr.type !=3D PERF_TYPE_TRACEPOINT || >>> + if ((!perf_event_is_tracing(event) || >>> !IS_ENABLED(CONFIG_EVENT_TRACING)) && >>> !has_addr_filter(event)) >>> return -EINVAL; >>=20 >> You actually missed an instance later in this same function... fixing >> that. >=20 >=20 > @@ -8518,23 +8601,19 @@ perf_event_set_addr_filter(struct perf_e >=20 > static int perf_event_set_filter(struct perf_event *event, void __user *a= rg) > { > - char *filter_str; > int ret =3D -EINVAL; > - > - if ((event->attr.type !=3D PERF_TYPE_TRACEPOINT || > - !IS_ENABLED(CONFIG_EVENT_TRACING)) && > - !has_addr_filter(event)) > - return -EINVAL; > + char *filter_str; >=20 > filter_str =3D strndup_user(arg, PAGE_SIZE); > if (IS_ERR(filter_str)) > return PTR_ERR(filter_str); >=20 > - if (IS_ENABLED(CONFIG_EVENT_TRACING) && > - event->attr.type =3D=3D PERF_TYPE_TRACEPOINT) > - ret =3D ftrace_profile_set_filter(event, event->attr.config, > - filter_str); > - else if (has_addr_filter(event)) > +#ifdef CONFIG_EVENT_TRACING > + if (perf_event_is_tracing(event)) > + ret =3D ftrace_profile_set_filter(event, event->attr.config, filter_st= r); > + else > +#endif > + if (has_addr_filter(event)) > ret =3D perf_event_set_addr_filter(event, filter_str); >=20 > kfree(filter_str); >=20 >=20 >=20 > Is that right? Yeah, this is right and neat. Thanks a lot for your help on this.=20 I think there is one more thing to change: diff --git i/kernel/events/core.c w/kernel/events/core.c index a906f30..516ff9b 100644 --- i/kernel/events/core.c +++ w/kernel/events/core.c @@ -8226,7 +8226,7 @@ static int perf_event_set_bpf_prog(struct perf_event = *event, u32 prog_fd) static void perf_event_free_bpf_prog(struct perf_event *event) { - if (event->attr.type !=3D PERF_TYPE_TRACEPOINT) { + if (!perf_event_is_tracing(event)) { perf_event_free_bpf_handler(event); return; } Thanks, Song=