git: b5410efe42c5 - stable/13 - buf_ring: Remove old arm-only dequeue code
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 02 Sep 2024 09:12:47 UTC
The branch stable/13 has been updated by andrew:
URL: https://cgit.FreeBSD.org/src/commit/?id=b5410efe42c5bcf78d3f41052266a758e4fd03fc
commit b5410efe42c5bcf78d3f41052266a758e4fd03fc
Author: Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2024-08-19 09:07:10 +0000
Commit: Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2024-09-02 09:11:57 +0000
buf_ring: Remove old arm-only dequeue code
In the single consumer dequeue the consumer thread controls
br_cons_head. As such no ordering between this and other data are
required.
Reviewed by: alc, imp, kib, markj
Sponsored by: Arm Ltd
Differential Revision: https://reviews.freebsd.org/D46153
(cherry picked from commit 7eb0fffc7792bc294d6b86546a3923e2e2f83f8a)
---
sys/sys/buf_ring.h | 29 -----------------------------
1 file changed, 29 deletions(-)
diff --git a/sys/sys/buf_ring.h b/sys/sys/buf_ring.h
index 9aeb5aa19fa8..ad463fba27cb 100644
--- a/sys/sys/buf_ring.h
+++ b/sys/sys/buf_ring.h
@@ -177,37 +177,8 @@ buf_ring_dequeue_sc(struct buf_ring *br)
uint32_t prod_tail, mask;
void *buf;
- /*
- * This is a workaround to allow using buf_ring on ARM and ARM64.
- * ARM64TODO: Fix buf_ring in a generic way.
- * REMARKS: It is suspected that br_cons_head does not require
- * load_acq operation, but this change was extensively tested
- * and confirmed it's working. To be reviewed once again in
- * FreeBSD-12.
- *
- * Preventing following situation:
-
- * Core(0) - buf_ring_enqueue() Core(1) - buf_ring_dequeue_sc()
- * ----------------------------------------- ----------------------------------------------
- *
- * cons_head = br->br_cons_head;
- * atomic_cmpset_acq_32(&br->br_prod_head, ...));
- * buf = br->br_ring[cons_head]; <see <1>>
- * br->br_ring[prod_head] = buf;
- * atomic_store_rel_32(&br->br_prod_tail, ...);
- * prod_tail = br->br_prod_tail;
- * if (cons_head == prod_tail)
- * return (NULL);
- * <condition is false and code uses invalid(old) buf>`
- *
- * <1> Load (on core 1) from br->br_ring[cons_head] can be reordered (speculative readed) by CPU.
- */
mask = br->br_cons_mask;
-#if defined(__arm__) || defined(__aarch64__)
- cons_head = atomic_load_acq_32(&br->br_cons_head);
-#else
cons_head = br->br_cons_head;
-#endif
prod_tail = atomic_load_acq_32(&br->br_prod_tail);
cons_next = cons_head + 1;