diff options
author | Alexei Starovoitov <[email protected]> | 2023-07-05 20:34:40 -0700 |
---|---|---|
committer | Daniel Borkmann <[email protected]> | 2023-07-12 23:45:22 +0200 |
commit | d114dde245f9115b73756203b03a633a6fc1b36a (patch) | |
tree | e106094d99ba9f1421f202569c9220ef7bd08b13 /drivers/fpga/fpga-mgr.c | |
parent | 7468048237b8a99c03e1325b11373f9b29ef4139 (diff) |
bpf: Change bpf_mem_cache draining process.
The next patch will introduce cross-cpu llist access and existing
irq_work_sync() + drain_mem_cache() + rcu_barrier_tasks_trace() mechanism will
not be enough, since irq_work_sync() + drain_mem_cache() on cpu A won't
guarantee that llist on cpu A are empty. The free_bulk() on cpu B might add
objects back to llist of cpu A. Add 'bool draining' flag.
The modified sequence looks like:
for_each_cpu:
WRITE_ONCE(c->draining, true); // do_call_rcu_ttrace() won't be doing call_rcu() any more
irq_work_sync(); // wait for irq_work callback (free_bulk) to finish
drain_mem_cache(); // free all objects
rcu_barrier_tasks_trace(); // wait for RCU callbacks to execute
Signed-off-by: Alexei Starovoitov <[email protected]>
Signed-off-by: Daniel Borkmann <[email protected]>
Acked-by: Hou Tao <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]
Diffstat (limited to 'drivers/fpga/fpga-mgr.c')
0 files changed, 0 insertions, 0 deletions