From: Frederic Weisbecker <fweisbec@gmail.com>
To: Peter Zijlstra <peterz@infradead.org>
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 14:11:25 +0200 [thread overview]
Message-ID: <20140514121122.GC1278@localhost.localdomain> (raw)
In-Reply-To: <20140514115406.GA11096@twins.programming.kicks-ass.net>
On Wed, May 14, 2014 at 01:54:06PM +0200, Peter Zijlstra wrote:
> 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.
Ah I don't know much these archs details, so I concede it.
>
> > > > + 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.
I tried not to break boot with printk overhead. That said I've considered having
a very simple "tick work" that can rely on irq work when the tick is stopped
and use it for printk. That would restore the initial simplicity.
>
> > 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'.
Are you competing with tglx on grumpiness? You guys are free to treat us
like shit but don't be surprised if one day you'll be alone in kernel/*
>
> > 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.
next prev parent reply other threads:[~2014-05-14 12:11 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
2014-05-14 12:11 ` Frederic Weisbecker [this message]
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=20140514121122.GC1278@localhost.localdomain \
--to=fweisbec@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=khilman@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--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.