On Mon, May 09, 2022 at 08:06:22AM +0000, Song Liu wrote: > > > > On May 9, 2022, at 12:04 AM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > > > On Sat, May 07, 2022 at 10:46:28AM -0700, Song Liu wrote: > >> Busy kernel threads may block the transition of livepatch. Call > >> klp_try_switch_task from __cond_resched to make the transition easier. > > > > What will a PREEMPT=y kernel do? How is it not a problem there, and if > > it is, this will not help that. > > > > That is; I don't think this can be right. > > I guess on PREEMPT=y kernel, we can simply preempt the long running > kernel thread and check the transition? This is not a guessing game. > In this case (PREEMPT=n), we see a long running kernel thread could not > finish the transition. It calls cond_resched() and gets rescheduled > (moves among different cores). However, it never finishes the transition, > because live patch doesn’t get a chance to check the stack. > > Does this answer the question? Not really. There is no difference between an explicit preemption point (cond_resched) or an involuntary preemption point (PREEMPT=y). So unless you can *exactly* say why it isn't a problem on PREEMPT=y, none of this makes any sense.