Skip to content
  • Chris Wilson's avatar
    drm: Return EBUSY if the framebuffer is unbound when flipping. · 90c1efdd
    Chris Wilson authored
    It looks like there is a race condition between unbinding a framebuffer
    on a hotplug event and user space trying to flip:
    
    BUG: unable to handle kernel NULL pointer dereference at 0000000000000058
    IP: [<ffffffffa008c7d3>] intel_crtc_page_flip+0xc9/0x39c [i915]
    PGD 114724067 PUD 1145bd067 PMD 0
    Oops: 0000 [#1] SMP
    Pid: 10954, comm: X Not tainted 2.6.35-rc5_stable_20100714+ #1
    P5Q-EM/P5Q-EM
    RIP: 0010:[<ffffffffa008c7d3>]  [<ffffffffa008c7d3>]
    intel_crtc_page_flip+0xc9/0x39c [i915]
    RSP: 0018:ffff880114927cc8  EFLAGS: 00010282
    RAX: 0000000000000000 RBX: ffff88012df48320 RCX: ffff88010c945600
    RDX: ffff880001a109c8 RSI: ffff88010c945840 RDI: ffff88012df48320
    RBP: ffff880114927d18 R08: ffff88012df48280 R09: ffff88012df48320
    R10: 0000000003c2e0b0 R11: 0000000000003246 R12: ffff88010c945840
    R13: ffff88012df48000 R14: 0000000000000060 R15: ffff88012dbb8000
    FS:  00007f9e6078e830(0000) GS:ffff880001a00000(0000)
    knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    CR2: 0000000000000058 CR3: 00000001177a8000 CR4: 00000000000406f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process X (pid: 10954, threadinfo ffff880114926000, task
    ffff88012a4a1690)
    Stack:
     ffff88010c945600 ffff880115b176c0 ffff88012db10000 0000000000000246
    <0> fffffff40006101c ffff88010c945600 00000000ffffffea ffff88010c945600
    <0> ffff88012df48320 ffff88011b4b6780 ffff880114927d78 ffffffffa003bd0e
    Call Trace:
     [<ffffffffa003bd0e>] drm_mode_page_flip_ioctl+0x1bc/0x214 [drm]
     [<ffffffffa00311fc>] drm_ioctl+0x25e/0x35e [drm]
     [<ffffffffa003bb52>] ? drm_mode_page_flip_ioctl+0x0/0x214 [drm]
     [<ffffffff810f1c3c>] vfs_ioctl+0x2a/0x9e
     [<ffffffff810f227e>] do_vfs_ioctl+0x531/0x565
     [<ffffffff810f2307>] sys_ioctl+0x55/0x77
     [<ffffffff810e56d6>] ? sys_read+0x47/0x6f
     [<ffffffff81002a2b>] system_call_fastpath+0x16/0x1b
    Code: 45 d4 f4 ff ff ff 0f 84 e0 02 00 00 48 8b 4d b0 49 8d 9d 20 03 00 00 48
    89 df 49 89 4c 24 38 49 8b 07 49 89 44 24 20 49 8b 47 20 <48> 8b 40 58 49 c7 04
    24 00 00 00 00 49 c7 44 24 18 a9 a5 08 a0
    RIP  [<ffffffffa008c7d3>] intel_crtc_page_flip+0xc9/0x39c [i915]
     RSP <ffff880114927cc8>
    CR2: 0000000000000058
    
    References:
    
      Bug 28811 - [page-flipping] GPU hang when modeset after unplugging
                  another monitor (under compiz)
      https://bugs.freedesktop.org/show_bug.cgi?id=28811
    
    
    
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    90c1efdd