On Mon, 2013-04-08 at 15:37 +0200, Peter Zijlstra wrote: > That said, I can't remember ever having seen a BUG like this, even > though !PREEMPT is (or at least was) the most popular distro setting.
It requires gcc reordering the code to where a preempt can happen inside preempt_disable. And also put in a position where the preempt_disable code it gets added matters. Then if gcc does this, we need a page fault to occur with a get_user() operation, which in practice seldom happens as most get user operations are done on freshly modified memory. And then, it would require the page fault to cause a schedule. This is the most likely of the things needed to occur, but itself is not a problem. Then, the schedule would have to cause the data that is being protect by the preempt_disable() to be corrupted. Either by scheduling in another process that monkeys with the data. Or if it protects per-cpu data, scheduling to another CPU (for the SMP case only). If any of the above does not occur, then you wont see a bug. This is highly unlikely to happen, but that's no excuse to not fix it. But it probably explains why we never saw a bug report. Heck, it may have happened, but it would be hard to reproduce, and just forgotten about. -- Steve -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/