All of lore.kernel.org
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: Jiri Olsa <jolsa@redhat.com>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Paul Mackerras <paulus@samba.org>, Ingo Molnar <mingo@kernel.org>,
	Namhyung Kim <namhyung.kim@lge.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	David Ahern <dsahern@gmail.com>,
	Stephane Eranian <eranian@google.com>
Subject: Re: [PATCH 09/14] perf ftrace: Add 'record' sub-command
Date: Mon, 06 May 2013 10:44:56 +0900	[thread overview]
Message-ID: <87mws8990n.fsf@sejong.aot.lge.com> (raw)
In-Reply-To: <87bo939lgt.fsf@sejong.aot.lge.com> (Namhyung Kim's message of "Thu, 25 Apr 2013 15:24:18 +0900")

Hi Jiri,

Sorry for late reply.  I've been busy these days.

On Thu, 25 Apr 2013 15:24:18 +0900, Namhyung Kim wrote:
> On Wed, 24 Apr 2013 16:12:41 +0200, Jiri Olsa wrote:
>> I got following lockup for record command:
>>
>>   # ./perf --no-pager ftrace record ls
>>   ...
>>   hangs
>>
>>   in other terminal:
>>
>>   # pstack 14237
>>   Thread 2 (Thread 0x7f3f1aa1d700 (LWP 14241)):
>>   #0  0x0000003cec20b595 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
>>   #1  0x0000000000446ebe in record_ftrace_raw_buffer (arg=0x21f9ce0) at builtin-ftrace.c:451
>>   #2  0x0000003cec207d14 in start_thread () from /lib64/libpthread.so.0
>>   #3  0x0000003cebaf168d in clone () from /lib64/libc.so.6
>>   Thread 1 (Thread 0x7f3f1ba209c0 (LWP 14237)):
>>   #0  0x0000003cec208e60 in pthread_join () from /lib64/libpthread.so.0
>>   #1  0x0000000000449c8c in do_ftrace_record (ftrace=ftrace@entry=0x7fff1377d240) at builtin-ftrace.c:682
>>   #2  0x000000000044a57b in __cmd_ftrace_record (argv=0x7fff1377d818, argc=<optimized out>, ftrace=0x7fff1377d240) at builtin-ftrace.c:1535
>>   #3  cmd_ftrace (argc=2, argv=0x7fff1377d818, prefix=<optimized out>) at builtin-ftrace.c:1655
>>   #4  0x000000000041a763 in run_builtin (p=p@entry=0x7d58a0, argc=argc@entry=3, argv=argv@entry=0x7fff1377d818) at perf.c:320
>>   #5  0x0000000000419faf in handle_internal_command (argv=0x7fff1377d818, argc=3) at perf.c:377
>>   #6  run_argv (argv=0x7fff1377d600, argcp=0x7fff1377d60c) at perf.c:421
>>   #7  main (argc=3, argv=0x7fff1377d818) at perf.c:522
>>
>
> How often can you reproduce it?  I can't. :(
>
> But it looks there's a race between cond_wait() and cond_broatcast().
> I'll take a look at that.

I think the problem is that a recorder can be blocked if it received a
broadcast signal before calling cond_wait().  So I modified the code to
place signaling ready_cond and waiting start_cond in the same cs.

Does the patch below fix your problem?

Thanks,
Namhyung


diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c
index 4296948197de..f1ecfa207822 100644
--- a/tools/perf/builtin-ftrace.c
+++ b/tools/perf/builtin-ftrace.c
@@ -428,12 +428,6 @@ static void *record_ftrace_raw_buffer(void *arg)
 
        fra->state = RECORD_STATE__READY;
 
-       /* Now I'm ready */
-       pthread_mutex_lock(&recorder_mutex);
-       recorder_count++;
-       pthread_cond_signal(&recorder_ready_cond);
-       pthread_mutex_unlock(&recorder_mutex);
-
        /*
         * block all signals but SIGUSR2.
         * It'll be used to unblock a recorder to finish.
@@ -447,7 +441,10 @@ static void *record_ftrace_raw_buffer(void *arg)
        fcntl(trace_fd, F_SETFL, O_NONBLOCK);
        pollfd.fd = trace_fd;
 
+       /* Now I'm ready */
        pthread_mutex_lock(&recorder_mutex);
+       recorder_count++;
+       pthread_cond_signal(&recorder_ready_cond);
        pthread_cond_wait(&recorder_start_cond, &recorder_mutex);
        pthread_mutex_unlock(&recorder_mutex);
 

  parent reply	other threads:[~2013-05-06  1:45 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-23  8:30 [RFC 00/14] perf tools: Introduce new 'ftrace' command Namhyung Kim
2013-04-23  8:30 ` [PATCH 01/14] perf util: Move debugfs/tracing helper functions to util.c Namhyung Kim
2013-04-24 12:32   ` Jiri Olsa
2013-04-23  8:31 ` [PATCH 02/14] perf util: Use evsel->name to get tracepoint_paths Namhyung Kim
2013-04-23 13:07   ` Steven Rostedt
2013-04-24 10:36     ` Namhyung Kim
2013-04-24 12:42   ` Jiri Olsa
2013-04-25  5:58     ` Namhyung Kim
2013-04-23  8:31 ` [PATCH 03/14] perf util: Save pid-cmdline mapping into tracing header Namhyung Kim
2013-04-23  8:31 ` [PATCH 04/14] perf util: Add more debug message on failure path Namhyung Kim
2013-04-23  8:31 ` [PATCH 05/14] perf tools: Introduce new 'ftrace' tool Namhyung Kim
2013-04-24 14:09   ` Jiri Olsa
2013-04-25  6:06     ` Namhyung Kim
2013-04-25  9:09       ` Jiri Olsa
2013-04-25  9:51         ` Namhyung Kim
2013-04-25 13:05           ` Steven Rostedt
2013-04-25 14:49             ` Jiri Olsa
2013-04-26 13:34             ` David Ahern
2013-04-26 13:50               ` Steven Rostedt
2013-04-23  8:31 ` [PATCH 06/14] perf ftrace: Add support for --pid option Namhyung Kim
2013-04-23  8:31 ` [PATCH 07/14] perf ftrace: Add support for -a and -C option Namhyung Kim
2013-04-23  8:31 ` [PATCH 08/14] perf ftrace: Split "live" sub-command Namhyung Kim
2013-04-23  8:31 ` [PATCH 09/14] perf ftrace: Add 'record' sub-command Namhyung Kim
2013-04-24 14:12   ` Jiri Olsa
2013-04-25  6:24     ` Namhyung Kim
2013-04-26  8:35       ` Jiri Olsa
2013-04-26 13:44       ` David Ahern
2013-05-06  1:57         ` Namhyung Kim
2013-05-06  3:22           ` David Ahern
2013-05-06  1:44       ` Namhyung Kim [this message]
2013-05-06 12:04         ` Jiri Olsa
2013-05-08  5:27           ` Namhyung Kim
2013-04-23  8:31 ` [PATCH 10/14] perf ftrace: Add 'show' sub-command Namhyung Kim
2013-04-23  8:31 ` [PATCH 11/14] perf ftrace: Add 'report' sub-command Namhyung Kim
2013-04-23  8:31 ` [PATCH 12/14] perf ftrace: Use pager for displaying result Namhyung Kim
2013-04-24 14:17   ` Jiri Olsa
2013-04-25  6:50     ` Namhyung Kim
2013-04-26  8:40       ` Jiri Olsa
2013-05-06  1:52         ` Namhyung Kim
2013-05-06 11:38           ` Jiri Olsa
2013-05-08  5:49             ` Namhyung Kim
2013-05-10  9:04               ` Jiri Olsa
2013-05-13  8:53                 ` Namhyung Kim
2013-05-13 13:42                   ` Jiri Olsa
2013-05-14  0:58                     ` Namhyung Kim
2013-04-23  8:31 ` [PATCH 13/14] perf ftrace: Cleanup using ftrace_setup/teardown() Namhyung Kim
2013-04-23  8:31 ` [PATCH 14/14] perf tools: Add document for perf-ftrace command Namhyung Kim
2013-04-23 15:53   ` Steven Rostedt
2013-04-24 10:39     ` Namhyung Kim
2013-04-23 15:58 ` [RFC 00/14] perf tools: Introduce new 'ftrace' command Steven Rostedt
2013-04-23 17:19   ` Pekka Enberg
2013-04-24  6:50     ` Ingo Molnar
2013-04-24  9:52       ` Namhyung Kim
2013-04-24 11:15         ` zhangwei(Jovi)
2013-04-25  5:53           ` Namhyung Kim
2013-04-24  9:29     ` Namhyung Kim
2013-04-24  9:27   ` Namhyung Kim
2013-04-24 11:14     ` zhangwei(Jovi)
2013-04-25  5:45       ` Namhyung Kim

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=87mws8990n.fsf@sejong.aot.lge.com \
    --to=namhyung@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@ghostprotocols.net \
    --cc=dsahern@gmail.com \
    --cc=eranian@google.com \
    --cc=fweisbec@gmail.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung.kim@lge.com \
    --cc=paulus@samba.org \
    --cc=rostedt@goodmis.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.