Thomas Gleixner <tglx@xxxxxxxxxxxxx> writes: > On Sun, Apr 02 2023 at 22:22, Ankur Arora wrote: >> Allow threads marked TIF_ALLOW_RESCHED to be rescheduled in irqexit. >> >> This is only necessary under !preempt_model_preemptible() for which >> we reuse the same logic as irqentry_exit_code_resched(). > > This tells what this patch is doing but completely fails to explain why > this is necessary and useful. Thanks. Yeah, it does seem to miss that completely. Needs some massaging, but does something like this clarify it's purpose? On kernels with PREEMPTION_NONE/_VOLUNTARY, rescheduling of kernel tasks happens when they allow it -- for instance by synchronously calling cond_resched() in a long running task. There are cases where it is not convenient to periodically call cond_resched() -- for instance when executing a potentially long running instruction (such as REP STOSB on x86). To handle kernel code sections which can be safely preempted, but cannot explicitly call cond_resched(), allow them to mark themselves TIF_ALLOW_RESCHED. Contexts marked such (via allow_resched()) can be rescheduled in the irqexit path. This is, of course only needed with !preempt_model_preemptible() and the rescheduling logic is functionally same as irqentry_exit_code_resched(). -- ankur