Thomas Gleixner <tglx@xxxxxxxxxxxxx> writes: > On Tue, Sep 19 2023 at 14:30, Thomas Gleixner wrote: >> On Mon, Sep 18 2023 at 18:57, Linus Torvalds wrote: >>> Anyway, I'm definitely not opposed. We'd get rid of a config option >>> that is presumably not very widely used, and we'd simplify a lot of >>> issues, and get rid of all these badly defined "cond_preempt()" >>> things. >> >> Hmm. Didn't I promise a year ago that I won't do further large scale >> cleanups and simplifications beyond printk. >> >> Maybe I get away this time with just suggesting it. :) > > Maybe not. As I'm inveterate curious, I sat down and figured out how > that might look like. > > To some extent I really curse my curiosity as the amount of macro maze, > config options and convoluted mess behind all these preempt mechanisms > is beyond disgusting. > > Find below a PoC which implements that scheme. It's not even close to > correct, but it builds, boots and survives lightweight testing. Whew, that was electric. I had barely managed to sort through some of the config maze. >From a quick look this is pretty much how you described it. > I did not even try to look into time-slice enforcement, but I really want > to share this for illustration and for others to experiment. > > This keeps all the existing mechanisms in place and introduces a new > config knob in the preemption model Kconfig switch: PREEMPT_AUTO > > If selected it builds a CONFIG_PREEMPT kernel, which disables the > cond_resched() machinery and switches the fair scheduler class to use > the NEED_PREEMPT_LAZY bit by default, i.e. it should be pretty close to > the preempt NONE model except that cond_resched() is a NOOP and I did > not validate the time-slice enforcement. The latter should be a > no-brainer to figure out and fix if required. Yeah, let me try this out. Thanks Ankur