• C
    drm: Take lock around probes for drm_fb_helper_hotplug_event · 752d2635
    Chris Wilson 提交于
    We need to hold the dev->mode_config.mutex whilst detecting the output
    status. But we also need to drop it for the call into
    drm_fb_helper_single_fb_probe(), which indirectly acquires the lock when
    attaching the fbcon.
    
    Failure to do so exposes a race with normal output probing. Detected by
    adding some warnings that the mutex is held to the backend detect routines:
    
    [   17.772456] WARNING: at drivers/gpu/drm/i915/intel_crt.c:471 intel_crt_detect+0x3e/0x373 [i915]()
    [   17.772458] Hardware name: Latitude E6400
    [   17.772460] Modules linked in: ....
    [   17.772582] Pid: 11, comm: kworker/0:1 Tainted: G        W 2.6.38.4-custom.2 #8
    [   17.772584] Call Trace:
    [   17.772591]  [<ffffffff81046af5>] ? warn_slowpath_common+0x78/0x8c
    [   17.772603]  [<ffffffffa03f3e5c>] ? intel_crt_detect+0x3e/0x373 [i915]
    [   17.772612]  [<ffffffffa0355d49>] ?  drm_helper_probe_single_connector_modes+0xbf/0x2af [drm_kms_helper]
    [   17.772619]  [<ffffffffa03534d5>] ?  drm_fb_helper_probe_connector_modes+0x39/0x4d [drm_kms_helper]
    [   17.772625]  [<ffffffffa0354760>] ?  drm_fb_helper_hotplug_event+0xa5/0xc3 [drm_kms_helper]
    [   17.772633]  [<ffffffffa035577f>] ? output_poll_execute+0x146/0x17c [drm_kms_helper]
    [   17.772638]  [<ffffffff81193c01>] ? cfq_init_queue+0x247/0x345
    [   17.772644]  [<ffffffffa0355639>] ? output_poll_execute+0x0/0x17c [drm_kms_helper]
    [   17.772648]  [<ffffffff8105b540>] ? process_one_work+0x193/0x28e
    [   17.772652]  [<ffffffff8105c6bc>] ? worker_thread+0xef/0x172
    [   17.772655]  [<ffffffff8105c5cd>] ? worker_thread+0x0/0x172
    [   17.772658]  [<ffffffff8105c5cd>] ? worker_thread+0x0/0x172
    [   17.772663]  [<ffffffff8105f767>] ? kthread+0x7a/0x82
    [   17.772668]  [<ffffffff8100a724>] ? kernel_thread_helper+0x4/0x10
    [   17.772671]  [<ffffffff8105f6ed>] ? kthread+0x0/0x82
    [   17.772674]  [<ffffffff8100a720>] ? kernel_thread_helper+0x0/0x10
    Reported-by: NFrederik Himpe <fhimpe@telenet.be>
    References: https://bugs.freedesktop.org/show_bug.cgi?id=36394Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: NDave Airlie <airlied@redhat.com>
    752d2635
drm_fb_helper.h 4.4 KB