• Chris Wilson's avatar
    drm/i915: Avoid potential sleep whilst holding spinlock · ba86bf8b
    Chris Wilson authored
    Miles Lane reported the following error:
    2 locks held by cat/4179:
      #0:  (&p->lock){+.+.+.}, at: [<c10a3884>] seq_read+0x25/0x315
      #1:  (&dev_priv->mm.active_list_lock){+.+...}, at: [<c119a854>]
    i915_batchbuffer_info+0x2b/0x124
    Pid: 4179, comm: cat Not tainted 2.6.32-rc5-git1 #2
    Call Trace:
      [<c104874f>] ? __debug_show_held_locks+0x1e/0x20
      [<c1023fb0>] __might_sleep+0xf0/0xf7
      [<c101c393>] kmap+0x17/0x58
      [<c119a8d6>] i915_batchbuffer_info+0xad/0x124
      [<c10a39bf>] seq_read+0x160/0x315
      [<c108fb8c>] ? rw_verify_area+0x98/0xbb
      [<c10a385f>] ? seq_read+0x0/0x315
      [<c1090331>] vfs_read+0x75/0xa9
      [<c10903f9>] sys_read+0x3b/0x5d
      [<c1002a8f>] sysenter_do_call+0x12/0x36
    
    The fix is relatively simple, use the atomic variants of kmap() that
    avoid the potential sleep.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Miles Lane <miles.lane@gmail.com>
    Signed-off-by: default avatarEric Anholt <eric@anholt.net>
    ba86bf8b
i915_debugfs.c 13.6 KB