All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Corey Ashford <cjashfor@linux.vnet.ibm.com>,
	David Ahern <dsahern@gmail.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	Jean Pihet <jean.pihet@linaro.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Paul Mackerras <paulus@samba.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 13/16] perf: Add PERF_EVENT_STATE_EXIT state for events with exited task
Date: Fri, 22 Aug 2014 13:29:25 -0300	[thread overview]
Message-ID: <1408724968-3441-14-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1408724968-3441-1-git-send-email-acme@kernel.org>

From: Jiri Olsa <jolsa@kernel.org>

Adding new perf event state to indicate that the monitored task has
exited.  In this case the event stays alive until the owner task exits
or close the event fd while providing the last data through the read
syscall and ring buffer.

Instead it needs to propagate the error info (monitored task has died)
via poll and read  syscalls by  returning POLLHUP and 0 respectively.

Acked-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20140811120102.GY9918@twins.programming.kicks-ass.net
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jean Pihet <jean.pihet@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/n/tip-t5y3w8jjx6tfo5w8y6oajsjq@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 include/linux/perf_event.h |  1 +
 kernel/events/core.c       | 10 +++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index f0a1036b1911..893a0d07986f 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -269,6 +269,7 @@ struct pmu {
  * enum perf_event_active_state - the states of a event
  */
 enum perf_event_active_state {
+	PERF_EVENT_STATE_EXIT		= -3,
 	PERF_EVENT_STATE_ERROR		= -2,
 	PERF_EVENT_STATE_OFF		= -1,
 	PERF_EVENT_STATE_INACTIVE	=  0,
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 4575dd6e59ea..d8cb4d21a346 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -3600,7 +3600,8 @@ perf_read_hw(struct perf_event *event, char __user *buf, size_t count)
 	 * error state (i.e. because it was pinned but it couldn't be
 	 * scheduled on to the CPU at some point).
 	 */
-	if (event->state == PERF_EVENT_STATE_ERROR)
+	if ((event->state == PERF_EVENT_STATE_ERROR) ||
+	    (event->state == PERF_EVENT_STATE_EXIT))
 		return 0;
 
 	if (count < event->read_size)
@@ -3630,6 +3631,10 @@ static unsigned int perf_poll(struct file *file, poll_table *wait)
 	unsigned int events = POLLHUP;
 
 	poll_wait(file, &event->waitq, wait);
+
+	if (event->state == PERF_EVENT_STATE_EXIT)
+		return events;
+
 	/*
 	 * Pin the event->rb by taking event->mmap_mutex; otherwise
 	 * perf_event_set_output() can swizzle our rb and make us miss wakeups.
@@ -7588,6 +7593,9 @@ __perf_event_exit_task(struct perf_event *child_event,
 	if (child_event->parent) {
 		sync_child_event(child_event, child);
 		free_event(child_event);
+	} else {
+		child_event->state = PERF_EVENT_STATE_EXIT;
+		perf_event_wakeup(child_event);
 	}
 }
 
-- 
1.9.3


  parent reply	other threads:[~2014-08-22 16:31 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-22 16:29 [GIT PULL 00/16] perf/core improvements and fixes Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 01/16] perf symbols: Don't try to find DSOs in SYSV maps Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 02/16] perf tools powerpc: Explicitly include util/debug.h Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 03/16] perf hists browser: Get rid of unused 'remaining' variable Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 04/16] perf hists browser: Fix children overhead dump Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 05/16] perf hists browser: Factor out hist_browser__show_callchain_entry() Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 06/16] perf tests: Add a test for tracking with sched_switch Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 07/16] perf scripting: Add 'flush' callback to scripting API Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 08/16] perf machine: Rename machine__get_kernel_start_addr() method Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 09/16] perf tools: Add machine__kernel_ip() Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 10/16] perf hists browser: Cleanup callchain print functions Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 11/16] perf machine: Fallback to MAP__FUNCTION if daddr maps are NULL Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 12/16] perf: Fix perf_poll to return proper POLLHUP value Arnaldo Carvalho de Melo
2014-08-22 16:29 ` Arnaldo Carvalho de Melo [this message]
2014-08-22 16:29 ` [PATCH 14/16] perf top: Use set_term_quiet() instead of open coded equivalent Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 15/16] perf tools: Add +field argument support for --field option Arnaldo Carvalho de Melo
2014-08-22 16:29 ` [PATCH 16/16] perf hists browser: Consolidate callchain print functions in TUI Arnaldo Carvalho de Melo
2014-08-24 10:11 ` [GIT PULL 00/16] perf/core improvements and fixes Ingo Molnar
2014-08-24 11:16   ` Arnaldo Carvalho de Melo
2014-08-24 14:47     ` Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1408724968-3441-14-git-send-email-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=cjashfor@linux.vnet.ibm.com \
    --cc=dsahern@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=jean.pihet@linaro.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.