Messages in this thread | | | Subject | Re: [PATCH] [PATCH] Gaurantee spinlocks implicit barrier for !PREEMPT_COUNT | From | Steven Rostedt <> | Date | Mon, 08 Apr 2013 10:31:10 -0400 |
| |
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
| |