On 11.11.20 16:37, Jan Beulich wrote:
On 09.11.2020 10:50, Juergen Gross wrote:Actions in NMI context are rather limited as e.g. locking is rather fragile.Add a framework to continue processing in normal interrupt context after leaving NMI processing. This is done by a high priority interrupt vector triggered via a self IPI from NMI context, which will then call the continuation function specified during NMI handling. Signed-off-by: Juergen Gross <jgr...@suse.com>Reviewed-by: Jan Beulich <jbeul...@suse.com> with one further adjustment request:@@ -1799,6 +1800,24 @@ void unset_nmi_callback(void) nmi_callback = dummy_nmi_callback; }+bool nmi_check_continuation(void)+{ + bool ret = false; + + return ret; +} + +void trigger_nmi_continuation(void) +{ + /* + * Issue a self-IPI. Handling is done in spurious_interrupt(). + * NMI could have happened in IPI sequence, so wait for ICR being idle + * again before leaving NMI handler. + */ + send_IPI_self(SPURIOUS_APIC_VECTOR); + apic_wait_icr_idle(); +}This additionally relies on send_IPI_self_legacy() calling send_IPI_shortcut(), rather than e.g. resolving the local CPU number to a destination ID. I think this wants saying maybe here, but more importantly in that function.
Okay. Juergen
OpenPGP_0xB0DE9DD628BF132F.asc
Description: application/pgp-keys
OpenPGP_signature
Description: OpenPGP digital signature