From: Frederic Weisbecker <fweisbec@gmail.com>
To: Andy Lutomirski <luto@amacapital.net>
Cc: Andy Lutomirski <luto@kernel.org>, X86 ML <x86@kernel.org>,
Sasha Levin <sasha.levin@oracle.com>,
Brian Gerst <brgerst@gmail.com>,
Denys Vlasenko <dvlasenk@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Oleg Nesterov <oleg@redhat.com>, Borislav Petkov <bp@alien8.de>,
Rik van Riel <riel@redhat.com>
Subject: Re: [PATCH] x86/entry/64: Context-track syscalls before enabling interrupts
Date: Wed, 19 Aug 2015 01:02:37 +0200 [thread overview]
Message-ID: <20150818230235.GA13685@lerouge> (raw)
In-Reply-To: <CALCETrVQCi_RZqRSTy9bs0V+RB6cLHVfYq4Ouq_JLMoJePg1zA@mail.gmail.com>
On Tue, Aug 18, 2015 at 03:35:30PM -0700, Andy Lutomirski wrote:
> On Tue, Aug 18, 2015 at 3:16 PM, Frederic Weisbecker <fweisbec@gmail.com> wrote:
> > On Tue, Aug 18, 2015 at 12:11:59PM -0700, Andy Lutomirski wrote:
> >> This fixes a couple minor holes if we took an IRQ very early in syscall
> >> processing:
> >>
> >> - We could enter the IRQ with CONTEXT_USER. Everything worked (RCU
> >> was fine), but we could warn if all the debugging options were
> >> set.
> >
> > So this is fixing issues after your changes that call user_exit() from
> > IRQs, right?
>
> Yes. Here's an example splat, courtesy of Sasha:
>
> https://gist.github.com/sashalevin/a006a44989312f6835e7
>
> >
> > But the IRQs aren't supposed to call user_exit(), they have their own hooks.
> > That's where the real issue is.
>
> In -tip, the assumption is that we *always* switch to CONTEXT_KERNEL
> when entering the kernel for a non-NMI reason.
Why? IRQs don't need that! We already have irq_enter()/irq_exit().
And we don't want to call rcu_user_*() pairs on IRQs, you're
introducing a serious performance regression here! And I'm talking about
the code that's currently in -tip.
> That means that we can
> avoid all of the (expensive!) checks for what context we're in.
If you're referring to context tracking, the context check is a per-cpu
read. Not something that's usually considered expensive.
> It also means that (other than IRQs, which need further cleanup), we only
> switch once per user/kernel switch.
???
>
> The cost for doing should be essentially zero, modulo artifacts from
> poor inlining.
And modulo rcu_user_*() that do multiple costly atomic_add_return() operations
implying full memory barriers. Plus the unnecessary vtime accounting that doubles
the existing one in irq_enter/exit() (those even imply a lock currently, which will
probably be turned to seqcount, but still, full memory barriers...).
I'm sorry but I'm going to NACK any code that does that in IRQs (and again that
concerns current tip:x86/asm).
next prev parent reply other threads:[~2015-08-18 23:02 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-18 19:11 [PATCH] x86/entry/64: Context-track syscalls before enabling interrupts Andy Lutomirski
2015-08-18 22:16 ` Frederic Weisbecker
2015-08-18 22:35 ` Andy Lutomirski
2015-08-18 23:02 ` Frederic Weisbecker [this message]
2015-08-18 23:07 ` Andy Lutomirski
2015-08-19 17:10 ` Frederic Weisbecker
2015-08-21 7:50 ` Ingo Molnar
2015-08-21 13:14 ` Frederic Weisbecker
2015-08-19 0:30 ` Andy Lutomirski
2015-08-19 15:54 ` Andy Lutomirski
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=20150818230235.GA13685@lerouge \
--to=fweisbec@gmail.com \
--cc=bp@alien8.de \
--cc=brgerst@gmail.com \
--cc=dvlasenk@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=oleg@redhat.com \
--cc=riel@redhat.com \
--cc=sasha.levin@oracle.com \
--cc=x86@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox