[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190301112915.piheydl6pkzc6gde@linutronix.de>
Date: Fri, 1 Mar 2019 12:29:15 +0100
From: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
To: Frederic Weisbecker <frederic@...nel.org>
Cc: LKML <linux-kernel@...r.kernel.org>,
Peter Zijlstra <peterz@...radead.org>,
"David S . Miller" <davem@...emloft.net>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Mauro Carvalho Chehab <mchehab+samsung@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>,
"Paul E . McKenney" <paulmck@...ux.vnet.ibm.com>,
Frederic Weisbecker <fweisbec@...il.com>,
Pavan Kondeti <pkondeti@...eaurora.org>,
Ingo Molnar <mingo@...nel.org>,
Joel Fernandes <joel@...lfernandes.org>
Subject: Re: [PATCH 20/37] softirq: Introduce disabled softirq vectors bits
On 2019-02-28 18:12:25 [+0100], Frederic Weisbecker wrote:
> --- a/include/linux/interrupt.h
> +++ b/include/linux/interrupt.h
> @@ -474,17 +474,62 @@ enum
…
> +static inline unsigned int local_softirq_pending(void)
> +{
> + return local_softirq_data() & SOFTIRQ_PENDING_MASK;
> +}
…
I'm still digesting but…
> +static inline void softirq_enabled_set(unsigned int enabled)
> +{
> + unsigned int data;
> +
> + data = enabled << SOFTIRQ_ENABLED_SHIFT;
> + data |= local_softirq_pending();
if an interrupt occurs at this point and invokes
raise_softirq_irqof() => softirq_pending_set_mask()
then we lose the pending bits, correct? This may be invoked from
local_bh_enable() => local_bh_enable_ip_mask() =>
local_bh_enable_common() => softirq_enabled_set()
and as far as I can, interrupts are only disabled in the tracing case.
> + __this_cpu_write(local_softirq_data_ref, data);
> +}
Sebastian
Powered by blists - more mailing lists