]> git.baikalelectronics.ru Git - kernel.git/commit
fb_defio: fix for non-dirty ptes
authorAlbert Herranz <albert_herranz@yahoo.es>
Mon, 24 May 2010 21:34:08 +0000 (14:34 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 25 May 2010 15:07:09 +0000 (08:07 -0700)
commit065b2fe1f538d5bc484a46ae1628cca00b97bcd3
tree6e118691727380045c1d22d93452dc99f1ccc04d
parent8fa7c4b6a90526eba8934d1f41e16b179eee737d
fb_defio: fix for non-dirty ptes

Fix a problem observed while using fb_defio with a short delay on a
PowerPC platform.

It is possible that page_mkclean() is invoked in the deferred io work
function _before_ a PTE has been marked dirty.  In this case, the page is
removed from the defio pagelist but page_mkclean() does not write-protect
the page again.  The end result is that defio ignores all subsequent
writes to the page and the corresponding portions of the framebuffer never
get updated.

The fix consists in keeping track of the pages with non-dirty PTEs,
re-checking them again on the next deferred io work iteration.  Note that
those pages are not passed to the defio callback as they are not written
by userspace yet.

Signed-off-by: Albert Herranz <albert_herranz@yahoo.es>
Acked-by: Jaya Kumar <jayakumar.lkml@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/video/fb_defio.c