Thomas Gleixner <tglx@xxxxxxxxxxxxx> writes: > On Wed, Sep 20 2023 at 07:22, Ankur Arora wrote: >> Thomas Gleixner <tglx@xxxxxxxxxxxxx> writes: >> >>> So the decision matrix would be: >>> >>> Ret2user Ret2kernel PreemptCnt=0 >>> >>> NEED_RESCHED Y Y Y >>> LAZY_RESCHED Y N N >>> >>> That is completely independent of the preemption model and the >>> differentiation of the preemption models happens solely at the scheduler >>> level: >> >> This is relatively minor, but do we need two flags? Seems to me we >> can get to the same decision matrix by letting the scheduler fold >> into the preempt-count based on current preemption model. > > You still need the TIF flags because there is no way to do remote > modification of preempt count. Yes, agreed. In my version, I was envisaging that the remote cpu always only sets up TIF_NEED_RESCHED and then we decide which one we want at the preemption point. Anyway, I see what you meant in your PoC. >>> But they support PREEMPT_COUNT, so we might get away with a reduced >>> preemption point coverage: >>> >>> Ret2user Ret2kernel PreemptCnt=0 >>> >>> NEED_RESCHED Y N Y >>> LAZY_RESCHED Y N N >> >> So from the discussion in the other thread, for the ARCH_NO_PREEMPT >> configs that don't support preemption, we probably need a fourth >> preemption model, say PREEMPT_UNSAFE. > > As discussed they wont really notice the latency issues because the > museum pieces are not used for anything crucial and for UM that's the > least of the correctness worries. > > So no, we don't need yet another knob. We keep them chucking along and > if they really want they can adopt to the new world order. :) Will they chuckle along, or die trying ;)? I grepped for "preempt_enable|preempt_disable" for all the archs and hexagon and m68k don't seem to do any explicit accounting at all. (Though, neither do nios2 and openrisc, and both csky and microblaze only do it in the tlbflush path.) arch/hexagon 0 arch/m68k 0 arch/nios2 0 arch/openrisc 0 arch/csky 3 arch/microblaze 3 arch/um 4 arch/riscv 8 arch/arc 14 arch/parisc 15 arch/arm 16 arch/sparc 16 arch/xtensa 19 arch/sh 21 arch/alpha 23 arch/ia64 27 arch/loongarch 53 arch/arm64 54 arch/s390 91 arch/mips 115 arch/x86 146 arch/powerpc 201 My concern is given that we preempt on timeslice expiration for all three preemption models, we could end up preempting at an unsafe location. Still, not the most pressing of problems. Thanks -- ankur