From: Marc Zyngier <maz@kernel.org>
To: Mark Brown <broonie@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Lorenzo Pieralisi <lpieralisi@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Sami Mujawar <Sami.Mujawar@arm.com>,
Thomas Gleixner <tglx@linutronix.de>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v1 00/18] arm64/nmi: Support for FEAT_NMI
Date: Thu, 10 Nov 2022 08:26:44 +0000 [thread overview]
Message-ID: <87leojuse3.wl-maz@kernel.org> (raw)
In-Reply-To: <Y2vIvZkI3VEq2K/z@sirena.org.uk>
On Wed, 09 Nov 2022 15:35:25 +0000,
Mark Brown <broonie@kernel.org> wrote:
>
> [1 <text/plain; us-ascii (quoted-printable)>]
> On Sun, Nov 06, 2022 at 11:38:51AM +0000, Marc Zyngier wrote:
> > Mark Brown <broonie@kernel.org> wrote:
>
> > > interrupts of any kind to add masking for NMIs. This masking is not
> > > added to our standard interrupt masking operations since that would
> > > result in widespread masking of NMIs which would undermine their value.
> > > Given that there's a large amount of kernel code a good proportion of
> > > which I'm not terribly familar with it is likely that this area of the
> > > series needs attention in review as there may be be be areas that have
> > > been missed or misunderstood.
>
> > Can you at least clarify why the no-quite-NMI cannot follow the
> > pattern established by the pseudo-NMI support? I would have expected
> > the critical sections to strictly map between the two so-called-NMI
> > implementations.
>
> That's fair, I'll expand on this topic in the cover for next version.
> It is basically similar, there's a few differences where I couldn't
> convince myself that we were intentionally masking NMIs like
> el0_svc_common() and it did seem like we wanted to control things
> separately during entry given the separate report path we have with the
> architected version. It's possible I've completely misunderstood this
> one way or another.
>
> I did look at a couple of alernatives that had more overlap. I looked
> at pulling the pNMI code out of the DAIF handling but given the
> implementation the benefits seemed unclear for the complexity given that
> it is actually working with DAIF. I did also strongly consider putting
> the NMI handling into the DAIF handling but that was making it difficult
> to distinguish the handling of architected NMIs and the implicit
> coverage didn't seem ideal, I could have another spin through that
> approach though - I was on the edge with the approach there. It sounds
> like you'd really prefer that one.
My gripe with the current approach is that it took us a *very* long
while to make pNMI work correctly in all cases (I'm pretty sure that
Mark Rutland still has nightmares about it). But now that we have the
framework for it and the mental model to match, I'd really want both
NMI methods to be merely two implementations of the same concept.
The only obvious difference should be that we can identify NMIs early
and that acking a NMI cannot result in acking an IRQ. I'd expect
everything else to be otherwise similar.
>
> > > Using this feature in KVM guests will require the implementation of vGIC
> > > support which is not present in this series, and there is also no usage
> > > of the feature at EL2. While FEAT_NMI does add a new writable register
> > > ALLINT the value is already context switched for EL1 via SPSR_EL2.ALLINT
> > > and we can't trap read access to the register so we don't manage the
> > > write trap that is available in HCRX_EL2.TALLINT. Guests can read from
> > > the register anyway and should only be able to affect their own state.
>
> > ... and create some architectural state that is impossible to manage
> > and migrate. Great.
>
> We can't already manage and migrate SPSR_EL2 (or SPSR_EL1 for that
> matter)?
Of course we can. SPSR_EL2 is nothing but the guest's PSTATE, and
thankfully we manage it. Same thing for SPSR_EL1.
> I might have missed part of how that's handled or used,
> especially given that I've not actively worked through this yet, but if
> we're not doing so then we've got other problems with for example
> PSTATE.BTYPE or PSTATE.SSBS. It looks like it's available and I'm not
> seeing any filtering of the values or anything.
Imagine you run a VM on some FEAT_NMI-enabled HW. The guest uses the
PSTATE.ALLINT bit because it can. Now we migrate the VM somewhere else
that doesn't have ALLINT, and the VM is dead.
This is a general problem with the architecture, but we definitely
should take care of it as we're enabling these features.
>
> Note that ALLINT.ALLINT is similar to DAIF or SBSS, it's directly
> mirroring the state of PSTATE.ALLINT. The only access EL2 has to the
> EL1 state for ALLINT is via SPSR, on entry to EL2 ALLINT is reset as per
> the configuration in SCTLR_EL2.{SPINTMASK,NMI} and then the EL1 value is
> restored as part of exception return.
>
> > Frankly, we are accumulating a bunch of half implemented features
> > (SME, SPE) for which there is no KVM support, and I don't think this
> > is the correct direction of travel.
>
> Yeah, it's not great. For NMIs Lorenzo is looking at the GIC side, I'll
> let him clarify his schedule. Here it's more the case that implementing
> the architecture side without an interrupt controller isn't useful (and
> certainly not usefully testable) than anything else - my expectation is
> that it should work fine, though from your comments above it sounds like
> there will be issues with the handling of PSTATE that I've not realised.
The vgic support should be rather trivial. It is only a matter of
adding the required interrupt state, reworking the priority sorting
and LR stuffing, handling the additional MMIO range and dealing with
the GIC versioning. Trapping of ALLINT should be done at the same
time.
If people cannot be bothered, I'll end-up doing it myself.
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-11-10 8:29 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-04 23:54 [PATCH v1 00/18] arm64/nmi: Support for FEAT_NMI Mark Brown
2022-11-04 23:54 ` [PATCH v1 01/18] arm64/booting: Document boot requirements " Mark Brown
2022-11-04 23:54 ` [PATCH v1 02/18] arm64/sysreg: Add definition for ICC_NMIAR1_EL1 Mark Brown
2022-11-04 23:54 ` [PATCH v1 03/18] arm64/sysreg: Add definition of ISR_EL1 Mark Brown
2022-11-04 23:54 ` [PATCH v1 04/18] arm64/sysreg: Add definitions for immediate versions of MSR ALLINT Mark Brown
2022-11-04 23:54 ` [PATCH v1 05/18] arm64/asm: Introduce assembly macros for managing ALLINT Mark Brown
2022-11-04 23:54 ` [PATCH v1 06/18] arm64/hyp-stub: Enable access to ALLINT Mark Brown
2022-11-04 23:54 ` [PATCH v1 07/18] arm64/idreg: Add an override for FEAT_NMI Mark Brown
2022-11-04 23:54 ` [PATCH v1 08/18] arm64/cpufeature: Detect PE support for NMIs Mark Brown
2022-11-04 23:54 ` [PATCH v1 09/18] arm64/entry: Manage ALLINT.ALLINT when FEAT_NMI is active Mark Brown
2022-11-04 23:54 ` [PATCH v1 10/18] arm64/mm: Disable all interrupts while replacing TTBR1 Mark Brown
2022-11-04 23:54 ` [PATCH v1 11/18] arm64/hibernate: Disable NMIs while hibernating Mark Brown
2022-11-04 23:54 ` [PATCH v1 12/18] arm64/suspend: Disable NMIs while suspending Mark Brown
2022-11-04 23:54 ` [PATCH v1 13/18] arm64/kexec: Mask NMIs before starting new kernel Mark Brown
2022-11-04 23:54 ` [PATCH v1 14/18] arm64/acpi: Mask NMIs while notifying SEA Mark Brown
2022-11-04 23:54 ` [PATCH v1 15/18] arm64/irq: Document handling of FEAT_NMI in irqflags.h Mark Brown
2022-11-04 23:54 ` [PATCH v1 16/18] arm64/nmi: Add handling of superpriority interrupts as NMIs Mark Brown
2022-11-04 23:54 ` [PATCH v1 17/18] arm64/nmi: Add Kconfig for NMI Mark Brown
2022-11-04 23:54 ` [PATCH v1 18/18] irqchip/gic-v3: Implement FEAT_GICv3_NMI support Mark Brown
2022-11-06 11:38 ` [PATCH v1 00/18] arm64/nmi: Support for FEAT_NMI Marc Zyngier
2022-11-09 15:35 ` Mark Brown
2022-11-10 8:26 ` Marc Zyngier [this message]
2022-11-10 11:06 ` Lorenzo Pieralisi
2022-11-14 11:11 ` Marc Zyngier
2022-11-10 11:48 ` Mark Brown
2022-12-18 9:40 ` Zenghui Yu
2022-12-19 12:36 ` Mark Brown
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=87leojuse3.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=Sami.Mujawar@arm.com \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=lpieralisi@kernel.org \
--cc=mark.rutland@arm.com \
--cc=tglx@linutronix.de \
--cc=will@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;
as well as URLs for NNTP newsgroup(s).