public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Vineet Gupta <Vineet.Gupta1@synopsys.com>
Cc: Andy Lutomirski <luto@amacapital.net>,
	arcml <linux-snps-arc@lists.infradead.org>,
	Alexey Brodkin <Alexey.Brodkin@synopsys.com>,
	lkml <linux-kernel@vger.kernel.org>
Subject: Re: NMI for ARC
Date: Fri, 30 Sep 2016 12:49:41 +0200	[thread overview]
Message-ID: <20160930104941.GI5016@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <245c485e-6350-bd7f-97f2-4e35be2c8e2a@synopsys.com>

On Thu, Sep 29, 2016 at 12:48:03PM -0700, Vineet Gupta wrote:
> > [1] There's an exception on 64-bit AMD CPUs because AMD blew it.
> > Also, x86 NMI return is itself severely overcomplicated because we don't
> > have good control over NMI nesting.
> 
> For ARC (HS38 cores), there are 16 interrupt priorities (0-high, 15-lowest) and
> each active interrupt has a bit in AUX_IRQ_ACTIVE. If a prio X is active, another
> prio X can't be taken (you can only take higher prio). In that sense nmi (aka prio
> 0) can't nest for us.

Forget you ever read this; the reason for the nested NMIs on x86 is
horrid, but here goes:

The problem is that IRET, the only instruction capable of returning from
_any_ trap/fault/interrupt context automagically unmasks NMIs. And we
'want' to take debug-traps and page-faults from NMI context.

We use debug-traps to synchronize against self-modifying code without
halting the entire machine.

We 'need' page-faults for vmalloc backed memory, the vmalloc page tables
are not globally propagated and we need (minor) faults to populate the
page-tables on demand. And we need page-faults to do user-space access
from NMI context (for the fixup_exception stuff).

Returning from either trap or fault is done through IRET, which then
unmasks NMIs, allowing another NMI to come in while we're still
servicing one.

We have quite the horror cabinet for dealing with this ;-)

  reply	other threads:[~2016-09-30 10:49 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1445286926.3913.13.camel@synopsys.com>
2015-11-17  9:14 ` local64_cmpxchg() in arc_perf_event_update() Vineet Gupta
2015-11-17 11:07   ` Peter Zijlstra
2015-11-17 11:23     ` Vineet Gupta
2015-11-17 12:24       ` Peter Zijlstra
2015-11-17 12:25         ` Peter Zijlstra
2015-11-17 12:53           ` NMI for ARC Vineet Gupta
2015-11-17 13:15             ` Peter Zijlstra
2016-09-28  0:22               ` Vineet Gupta
2016-09-28  7:16                 ` Peter Zijlstra
2016-09-28 17:58                   ` Vineet Gupta
2016-09-28 19:25                   ` Andy Lutomirski
2016-09-28 20:37                     ` Peter Zijlstra
2016-09-28 22:26                       ` Andy Lutomirski
2016-09-28 22:44                         ` Vineet Gupta
2016-09-28 22:47                           ` Andy Lutomirski
2016-09-29  1:20                         ` Vineet Gupta
2016-09-29  6:43                           ` Peter Zijlstra
2016-09-29 16:47                             ` Vineet Gupta
2016-09-29 18:54                               ` Andy Lutomirski
2016-09-29 19:48                                 ` Vineet Gupta
2016-09-30 10:49                                   ` Peter Zijlstra [this message]
2016-09-29 17:30                           ` Andy Lutomirski
2015-11-17 13:24           ` local64_cmpxchg() in arc_perf_event_update() Vineet Gupta

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=20160930104941.GI5016@twins.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=Alexey.Brodkin@synopsys.com \
    --cc=Vineet.Gupta1@synopsys.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-snps-arc@lists.infradead.org \
    --cc=luto@amacapital.net \
    /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