Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1640588 > unrolled thread

Re: [PATCH V15 06/11] acpi: apei: handle SEA notification type for ARMv8

Started byJames Morse <james.morse@arm.com>
First post2017-05-12 18:50 +0200
Last post2017-05-12 18:50 +0200
Articles 1 — 1 participant

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: [PATCH V15 06/11] acpi: apei: handle SEA notification type for  ARMv8 James Morse <james.morse@arm.com> - 2017-05-12 18:50 +0200

#1640588 — Re: [PATCH V15 06/11] acpi: apei: handle SEA notification type for ARMv8

FromJames Morse <james.morse@arm.com>
Date2017-05-12 18:50 +0200
SubjectRe: [PATCH V15 06/11] acpi: apei: handle SEA notification type for ARMv8
Message-ID<tGlVo-7jv-43@gated-at.bofh.it>
Hi Tyler,

On 08/05/17 20:59, Baicar, Tyler wrote:
> On 5/8/2017 11:28 AM, James Morse wrote:
>> I was tidying up the masking/unmasking in entry.S, something I wasn't aware of
>> that leads to a bug:
>> entry.S will unmask interrupts for instruction/data aborts that came from a
>> context with interrupts enabled. This makes sense for get_user() and friends...
>> For do_sea() we pull nmi_enter() as this can interrupt interrupts-masked code,
>> such as APEI, but if we end up in here with interrupts unmasked we can take an
>> IRQ from this 'NMI' context, which will inherit the in_nmi() and could lead to
>> the deadlock we were originally trying to avoid.
>>
>> Teaching entry.S to spot external aborts is messy. I think the two choices are
>> to either mask interrupts when calling nmi_enter() (as these things should be
>> mutually exclusive), or to conditionally call nmi_enter() based on
>> interrupts_enabled(regs). I prefer the second one as it matches the notify_sea()
>> while interruptible that happens when KVM takes one of these.

Thinking about this some more: the KVM case is different as we know it was a
guest that triggered the external abort. Nothing the host kernel does is likely
to trigger either the same error or a related one.

But I can't think of a way this would trip twice on the host... yes your
suggestion looks fine.

(When we add SError/SEI support too we will need to change it as SEA may
interrupt SEI, and nmi_enter() has a BUG_ON(in_nmi()), so this nesting will need
explicitly checking.)


Thanks,

James

[toc] | [standalone]


Back to top | Article view | linux.kernel


csiph-web