From: Peter Zijlstra <peterz@infradead.org>
To: Andy Lutomirski <luto@amacapital.net>
Cc: Nadav Amit <namit@vmware.com>, Ingo Molnar <mingo@redhat.com>,
Andrew Lutomirski <luto@kernel.org>,
"H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
LKML <linux-kernel@vger.kernel.org>, X86 ML <x86@kernel.org>,
Borislav Petkov <bp@alien8.de>,
"Woodhouse, David" <dwmw@amazon.co.uk>
Subject: Re: [RFC PATCH 1/5] x86: introduce preemption disable prefix
Date: Thu, 29 Nov 2018 10:46:41 +0100 [thread overview]
Message-ID: <20181129094641.GD2131@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <F1F3B914-2630-41ED-B205-BBA50F94B64F@amacapital.net>
On Fri, Oct 19, 2018 at 07:29:45AM -0700, Andy Lutomirski wrote:
> > On Oct 19, 2018, at 1:33 AM, Peter Zijlstra <peterz@infradead.org> wrote:
> >
> >> On Fri, Oct 19, 2018 at 01:08:23AM +0000, Nadav Amit wrote:
> >> Consider for example do_int3(), and see my inlined comments:
> >>
> >> dotraplinkage void notrace do_int3(struct pt_regs *regs, long error_code)
> >> {
> >> ...
> >> ist_enter(regs); // => preempt_disable()
> >> cond_local_irq_enable(regs); // => assume it enables IRQs
> >>
> >> ...
> >> // resched irq can be delivered here. It will not caused rescheduling
> >> // since preemption is disabled
> >>
> >> cond_local_irq_disable(regs); // => assume it disables IRQs
> >> ist_exit(regs); // => preempt_enable_no_resched()
> >> }
> >>
> >> At this point resched will not happen for unbounded length of time (unless
> >> there is another point when exiting the trap handler that checks if
> >> preemption should take place).
> >>
> >> Another example is __BPF_PROG_RUN_ARRAY(), which also uses
> >> preempt_enable_no_resched().
> >>
> >> Am I missing something?
> >
> > Would not the interrupt return then check for TIF_NEED_RESCHED and call
> > schedule() ?
>
> The paranoid exit path doesn’t check TIF_NEED_RESCHED because it’s
> fundamentally atomic — it’s running on a percpu stack and it can’t
> schedule. In theory we could do some evil stack switching, but we
> don’t.
>
> How does NMI handle this? If an NMI that hit interruptible kernel
> code overflows a perf counter, how does the wake up work?
NMIs should never set NEED_RESCHED. What the perf does it self-IPI
(irq_work) and do the wakeup from there.
next prev parent reply other threads:[~2018-11-29 9:46 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-18 0:54 [RFC PATCH 0/5] x86: dynamic indirect call promotion Nadav Amit
2018-10-18 0:54 ` [RFC PATCH 1/5] x86: introduce preemption disable prefix Nadav Amit
2018-10-18 1:22 ` Andy Lutomirski
2018-10-18 3:12 ` Nadav Amit
2018-10-18 3:26 ` Nadav Amit
2018-10-18 3:51 ` Andy Lutomirski
2018-10-18 16:47 ` Nadav Amit
2018-10-18 17:00 ` Andy Lutomirski
2018-10-18 17:25 ` Nadav Amit
2018-10-18 17:29 ` Andy Lutomirski
2018-10-18 17:42 ` Nadav Amit
2018-10-19 1:08 ` Nadav Amit
2018-10-19 4:29 ` Andy Lutomirski
2018-10-19 4:44 ` Nadav Amit
2018-10-20 1:22 ` Masami Hiramatsu
2018-10-19 5:00 ` Alexei Starovoitov
2018-10-19 8:22 ` Peter Zijlstra
2018-10-19 14:47 ` Alexei Starovoitov
2018-10-19 8:19 ` Peter Zijlstra
2018-10-19 10:38 ` Oleg Nesterov
2018-10-19 8:33 ` Peter Zijlstra
2018-10-19 14:29 ` Andy Lutomirski
2018-11-29 9:46 ` Peter Zijlstra [this message]
2018-10-18 7:54 ` Peter Zijlstra
2018-10-18 18:14 ` Nadav Amit
2018-10-18 0:54 ` [RFC PATCH 2/5] x86: patch indirect branch promotion Nadav Amit
2018-10-18 0:54 ` [RFC PATCH 3/5] x86: interface for accessing indirect branch locations Nadav Amit
2018-10-18 0:54 ` [RFC PATCH 4/5] x86: learning and patching indirect branch targets Nadav Amit
2018-10-18 0:54 ` [RFC PATCH 5/5] x86: relpoline: disabling interface Nadav Amit
2018-10-23 18:36 ` [RFC PATCH 0/5] x86: dynamic indirect call promotion Dave Hansen
2018-10-23 20:32 ` Nadav Amit
2018-10-23 20:37 ` Dave Hansen
2018-11-28 16:08 ` Josh Poimboeuf
2018-11-28 19:34 ` Nadav Amit
2018-11-29 0:38 ` Josh Poimboeuf
2018-11-29 1:40 ` Andy Lutomirski
2018-11-29 2:06 ` Nadav Amit
2018-11-29 3:24 ` Andy Lutomirski
2018-11-29 4:36 ` Josh Poimboeuf
2018-11-29 6:06 ` Andy Lutomirski
2018-11-29 15:19 ` Josh Poimboeuf
2018-12-01 6:52 ` Nadav Amit
2018-12-01 14:25 ` Josh Poimboeuf
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=20181129094641.GD2131@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=bp@alien8.de \
--cc=dwmw@amazon.co.uk \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=namit@vmware.com \
--cc=tglx@linutronix.de \
--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 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.