summaryrefslogtreecommitdiff
path: root/net/sched/sch_mqprio_lib.c
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2026-08-12 08:54:40 +0000
committerJakub Kicinski <kuba@kernel.org>2026-08-17 10:27:48 -0700
commit51b0aaafd9ee85adfa7623d6dca37c71e33777e8 (patch)
tree02040c9528c410fd32c3381d274338a13eb9d96d /net/sched/sch_mqprio_lib.c
parent0c6c32a8c854e570998494b8368d314d526ddbd3 (diff)
downloadlinux-next-51b0aaafd9ee85adfa7623d6dca37c71e33777e8.tar.gz
linux-next-51b0aaafd9ee85adfa7623d6dca37c71e33777e8.zip
net: add READ_ONCE()/WRITE_ONCE() annotations for dev->prio_tc_map
Concurrent fast-path readers access dev->prio_tc_map (e.g. via skb_tx_hash(), netdev_get_prio_tc_map(), and qdiscs) while writers update entries in dev->prio_tc_map or reset/clear the map via netdev_reset_tc() and netdev_unbind_sb_channel(). Furthermore, memset() in netdev_reset_tc() and netdev_unbind_sb_channel() provides no guarantee of performing atomic word/byte stores. Add READ_ONCE() and WRITE_ONCE() annotations to netdev_get_prio_tc_map() and netdev_set_prio_tc_map(), replace memset() in dev.c with explicit WRITE_ONCE() loops, and update direct array accesses in qdiscs to use netdev_get_prio_tc_map(). Signed-off-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20260812085440.3917924-4-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/sched/sch_mqprio_lib.c')
-rw-r--r--net/sched/sch_mqprio_lib.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/sched/sch_mqprio_lib.c b/net/sched/sch_mqprio_lib.c
index b60e130c7078..888935e34d43 100644
--- a/net/sched/sch_mqprio_lib.c
+++ b/net/sched/sch_mqprio_lib.c
@@ -105,7 +105,8 @@ void mqprio_qopt_reconstruct(struct net_device *dev, struct tc_mqprio_qopt *qopt
int tc, num_tc = netdev_get_num_tc(dev);
qopt->num_tc = num_tc;
- memcpy(qopt->prio_tc_map, dev->prio_tc_map, sizeof(qopt->prio_tc_map));
+ for (tc = 0; tc <= TC_BITMASK; tc++)
+ qopt->prio_tc_map[tc] = netdev_get_prio_tc_map(dev, tc);
for (tc = 0; tc < num_tc; tc++) {
struct netdev_tc_txq res;