All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boqun Feng <boqun.feng@gmail.com>
To: Changbin Du <changbin.du@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	"Paul E. McKenney" <paulmck@kernel.org>,
	Josh Triplett <josh@joshtriplett.org>,
	Sergey Senozhatsky <senozhatsky@chromium.org>,
	linux-kernel@vger.kernel.org, rcu@vger.kernel.org,
	Thomas Gleixner <tglx@linutronix.de>,
	Frederic Weisbecker <frederic@kernel.org>
Subject: Re: [PATCH] preempt: add in_serving_irq() and apply to rcutiny and vsprintf
Date: Thu, 19 Aug 2021 09:56:45 +0800	[thread overview]
Message-ID: <YR26XQF3OXLqo4Pj@boqun-archlinux> (raw)
In-Reply-To: <20210818235916.l3zbdt5nli5j65xi@mail.google.com>

[Cc Thomas and Frederic since they contributed the clean-up to these
macros recently]

Background for discussion:

	https://lore.kernel.org/lkml/20210814014234.51395-1-changbin.du@gmail.com/

On Thu, Aug 19, 2021 at 07:59:16AM +0800, Changbin Du wrote:
> On Tue, Aug 17, 2021 at 12:03:16AM +0800, Boqun Feng wrote:
> > On Sat, Aug 14, 2021 at 09:42:34AM +0800, Changbin Du wrote:
> > > At some places we need to determine whether we're in nmi, hardirq or
> > > softirq context. This adds a macro in_serving_irq() as a shortcut for
> > > that.
> > > 
> > > Meanwhile, apply this new macro to existing code in rcutiny and vsprintf.
> > > 
> > > Signed-off-by: Changbin Du <changbin.du@gmail.com>
> > > ---
> > >  include/linux/preempt.h | 4 +++-
> > >  include/linux/rcutiny.h | 3 +--
> > >  lib/vsprintf.c          | 2 +-
> > >  3 files changed, 5 insertions(+), 4 deletions(-)
> > > 
> > > diff --git a/include/linux/preempt.h b/include/linux/preempt.h
> > > index 9881eac0698f..9a1c924e2c6c 100644
> > > --- a/include/linux/preempt.h
> > > +++ b/include/linux/preempt.h
> > > @@ -92,12 +92,14 @@
> > >   * in_nmi()		- We're in NMI context
> > >   * in_hardirq()		- We're in hard IRQ context
> > >   * in_serving_softirq()	- We're in softirq context
> > > + * in_serving_irq()	- We're in nmi, hardirq or softirq context
> > >   * in_task()		- We're in task context
> > >   */
> > >  #define in_nmi()		(nmi_count())
> > >  #define in_hardirq()		(hardirq_count())
> > >  #define in_serving_softirq()	(softirq_count() & SOFTIRQ_OFFSET)
> > > -#define in_task()		(!(in_nmi() | in_hardirq() | in_serving_softirq()))
> > > +#define in_serving_irq()	(in_nmi() | in_hardirq() | in_serving_softirq())
> > > +#define in_task()		(!in_serving_irq())
> > >  
> > 
> > So in_serving_irq() is !in_task(), right? If so, why not...
> > 
> Adding in_serving_irq() is to reflect the real purpose so improve readability.
> And can we preserve that !in_task() means in serving irq context in future? I don't know.
> 

Sure, no one could predict the future. But if a third context (other
than thread context and {hard,soft}irq context) comes up, which I think
is highly unlikely, we could (and should) audit all callsites of
in_task() for necessary adjustment. And introducing in_serving_irq()
won't help us in that case, because we will still need to audit usage of
in_serving_irq(), for example, let's say rcu_is_idle_cpu() for RCU_TINY
is defined as

	#define rcu_is_idle_cpu(cpu) (is_idle_task(current) && !in_serving_irq())

and we have a new type of context, and we can use in_other() to test
whether we are in it. Now even with in_serving_irq() introduced, we
still need to make sure the correct version of rcu_is_idle_cpu() is
either

	(is_idle_task(current) && (!in_serving_irq() && !in_other()))

or
	
	(is_idle_task(current) && !in_serving_irq())

Therefore, I don't see the point of introducing in_serving_irq().

Regards,
Boqun

> -- 
> Cheers,
> Changbin Du

  reply	other threads:[~2021-08-19  1:57 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-14  1:42 [PATCH] preempt: add in_serving_irq() and apply to rcutiny and vsprintf Changbin Du
2021-08-16 16:03 ` Boqun Feng
2021-08-18 23:59   ` Changbin Du
2021-08-19  1:56     ` Boqun Feng [this message]
2021-08-19 23:00       ` Changbin Du

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=YR26XQF3OXLqo4Pj@boqun-archlinux \
    --to=boqun.feng@gmail.com \
    --cc=changbin.du@gmail.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=frederic@kernel.org \
    --cc=josh@joshtriplett.org \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rcu@vger.kernel.org \
    --cc=senozhatsky@chromium.org \
    --cc=tglx@linutronix.de \
    --cc=vincent.guittot@linaro.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.