From: Oleg Nesterov <oleg@redhat.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Jiri Olsa <jolsa@redhat.com>, Paul Mackerras <paulus@samba.org>,
Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH,RFC] perf: panic due to inclied cpu context task_ctx value
Date: Mon, 28 Mar 2011 18:56:48 +0200 [thread overview]
Message-ID: <20110328165648.GA9304@redhat.com> (raw)
In-Reply-To: <1301327368.4859.28.camel@twins>
On 03/28, Peter Zijlstra wrote:
>
> Another fun race, suppose we do properly remove task_ctx and is_active,
> but then the task gets scheduled back in before free_event() gets around
> to disabling the jump_label..
Yes, this too...
Well, ignoring the HAVE_JUMP_LABEL case... perhaps we can split
perf_sched_events into 2 counters? I mean,
atomic_t perf_sched_events_in, perf_sched_events_out;
static inline void perf_event_task_sched_in(struct task_struct *task)
{
COND_STMT(&perf_sched_events_in, __perf_event_task_sched_in(task));
}
static inline
void perf_event_task_sched_out(struct task_struct *task, struct task_struct *next)
{
perf_sw_event(PERF_COUNT_SW_CONTEXT_SWITCHES, 1, 1, NULL, 0);
COND_STMT(&perf_sched_events_out, __perf_event_task_sched_out(task, next));
}
void perf_sched_events_inc(void)
{
atomic_inc(&perf_sched_events_out);
smp_mb__after_atomic_inc();
atomic_inc(&perf_sched_events_in);
}
void perf_sched_events_dec(void)
{
if (atomic_dec_and_test(&perf_sched_events_in))
synchronize_sched();
atomic_dec(&perf_sched_events_out);
}
The last 2 helpers should be used instead of jump_label_inc/dec.
Or we can remove COND_STMT() from perf_event_task_sched_out(). Say,
__perf_event_task_sched_in() can set PF_PERF_XXX or something, then
perf_event_task_sched_out() can check this bit.
As for HAVE_JUMP_LABEL, I still can't understand why this test-case
triggers the problem. But jump_label_inc/dec logic looks obviously
racy.
jump_label_dec:
if (atomic_dec_and_test(key))
jump_label_disable(key);
Another thread can create the PERF_ATTACH_TASK event in between
and call jump_label_update(JUMP_LABEL_ENABLE) first. Looks like,
jump_label_update() should ensure that "type" matches the state
of the "*key" under jump_label_lock().
But perhaps I misread this code completely.
Oleg.
next prev parent reply other threads:[~2011-03-28 18:06 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-24 16:44 [PATCH,RFC] perf: panic due to inclied cpu context task_ctx value Jiri Olsa
2011-03-25 19:10 ` Oleg Nesterov
2011-03-26 15:37 ` Peter Zijlstra
2011-03-26 16:13 ` Oleg Nesterov
2011-03-26 16:38 ` Peter Zijlstra
2011-03-26 17:09 ` Oleg Nesterov
2011-03-26 17:35 ` Oleg Nesterov
2011-03-26 18:29 ` Peter Zijlstra
2011-03-26 18:49 ` Oleg Nesterov
2011-03-28 13:30 ` Oleg Nesterov
2011-03-28 14:57 ` Peter Zijlstra
2011-03-28 15:00 ` Peter Zijlstra
2011-03-28 15:15 ` Oleg Nesterov
2011-03-28 16:27 ` Peter Zijlstra
2011-03-28 15:39 ` Oleg Nesterov
2011-03-28 15:49 ` Peter Zijlstra
2011-03-28 16:56 ` Oleg Nesterov [this message]
2011-03-29 8:32 ` Peter Zijlstra
2011-03-29 10:49 ` Peter Zijlstra
2011-03-29 16:28 ` Oleg Nesterov
2011-03-29 19:01 ` Peter Zijlstra
2011-03-30 13:09 ` Jiri Olsa
2011-03-30 14:51 ` Peter Zijlstra
2011-03-30 16:37 ` Oleg Nesterov
2011-03-30 18:30 ` Paul E. McKenney
2011-03-30 19:53 ` Oleg Nesterov
2011-03-30 21:26 ` Peter Zijlstra
2011-03-30 21:35 ` Oleg Nesterov
2011-03-31 10:32 ` Jiri Olsa
2011-03-31 12:41 ` [tip:perf/urgent] perf: Fix task context scheduling tip-bot for Peter Zijlstra
2011-03-31 13:28 ` [PATCH,RFC] perf: panic due to inclied cpu context task_ctx value Oleg Nesterov
2011-03-31 13:51 ` Peter Zijlstra
2011-03-31 14:10 ` Oleg Nesterov
2011-04-04 16:20 ` Oleg Nesterov
2011-03-30 15:32 ` Oleg Nesterov
2011-03-30 15:40 ` Peter Zijlstra
2011-03-30 15:52 ` Oleg Nesterov
2011-03-30 15:57 ` Peter Zijlstra
2011-03-30 16:11 ` Peter Zijlstra
2011-03-30 17:13 ` Oleg Nesterov
2011-03-26 17:09 ` Peter Zijlstra
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=20110328165648.GA9304@redhat.com \
--to=oleg@redhat.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulus@samba.org \
--cc=peterz@infradead.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.