On Sun, Sep 24, 2023 at 09:55:52AM +0200, Thomas Gleixner wrote: > On Sun, Sep 24 2023 at 08:19, Matthew Wilcox wrote: > > On Sun, Sep 24, 2023 at 12:50:43AM +0200, Thomas Gleixner wrote: > >> cond_resched() cannot nest and is obviously scope-less. > >> > >> The TIF_ALLOW_RESCHED mechanism, which sparked this discussion only > >> pretends to be scoped. > >> > >> As Peter pointed out it does not properly nest with other mechanisms and > >> it cannot even nest in itself because it is boolean. > > > > We can nest a single bit without turning it into a counter -- we > > do this for memalloc_nofs_save() for example. Simply return the > > current value of the bit, and pass it to _restore(). > > Right. > > That works, but the reverse logic still does not make sense: > > allow_resched(); > .... > spin_lock(); > > while > resched_now_is_suboptimal(); > ... > spin_lock(); > > works. Oh, indeed. I had in mind state = resched_now_is_suboptimal(); spin_lock(); ... spin_unlock(); resched_might_be_optimal_again(state); ... or we could bundle it up ... state = spin_lock_resched_disable(); ... spin_unlock_resched_restore(state);