On Wed, 8 Feb 2017, Mel Gorman wrote: > preempt_enable_no_resched() was used based on review feedback that had no > strong objection at the time. It avoided introducing a preemption point > where one didn't exist before which was marginal at best. Actually local_irq_enable() _IS_ a preemption point, indirect but still: local_irq_disable() .... --> HW interrupt is raised .... local_irq_enable() handle_irq() set_need_resched() ret_from_irq() preempt() while with preempt_disable that looks like this: preempt_disable() .... --> HW interrupt is raised handle_irq() set_need_resched() ret_from_irq() .... preempt_enable() preempt() Now if you use preempt_enable_no_resched() then you miss the preemption and depending on the actual code path you might run something which takes ages without hitting a preemption point after that. It's not only a problem for RT. It's also in mainline a violation of the preemption mechanism. Thanks, tglx -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>