[PATCH] uml: remove bogus WARN_ON, triggerable harmlessly on a page fault race
authorPaolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Mon, 14 Nov 2005 00:07:04 +0000 (16:07 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 14 Nov 2005 02:14:14 +0000 (18:14 -0800)
commitcbc24afa82106b67df804cb434739e4382eecd9a
treee89a253539f50ea324754af3f75515d19413b48f
parent2ab23c95a0b77d45dc764dd4aed48fe6e8906e59
[PATCH] uml: remove bogus WARN_ON, triggerable harmlessly on a page fault race

The below warning was added in place of pte_mkyoung(); if (is_write)
pte_mkdirty();

In fact, if the PTE is not marked young/dirty, our dirty/accessed bit
emulation would cause the TLB permission not to be changed, and so we'd loop,
and given we don't support preemption yet, we'd busy-hang here.

However, I've seen this warning trigger without crashes during a loop of
concurrent kernel builds, at random times (i.e. like a race condition), and I
realized that two concurrent faults on the same page, one on read and one on
write, can trigger it. The read fault gets serviced and the PTE gets marked
writable but clean (it's possible on a shared-writable mapping), while the
generic code sees the PTE was already installed and returns without action. In
this case, we'll see another fault and service it normally.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Acked-by: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/um/kernel/trap_kern.c