From: Peter Zijlstra <peterz@infradead.org>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Ingo Molnar <mingo@kernel.org>, Kevin Hilman <khilman@linaro.org>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Viresh Kumar <viresh.kumar@linaro.org>
Subject: Re: [PATCH 1/3] irq_work: Implement remote queueing
Date: Wed, 14 May 2014 13:54:06 +0200 [thread overview]
Message-ID: <20140514115406.GA11096@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <20140514113808.GA1278@localhost.localdomain>
[-- Attachment #1: Type: text/plain, Size: 2173 bytes --]
On Wed, May 14, 2014 at 01:38:14PM +0200, Frederic Weisbecker wrote:
> > > +bool irq_work_queue_on(struct irq_work *work, int cpu)
> > > +{
> > > + /* Only queue if not already pending */
> > > + if (!irq_work_claim(work))
> > > + return false;
> > > +
> > > + /* All work should have been flushed before going offline */
> > > + WARN_ON_ONCE(cpu_is_offline(cpu));
> >
> > WARN_ON_ONCE(in_nmi());
>
> Well... I think it's actually NMI-safe.
I don't think it is, most apic calls do apic_wait_icr_idle() then the
apic op, if an NMI happens in between and writes to the APIC, the return
context will see a !idle icr and fail.
This is why arch_irq_work_raise() again idles the icr after sending the
IPI.
Also, I think, seeing what benh said earlier, its unsafe for other archs
too.
> > > + llist_add(&work->llnode, &per_cpu(irq_work_list, cpu));
> > > + native_send_call_func_single_ipi(cpu);
> >
> > At the very leastestest make that:
> >
> > if (llist_add(&work->llnode, &per_cpu(irq_work_list, cpu)))
> > native_send_call_func_single_ipi(cpu);
>
> So yeah the issue is that we may have IRQ_WORK_LAZY in the queue. And
> if we have only such work in the queue, nobody has raised before us.
>
> So we can't just test with llist_add(). Or if we do, we must then
> separate raised and lazy list.
Then do the remote irq_work_raised thing. But it really stinks you broke
this very nice and simple thing.
> Also note that nohz is the only user for now and irq_work_claim() thus
> prevents from double IPI. Of course if more users come up the issue arise
> again.
DANGER, half arsed engineering at work, seriously? Just write proper
code already.
There's no fucking way the next user will check the implementation to
make sure its 'sane'.
> Maybe I was paranoid but I was worried about the overhead of printk() wakeups
> on boot if implemented with IPIs.
>
> Of course if I can be proven that it won't bring much damage to use an IPI, I'd
> be very happy to remove it.
That's the wrong fucking way around, first proof its needed then do
something about it. As is I think the LAZY thing is horrid.
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
next prev parent reply other threads:[~2014-05-14 11:54 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-13 22:25 [PATCH 0/3] nohz: Move nohz kick out of scheduler IPI, v5 Frederic Weisbecker
2014-05-13 22:25 ` [PATCH 1/3] irq_work: Implement remote queueing Frederic Weisbecker
2014-05-14 9:06 ` Peter Zijlstra
2014-05-14 9:10 ` Peter Zijlstra
2014-05-14 11:38 ` Frederic Weisbecker
2014-05-14 11:54 ` Peter Zijlstra [this message]
2014-05-14 12:11 ` Frederic Weisbecker
2014-05-14 12:41 ` Peter Zijlstra
2014-05-14 13:51 ` Frederic Weisbecker
2014-05-14 13:55 ` Peter Zijlstra
2014-05-14 14:28 ` Thomas Gleixner
2014-05-13 22:25 ` [PATCH 2/3] nohz: Move full nohz kick to its own IPI Frederic Weisbecker
2014-05-13 22:25 ` [PATCH 3/3] nohz: Use IPI implicit full barrier against rq->nr_running r/w Frederic Weisbecker
2014-05-14 9:09 ` Peter Zijlstra
2014-05-14 11:38 ` Frederic Weisbecker
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=20140514115406.GA11096@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=fweisbec@gmail.com \
--cc=khilman@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=tglx@linutronix.de \
--cc=viresh.kumar@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.