Hi Tejun,

On Tue, Aug 18, 2026 at 12:47:11PM -1000, Tejun Heo wrote:
On Tue, Aug 18, 2026 at 03:44:36PM -0700, Ziyang Men wrote:
> > +BTF_KFUNCS_START(bpf_rstat_common_kfunc_ids)
> > +BTF_ID_FLAGS(func, bpf_css_flush_rstat, KF_SLEEPABLE)
> > +BTF_ID_FLAGS(func, bpf_cgroup_base_stat, KF_SLEEPABLE)
>
> Why are these SLEEPABLE?
>

The css_rstat_flush() calls might_sleep() and cond_resched().

I see.

The bpf_cgroup_base_stat() takes an rstat spinlock_t, which can sleep on
PREEMPT_RT.

Is this actually required? This doesn't really make sense to me. Shouldn't
what SLEEPABLE mean change on RT kernels instead?

Oh sorry, I didn't notice that.

I might be wrong: this function calls the cputime_adjust(), which in turn
acquires raw_spin_lock_irqsave(), so there would be NMI deadlock in the
perf_event program. The __css_rstat_lock() take the spin_lock_irq() as well. So
maybe a SLEEPABLE tag is still necessary?

Please let me know your concerns. Thanks!

Best,
Ziyang


Thanks.

--
tejun

Reply via email to