On Mon, Mar 18, 2024 at 11:52 PM Eduard Zingerman <eddyz87@xxxxxxxxx> wrote: > > On Fri, 2024-03-15 at 15:29 +0100, Benjamin Tissoires wrote: > > This patch looks good to me, please see two nitpicks below. > Acked-by: Eduard Zingerman <eddyz87@xxxxxxxxx> Thanks! > > [...] > > > @@ -1350,6 +1358,11 @@ BPF_CALL_3(bpf_timer_start, struct bpf_timer_kern *, timer, u64, nsecs, u64, fla > > goto out; > > } > > > > + if (t->is_sleepable && !(flags & BPF_F_TIMER_SLEEPABLE)) { > > + ret = -EINVAL; > > + goto out; > > + } > > Nit: > the BPF_F_TIMER_ABS and BPF_F_TIMER_CPU_PIN don't affect > sleepable timers, should this check be changed to: > '(t->is_sleepable && flags != BPF_F_TIMER_SLEEPABLE)' ? Sounds fair enough. Scheduled this for v5 > > [...] > > > @@ -12151,6 +12175,16 @@ static int check_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn, > > } > > } > > > > + if (is_async_callback_calling_kfunc(meta.func_id)) { > > + err = push_callback_call(env, insn, insn_idx, meta.subprogno, > > + set_timer_callback_state); > > Nit: still think that this fragment would be better as: > > if (is_bpf_timer_set_sleepable_cb_impl_kfunc(meta.func_id)) { > err = push_callback_call(env, insn, insn_idx, meta.subprogno, > set_timer_callback_state); > > Because of the 'set_timer_callback_state' passed to push_callback_call(). Yeah, sorry I missed that part from the previous reviews. Fixed in v5 Cheers, Benjamin > > > + if (err) { > > + verbose(env, "kfunc %s#%d failed callback verification\n", > > + func_name, meta.func_id); > > + return err; > > + } > > + } > > + > > rcu_lock = is_kfunc_bpf_rcu_read_lock(&meta); > > rcu_unlock = is_kfunc_bpf_rcu_read_unlock(&meta); > > >