On Thu, Apr 07, 2022 at 12:25:49PM -0700, Kui-Feng Lee wrote: > - if (!__bpf_prog_enter_sleepable(prog)) { > + if (!__bpf_prog_enter_sleepable(prog, NULL)) { > /* recursion detected */ > bpf_prog_put(prog); > return -EBUSY; > } > attr->test.retval = bpf_prog_run(prog, (void *) (long) attr->test.ctx_in); > - __bpf_prog_exit_sleepable(prog, 0 /* bpf_prog_run does runtime stats */); > + __bpf_prog_exit_sleepable(prog, 0 /* bpf_prog_run does runtime stats */, NULL); Did you miss my comment from the previous review? Please replace NULL with actual ctx and remove below checks: > + > + if (run_ctx) > + run_ctx->saved_run_ctx = bpf_set_run_ctx(&run_ctx->run_ctx); ... > -void notrace __bpf_prog_exit(struct bpf_prog *prog, u64 start) > +void notrace __bpf_prog_exit(struct bpf_prog *prog, u64 start, struct bpf_tramp_run_ctx *run_ctx) > __releases(RCU) > { > + if (run_ctx) > + bpf_reset_run_ctx(run_ctx->saved_run_ctx); > + ... > -u64 notrace __bpf_prog_enter_sleepable(struct bpf_prog *prog) > +u64 notrace __bpf_prog_enter_sleepable(struct bpf_prog *prog, struct bpf_tramp_run_ctx *run_ctx) > { > rcu_read_lock_trace(); > migrate_disable(); > might_fault(); > + > + if (run_ctx) > + run_ctx->saved_run_ctx = bpf_set_run_ctx(&run_ctx->run_ctx); Such 'if' in critical path should be avoided.