Module Name: src Committed By: riastradh Date: Sun May 15 12:45:33 UTC 2022
Modified Files: src/sys/arch/x86/x86: nmi.c Log Message: x86: Use atomic_store_release/atomic_load_consume for nmi_handlers. Simplifies things a bit. No functional change intended. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/x86/x86/nmi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/x86/nmi.c diff -u src/sys/arch/x86/x86/nmi.c:1.5 src/sys/arch/x86/x86/nmi.c:1.6 --- src/sys/arch/x86/x86/nmi.c:1.5 Thu Jun 1 02:45:08 2017 +++ src/sys/arch/x86/x86/nmi.c Sun May 15 12:45:33 2022 @@ -1,4 +1,4 @@ -/* $Id: nmi.c,v 1.5 2017/06/01 02:45:08 chs Exp $ */ +/* $Id: nmi.c,v 1.6 2022/05/15 12:45:33 riastradh Exp $ */ /*- * Copyright (c)2009,2011 YAMAMOTO Takashi, @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nmi.c,v 1.5 2017/06/01 02:45:08 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nmi.c,v 1.6 2022/05/15 12:45:33 riastradh Exp $"); /* * nmi dispatcher. @@ -82,8 +82,7 @@ nmi_establish(int (*func)(const struct t mutex_enter(&nmi_list_lock); n->n_next = nmi_handlers; - membar_producer(); /* n->n_next should be visible before nmi_handlers */ - nmi_handlers = n; /* atomic store */ + atomic_store_release(&nmi_handlers, n); mutex_exit(&nmi_list_lock); return n; @@ -121,7 +120,7 @@ nmi_disestablish(nmi_handler_t *handle) panic("%s: invalid handle %p", __func__, handle); } #endif /* defined(DIAGNOSTIC) */ - *pp = n->n_next; /* atomic store */ + atomic_store_relaxed(pp, n->n_next); mutex_exit(&nmi_list_lock); /* mutex_exit implies a store fence */ /* @@ -154,9 +153,9 @@ nmi_dispatch(const struct trapframe *tf) * we are in a dangerous context. (NMI) */ - for (n = nmi_handlers; /* atomic load */ - n != NULL; - membar_consumer(), n = n->n_next) { /* atomic load */ + for (n = atomic_load_consume(&nmi_handlers); + n != NULL; + n = atomic_load_relaxed(&n->n_next)) { handled |= (*n->n_func)(tf, n->n_arg); } return handled;