Module Name:    src
Committed By:   riastradh
Date:           Sun Feb 13 19:20:23 UTC 2022

Modified Files:
        src/sys/net/npf: npf_conn.c

Log Message:
npf(4): Use atomic_store_release and atomic_load_consume for conn_db.

...or atomic_load_relaxed, when npf->conn_lock is held, for the sake
of C11.

No need for store-before-load implied by membar_sync.


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/sys/net/npf/npf_conn.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/net/npf/npf_conn.c
diff -u src/sys/net/npf/npf_conn.c:1.33 src/sys/net/npf/npf_conn.c:1.34
--- src/sys/net/npf/npf_conn.c:1.33	Mon Jan 25 17:18:55 2021
+++ src/sys/net/npf/npf_conn.c	Sun Feb 13 19:20:23 2022
@@ -104,7 +104,7 @@
 
 #ifdef _KERNEL
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_conn.c,v 1.33 2021/01/25 17:18:55 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_conn.c,v 1.34 2022/02/13 19:20:23 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -221,8 +221,7 @@ npf_conn_load(npf_t *npf, npf_conndb_t *
 		KASSERT(atomic_load_relaxed(&npf->conn_tracking)
 		    == CONN_TRACKING_OFF);
 		odb = atomic_load_relaxed(&npf->conn_db);
-		membar_sync();
-		atomic_store_relaxed(&npf->conn_db, ndb);
+		atomic_store_release(&npf->conn_db, ndb);
 	}
 	if (track) {
 		/* After this point lookups start flying in. */
@@ -492,7 +491,7 @@ npf_conn_establish(npf_cache_t *npc, con
 	 * the connection later.
 	 */
 	mutex_enter(&con->c_lock);
-	conn_db = atomic_load_relaxed(&npf->conn_db);
+	conn_db = atomic_load_consume(&npf->conn_db);
 	if (!npf_conndb_insert(conn_db, fw, con, NPF_FLOW_FORW)) {
 		error = EISCONN;
 		goto err;
@@ -597,7 +596,7 @@ npf_conn_setnat(const npf_cache_t *npc, 
 	}
 
 	/* Remove the "backwards" key. */
-	conn_db = atomic_load_relaxed(&npf->conn_db);
+	conn_db = atomic_load_consume(&npf->conn_db);
 	bk = npf_conn_getbackkey(con, con->c_alen);
 	ret = npf_conndb_remove(conn_db, bk);
 	KASSERT(ret == con);
@@ -762,7 +761,7 @@ npf_conn_remove(npf_conndb_t *cd, npf_co
 void
 npf_conn_worker(npf_t *npf)
 {
-	npf_conndb_t *conn_db = atomic_load_relaxed(&npf->conn_db);
+	npf_conndb_t *conn_db = atomic_load_consume(&npf->conn_db);
 	npf_conndb_gc(npf, conn_db, false, true);
 }
 

Reply via email to