From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753758AbcAVTgw (ORCPT ); Fri, 22 Jan 2016 14:36:52 -0500 Received: from mail-pa0-f46.google.com ([209.85.220.46]:35316 "EHLO mail-pa0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751292AbcAVTgr (ORCPT ); Fri, 22 Jan 2016 14:36:47 -0500 Date: Fri, 22 Jan 2016 11:36:44 -0800 From: Alexei Starovoitov To: Wang Nan Cc: peterz@infradead.org, acme@kernel.org, linux-kernel@vger.kernel.org, He Kuang , Alexei Starovoitov , Arnaldo Carvalho de Melo , Brendan Gregg , Jiri Olsa , Masami Hiramatsu , Namhyung Kim , Zefan Li , pi3orama@163.com Subject: Re: [PATCH 1/6] perf core: Introduce new ioctl options to pause and resume ring buffer Message-ID: <20160122193643.GA11338@ast-mbp.thefacebook.com> References: <1453464834-233200-1-git-send-email-wangnan0@huawei.com> <1453464834-233200-2-git-send-email-wangnan0@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1453464834-233200-2-git-send-email-wangnan0@huawei.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jan 22, 2016 at 12:13:49PM +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. > This patch is for supporting overwritable ring buffer with TAILSIZE > selected. TAILSIZE is dropped. pls adjust commit log. > 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..2c7f00c 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 _IO ('$', 9) do you need to add '__u32' here, since boolean flag is passed to it? > + case PERF_EVENT_IOC_PAUSE_OUTPUT: { > + struct ring_buffer *rb; > + > + rcu_read_lock(); > + rb = rcu_dereference(event->rb); > + if (!event->rb) { > + rcu_read_unlock(); > + return -EINVAL; > + } > + rb_toggle_paused(rb, !!arg); > + rcu_read_unlock(); > + return 0; > + }