All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH] tracing/sched: Check preempt_count() for current when reading task->state
Date: Thu, 11 Dec 2014 13:31:21 +0100	[thread overview]
Message-ID: <20141211123121.GB18538@gmail.com> (raw)
In-Reply-To: <20141211063712.5cf4d240@gandalf.local.home>


* Steven Rostedt <rostedt@goodmis.org> wrote:

> On Thu, 11 Dec 2014 07:38:11 +0100
> Ingo Molnar <mingo@kernel.org> wrote:
> 
> > > Cc: stable@vger.kernel.org # 3.13+
> > > Fixes: 01028747559a "sched: Create more preempt_count accessors"
> > > Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
> > > ---
> > >  include/trace/events/sched.h | 6 +++++-
> > >  1 file changed, 5 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
> > > index 0a68d5ae584e..13fbadcc172b 100644
> > > --- a/include/trace/events/sched.h
> > > +++ b/include/trace/events/sched.h
> > > @@ -97,10 +97,14 @@ static inline long __trace_sched_switch_state(struct task_struct *p)
> > >  	long state = p->state;
> > >  
> > >  #ifdef CONFIG_PREEMPT
> > > +	unsigned long pc;
> > > +
> > > +	pc = (p == current) ? preempt_count() : task_preempt_count(p);
> > > +
> > >  	/*
> > >  	 * For all intents and purposes a preempted task is a running task.
> > >  	 */
> > > -	if (task_preempt_count(p) & PREEMPT_ACTIVE)
> > > +	if (pc & PREEMPT_ACTIVE)
> > >  		state = TASK_RUNNING | TASK_STATE_MAX;
> > 
> > I really don't like the overhead around here.
> 
> Hi Ingo!
> 
> What overhead are you worried about? Note, this is in the 
> schedule tracepoint and does not affect the scheduler itself 
> (as long as the tracepoint is not enabled).

Scheduler tracepoints are pretty popular, so I'm worried about 
their complexity when they are activated.

> I'm also thinking that as long as "prev" is always guaranteed 
> to be "current" we can remove the check and just use 
> preempt_count() always. But I'm worried that we can't 
> guaranteed that.

You could add a WARN_ON_ONCE() or so to double check that 
assumption?

> What other ideas do you have? Because wrong data is worse than 
> the overhead of the above code. If Thomas taught me anything, 
> it's that!

My idea is to have simpler, yet correct code. And ponies!

Thanks,

	Ingo

  reply	other threads:[~2014-12-11 12:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-10 22:44 [PATCH] tracing/sched: Check preempt_count() for current when reading task->state Steven Rostedt
2014-12-11  4:58 ` Steven Rostedt
2014-12-11  6:38 ` Ingo Molnar
2014-12-11 11:37   ` Steven Rostedt
2014-12-11 12:31     ` Ingo Molnar [this message]
2014-12-11 14:17       ` Steven Rostedt
2014-12-11 16:50         ` 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=20141211123121.GB18538@gmail.com \
    --to=mingo@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /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.