From: Hou Tao <houtao1@xxxxxxxxxx> Hi, The patchset aims to make the update of bpf_task_storage_busy being preemption-safe. The problem is on same architectures (e.g. arm64), __this_cpu_{inc|dec|inc_return} are neither preemption-safe nor IRQ-safe, so the concurrent lookups or updates on the same task local storage and the same CPU may make bpf_task_storage_busy be imbalanced, and bpf_task_storage_trylock() on specific cpu will always fail. Patch 1 fixes the problem by using preemption/IRQ-safe per-cpu helpers. And patch 2 & patch 3 add a test case for the problem. Comments are always welcome. Regards, Tao Hou Tao (3): bpf: Use this_cpu_{inc|dec|inc_return} for bpf_task_storage_busy selftests/bpf: Move sys_pidfd_open() into test_progs.h selftests/bpf: Test concurrent updates on bpf_task_storage_busy kernel/bpf/bpf_local_storage.c | 4 +- kernel/bpf/bpf_task_storage.c | 8 +- .../bpf/prog_tests/task_local_storage.c | 91 +++++++++++++++++++ .../selftests/bpf/prog_tests/test_bprm_opts.c | 9 -- .../bpf/prog_tests/test_local_storage.c | 9 -- tools/testing/selftests/bpf/test_progs.h | 9 ++ 6 files changed, 106 insertions(+), 24 deletions(-) -- 2.29.2