Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753454AbcC2BMc (ORCPT ); Mon, 28 Mar 2016 21:12:32 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:26334 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752559AbcC2BM3 (ORCPT ); Mon, 28 Mar 2016 21:12:29 -0400 Subject: Re: [PATCH 1/4] perf core: Introduce new ioctl options to pause and resume ring buffer To: Alexei Starovoitov References: <1459147292-239310-1-git-send-email-wangnan0@huawei.com> <1459147292-239310-2-git-send-email-wangnan0@huawei.com> <20160329002724.GB31198@ast-mbp.thefacebook.com> CC: Alexei Starovoitov , Arnaldo Carvalho de Melo , Peter Zijlstra , , Brendan Gregg , He Kuang , Jiri Olsa , "Masami Hiramatsu" , Namhyung Kim , , Zefan Li From: "Wangnan (F)" Message-ID: <56F9D611.3040108@huawei.com> Date: Tue, 29 Mar 2016 09:10:41 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 In-Reply-To: <20160329002724.GB31198@ast-mbp.thefacebook.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.111.66.109] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020202.56F9D622.00C9,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-06-18 04:22:30, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: a6c0061c8e39f9446f32e4022c56799e Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2516 Lines: 63 On 2016/3/29 8:27, Alexei Starovoitov wrote: > On Mon, Mar 28, 2016 at 06:41:29AM +0000, Wang Nan wrote: >> Add new ioctl() to pause/resume ring-buffer output. >> >> In some situations we want to read from ring buffer only when we >> ensure nothing can write to the ring buffer during reading. Without >> this patch we have to turn off all events attached to this ring buffer >> to achieve this. >> >> This patch is for supporting overwrite ring buffer. Following >> commits will introduce new methods support reading from overwrite ring >> buffer. Before reading, caller must ensure the ring buffer is frozen, or >> the reading is unreliable. >> >> Signed-off-by: Wang Nan >> Cc: He Kuang >> Cc: Alexei Starovoitov >> Cc: Arnaldo Carvalho de Melo >> Cc: Brendan Gregg >> Cc: Jiri Olsa >> Cc: Masami Hiramatsu >> Cc: Namhyung Kim >> Cc: Peter Zijlstra >> Cc: Zefan Li >> Cc: pi3orama@163.com >> --- >> include/uapi/linux/perf_event.h | 1 + >> kernel/events/core.c | 13 +++++++++++++ >> kernel/events/internal.h | 11 +++++++++++ >> kernel/events/ring_buffer.c | 7 ++++++- >> 4 files changed, 31 insertions(+), 1 deletion(-) >> >> diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h >> index 1afe962..a3c1903 100644 >> --- a/include/uapi/linux/perf_event.h >> +++ b/include/uapi/linux/perf_event.h >> @@ -401,6 +401,7 @@ struct perf_event_attr { >> #define PERF_EVENT_IOC_SET_FILTER _IOW('$', 6, char *) >> #define PERF_EVENT_IOC_ID _IOR('$', 7, __u64 *) >> #define PERF_EVENT_IOC_SET_BPF _IOW('$', 8, __u32) >> +#define PERF_EVENT_IOC_PAUSE_OUTPUT _IOW('$', 9, __u32) >> >> enum perf_event_ioc_flags { >> PERF_IOC_FLAG_GROUP = 1U << 0, >> diff --git a/kernel/events/core.c b/kernel/events/core.c >> index de24fbc..cb47da3 100644 >> --- a/kernel/events/core.c >> +++ b/kernel/events/core.c >> @@ -4341,6 +4341,19 @@ static long _perf_ioctl(struct perf_event *event, unsigned int cmd, unsigned lon >> case PERF_EVENT_IOC_SET_BPF: >> return perf_event_set_bpf_prog(event, arg); >> >> + case PERF_EVENT_IOC_PAUSE_OUTPUT: { >> + struct ring_buffer *rb; >> + >> + rcu_read_lock(); >> + rb = rcu_dereference(event->rb); >> + if (!event->rb) { > should have been 'if (!rb)', right? Good catch. Thank you!