fbdev: add mutex for fb_mmap locking
Add a mutex to avoid a circular locking problem between the mm layer semaphore and fbdev ioctl mutex through the fb_mmap() call. Also, add mutex to all places where smem_start and smem_len fields change so the mutex inside the fb_mmap() is actually used. Changing of these fields before calling the framebuffer_register() are not mutexed. This is 2.6.31 material. It removes one lockdep (fb_mmap() and register_framebuffer()) but there is still another one (fb_release() and register_framebuffer()). It also cleans up handling of the smem_start and smem_len fields used by mutexed section of the fb_mmap(). Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: "Rafael J. Wysocki" <rjw@sisk.pl> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
70d6027ff2
commit
537a1bf059
@@ -815,8 +815,10 @@ static int overlayfb_map_video_memory(struct pxafb_layer *ofb)
|
||||
ofb->video_mem_phys = virt_to_phys(ofb->video_mem);
|
||||
ofb->video_mem_size = size;
|
||||
|
||||
mutex_lock(&ofb->fb.mm_lock);
|
||||
ofb->fb.fix.smem_start = ofb->video_mem_phys;
|
||||
ofb->fb.fix.smem_len = ofb->fb.fix.line_length * var->yres_virtual;
|
||||
mutex_unlock(&ofb->fb.mm_lock);
|
||||
ofb->fb.screen_base = ofb->video_mem;
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user