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:
parent
70d6027ff2
commit
537a1bf059
16 changed files with 74 additions and 42 deletions
|
@ -393,8 +393,10 @@ static void set_fb_fix(struct fb_info *fbi)
|
|||
|
||||
rg = &plane->fbdev->mem_desc.region[plane->idx];
|
||||
fbi->screen_base = rg->vaddr;
|
||||
mutex_lock(&fbi->mm_lock);
|
||||
fix->smem_start = rg->paddr;
|
||||
fix->smem_len = rg->size;
|
||||
mutex_unlock(&fbi->mm_lock);
|
||||
|
||||
fix->type = FB_TYPE_PACKED_PIXELS;
|
||||
bpp = var->bits_per_pixel;
|
||||
|
@ -886,8 +888,10 @@ static int omapfb_setup_mem(struct fb_info *fbi, struct omapfb_mem_info *mi)
|
|||
* plane memory is dealloce'd, the other
|
||||
* screen parameters in var / fix are invalid.
|
||||
*/
|
||||
mutex_lock(&fbi->mm_lock);
|
||||
fbi->fix.smem_start = 0;
|
||||
fbi->fix.smem_len = 0;
|
||||
mutex_unlock(&fbi->mm_lock);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue