From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753472AbdFMOpL (ORCPT ); Tue, 13 Jun 2017 10:45:11 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60606 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752326AbdFMOpK (ORCPT ); Tue, 13 Jun 2017 10:45:10 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 6844860C8 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=jolsa@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 6844860C8 Date: Tue, 13 Jun 2017 16:45:07 +0200 From: Jiri Olsa To: "Naveen N. Rao" Cc: Peter Zijlstra , Arnaldo Carvalho de Melo , Ingo Molnar , linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH v2 1/2] kernel/events: Add option to notify through signals on wakeup Message-ID: <20170613144507.GB10107@krava> References: <374b82f688b09c8b8160652089ff312a302830a0.1497353130.git.naveen.n.rao@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <374b82f688b09c8b8160652089ff312a302830a0.1497353130.git.naveen.n.rao@linux.vnet.ibm.com> User-Agent: Mutt/1.8.0 (2017-02-23) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 13 Jun 2017 14:45:09 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jun 13, 2017 at 05:03:42PM +0530, Naveen N. Rao wrote: SNIP > diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h > index b1c0b187acfe..e5810b1d74a4 100644 > --- a/include/uapi/linux/perf_event.h > +++ b/include/uapi/linux/perf_event.h > @@ -345,7 +345,8 @@ struct perf_event_attr { > context_switch : 1, /* context switch data */ > write_backward : 1, /* Write ring buffer from end to beginning */ > namespaces : 1, /* include namespaces data */ > - __reserved_1 : 35; > + signal_on_wakeup : 1, /* send signal on wakeup */ > + __reserved_1 : 34; > > union { > __u32 wakeup_events; /* wakeup every n events */ > diff --git a/kernel/events/core.c b/kernel/events/core.c > index 6c4e523dc1e2..73ad30e124e5 100644 > --- a/kernel/events/core.c > +++ b/kernel/events/core.c > @@ -7362,12 +7362,14 @@ static int __perf_event_overflow(struct perf_event *event, > * events > */ > > - event->pending_kill = POLL_IN; > - if (events && atomic_dec_and_test(&event->event_limit)) { > - ret = 1; > - event->pending_kill = POLL_HUP; > + if (!event->attr.signal_on_wakeup) { > + event->pending_kill = POLL_IN; > + if (events && atomic_dec_and_test(&event->event_limit)) { > + ret = 1; > + event->pending_kill = POLL_HUP; > > - perf_event_disable_inatomic(event); > + perf_event_disable_inatomic(event); > + } > } > > READ_ONCE(event->overflow_handler)(event, data, regs); > diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c > index 2831480c63a2..4e7c728569a8 100644 > --- a/kernel/events/ring_buffer.c > +++ b/kernel/events/ring_buffer.c > @@ -21,6 +21,9 @@ static void perf_output_wakeup(struct perf_output_handle *handle) > { > atomic_set(&handle->rb->poll, POLLIN); > > + if (handle->event->attr.signal_on_wakeup) > + handle->event->pending_kill = POLL_IN; > + since it's signal_on_wakeup, should we also send POLL_HUP for perf_event_wakeup calls from perf_event_exit_event? jirka