summaryrefslogtreecommitdiffstats
path: root/arch/mips
diff options
context:
space:
mode:
authorHou Tao <houtao1@huawei.com>2023-08-16 12:59:57 +0800
committerAlexei Starovoitov <ast@kernel.org>2023-08-21 15:21:16 -0700
commit8f8500a247c91e0d263283879166fffbb3329584 (patch)
treeca366a0d7c63cfb03330b1080e26ea4696807486 /arch/mips
parent0a55264cf966fb95ebf9d03d9f81fa992f069312 (diff)
downloadlinux-stable-8f8500a247c91e0d263283879166fffbb3329584.tar.gz
linux-stable-8f8500a247c91e0d263283879166fffbb3329584.tar.bz2
linux-stable-8f8500a247c91e0d263283879166fffbb3329584.zip
bpf, cpumap: Use queue_rcu_work() to remove unnecessary rcu_barrier()
As for now __cpu_map_entry_replace() uses call_rcu() to wait for the inflight xdp program to exit the RCU read critical section, and then launch kworker cpu_map_kthread_stop() to call kthread_stop() to flush all pending xdp frames or skbs. But it is unnecessary to use rcu_barrier() in cpu_map_kthread_stop() to wait for the completion of __cpu_map_entry_free(), because rcu_barrier() will wait for all pending RCU callbacks and cpu_map_kthread_stop() only needs to wait for the completion of a specific __cpu_map_entry_free(). So use queue_rcu_work() to replace call_rcu(), schedule_work() and rcu_barrier(). queue_rcu_work() will queue a __cpu_map_entry_free() kworker after a RCU grace period. Because __cpu_map_entry_free() is running in a kworker context, so it is OK to do all of these freeing procedures include kthread_stop() in it. After the update, there is no need to do reference-counting for bpf_cpu_map_entry, because bpf_cpu_map_entry is freed directly in __cpu_map_entry_free(), so just remove it. Signed-off-by: Hou Tao <houtao1@huawei.com> Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com> Link: https://lore.kernel.org/r/20230816045959.358059-2-houtao@huaweicloud.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'arch/mips')
0 files changed, 0 insertions, 0 deletions