On Wed, Oct 07, 2020 at 02:35:53PM +0200, Michal Hocko wrote: > On Wed 07-10-20 14:21:44, Peter Zijlstra wrote: > > On Wed, Oct 07, 2020 at 02:04:01PM +0200, Michal Hocko wrote: > > > I wanted to make sure that the idea is sound for maintainers first. The > > > next step would be extending the command line to support full preemption > > > as well but there is much more work in that area. Frederic has promissed > > > to look into that. > > > > The sanest way there is to static_call() __preempt_schedule() I think. > > Yes, I have checked the code and identified few other places like > irqentry_exit_cond_resched. We also need unconditional > CONFIG_PREEMPT_COUNT IIUC and there are quite some places guarded by > CONFIG_PREEMPTION that would need to be examined. Some of them are > likely pretending to be more clever than they really are/should be - > e.g. mm/slub.c. So there is likely a lot of leg work.
The easiest way might be to introduce PREEMPT_DYNAMIC that depends/selects PREEMPT. That way you're basically running a PREEMPT=y kernel. Then have PREEMPT_DYNAMIC allow disabling the __preempt_schedule / preempt_schedule_irq() callsites using static_call/static_branch respectively. That is, work backwards (from PREEMPT back to VOLUNTARY) instead of the other way around.