[PATCH 00/12] fbdev helper locking rework and deferred setup

Daniel Vetter daniel.vetter at ffwll.ch
Fri Jun 23 07:38:49 UTC 2017


On Thu, Jun 22, 2017 at 4:54 PM, Liviu Dudau <liviu at dudau.co.uk> wrote:
> On Wed, Jun 21, 2017 at 08:28:03PM +0200, Daniel Vetter wrote:
>> Hi all,
>>
>> This is Thierry's deferred fbdev setup series, with the locking rework almost
>> entirely redone. The much wider scope is to get rid of drm_modeset_lock_all
>> calls for atomic drivers and remove users of the fairly nasty
>> mode_config->acquire_ctx hack, which breaks when doing multiple atomic commits.
>>
>> Testing&review very much appreciated, especially from people who care about the
>> various fbdev emulation things and the deferred setup stuff.
>
> Tested on my Juno dev board on a bit of a convoluted setup: the dev board has
> built into the SoC 2x HDLCD instances and I also have an FPGA daughter board
> with Mali DP 650 running again on a 2x configuration. On boot I'm getting this
> warning:
>
> juno-r0-ld login: [  241.986785] INFO: task kworker/3:1:80 blocked for more than 120 seconds.
> [  241.993652]       Not tainted 4.12.0-rc5-01275-g1e2237a19156 #2
> [  241.999689] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
> [  242.007660] kworker/3:1     D    0    80      2 0x00000000
> [  242.013340] Workqueue: events output_poll_execute [drm_kms_helper]
> [  242.019637] Call trace:
> [  242.022132] [<ffff000008085798>] __switch_to+0x98/0xb0
> [  242.027373] [<ffff00000886b3d4>] __schedule+0x19c/0x5e8
> [  242.032699] [<ffff00000886b858>] schedule+0x38/0xa0
> [  242.037672] [<ffff00000886bd38>] schedule_preempt_disabled+0x20/0x38
> [  242.044144] [<ffff00000886c968>] __mutex_lock.isra.0+0x140/0x530
> [  242.050262] [<ffff00000886cd68>] __mutex_lock_slowpath+0x10/0x18
> [  242.056379] [<ffff00000886cda0>] mutex_lock+0x30/0x38
> [  242.061597] [<ffff000000929660>] drm_fb_helper_hotplug_event.part.22+0x20/0x100 [drm_kms_helper]
> [  242.070611] [<ffff000000929764>] drm_fb_helper_hotplug_event+0x24/0x38 [drm_kms_helper]
> [  242.078828] [<ffff00000092a360>] drm_fbdev_cma_hotplug_event+0x10/0x20 [drm_kms_helper]
> [  242.086984] [<ffff000000b44494>] hdlcd_fb_output_poll_changed+0x14/0x20 [hdlcd]
> [  242.094495] [<ffff000000919e90>] drm_kms_helper_hotplug_event+0x28/0x38 [drm_kms_helper]
> [  242.102801] [<ffff00000091a090>] output_poll_execute+0x1a0/0x1f0 [drm_kms_helper]
> [  242.110424] [<ffff0000080d7fd4>] process_one_work+0x1d4/0x330
> [  242.116280] [<ffff0000080d8178>] worker_thread+0x48/0x468
> [  242.121781] [<ffff0000080ddf64>] kthread+0x12c/0x130
> [  242.126839] [<ffff000008082ec0>] ret_from_fork+0x10/0x50
> [  242.132252] INFO: task kworker/5:1:82 blocked for more than 120 seconds.
> [  242.139074]       Not tainted 4.12.0-rc5-01275-g1e2237a19156 #2
> [  242.145099] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
> [  242.153064] kworker/5:1     D    0    82      2 0x00000000
> [  242.158724] Workqueue: events output_poll_execute [drm_kms_helper]
> [  242.165019] Call trace:
> [  242.167519] [<ffff000008085798>] __switch_to+0x98/0xb0
> [  242.172755] [<ffff00000886b3d4>] __schedule+0x19c/0x5e8
> [  242.178079] [<ffff00000886b858>] schedule+0x38/0xa0
> [  242.183051] [<ffff00000886bd38>] schedule_preempt_disabled+0x20/0x38
> [  242.189520] [<ffff00000886c968>] __mutex_lock.isra.0+0x140/0x530
> [  242.195639] [<ffff00000886cd68>] __mutex_lock_slowpath+0x10/0x18
> [  242.201756] [<ffff00000886cda0>] mutex_lock+0x30/0x38
> [  242.206972] [<ffff000000929660>] drm_fb_helper_hotplug_event.part.22+0x20/0x100 [drm_kms_helper]
> [  242.215984] [<ffff000000929764>] drm_fb_helper_hotplug_event+0x24/0x38 [drm_kms_helper]
> [  242.224201] [<ffff00000092a360>] drm_fbdev_cma_hotplug_event+0x10/0x20 [drm_kms_helper]
> [  242.232367] [<ffff000000b543a4>] malidp_output_poll_changed+0x14/0x20 [mali_dp]
> [  242.239880] [<ffff000000919e90>] drm_kms_helper_hotplug_event+0x28/0x38 [drm_kms_helper]
> [  242.248188] [<ffff00000091a090>] output_poll_execute+0x1a0/0x1f0 [drm_kms_helper]
> [  242.255808] [<ffff0000080d7fd4>] process_one_work+0x1d4/0x330
> [  242.261664] [<ffff0000080d8178>] worker_thread+0x48/0x468
> [  242.267196] [<ffff0000080ddf64>] kthread+0x12c/0x130
> [  242.272312] [<ffff000008082ec0>] ret_from_fork+0x10/0x50
>
> Each hardware type has only one instance of each driver being connected to an
> output, HDLCD is connected to an HDMI monitor that is not "active" (i.e.
> input is switched to DP connection), while the Mali DP instance is connected to
> a monitor.
>
> Suggestions on where to look next are welcome.

I'm betting I've fumbled an unlock path somewhere and now your stuck
trying to get a lock you can't get. Can you pls recompile with lockdep
enabled and repro? That will directly tell us where and what went
wrong.

Thanks for testing.
-Daniel

>
> Best regards,
> Liviu
>
>>
>> Thanks, Daniel
>>
>> Daniel Vetter (7):
>>   drm/i915: Drop FBDEV #ifdev in mst code
>>   drm/fb-helper: Push locking in fb_is_bound
>>   drm/fb-helper: Drop locking from the vsync wait ioctl code
>>   drm/fb-helper: Push locking into pan_display_atomic|legacy
>>   drm/fb-helper: Push locking into restore_fbdev_mode_atomic|legacy
>>   drm/fb-helper: Stop using mode_config.mutex for internals
>>   drm/fb-helper: Split dpms handling into legacy and atomic paths
>>
>> Thierry Reding (5):
>>   drm/fb-helper: Push down modeset lock into FB helpers
>>   drm/fb-helper: Add top-level lock
>>   drm/fb-helper: Support deferred setup
>>   drm/exynos: Remove custom FB helper deferred setup
>>   drm/hisilicon: Remove custom FB helper deferred setup
>>
>>  drivers/gpu/drm/drm_fb_helper.c                 | 361 ++++++++++++++++++------
>>  drivers/gpu/drm/drm_vblank.c                    |   2 +-
>>  drivers/gpu/drm/exynos/exynos_drm_drv.c         |   6 +-
>>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c       |  26 +-
>>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c |  21 +-
>>  drivers/gpu/drm/i915/intel_dp_mst.c             |  43 +--
>>  drivers/gpu/drm/radeon/radeon_dp_mst.c          |   7 -
>>  include/drm/drm_fb_helper.h                     |  42 ++-
>>  8 files changed, 336 insertions(+), 172 deletions(-)
>>
>> --
>> 2.11.0
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> --
>    _
>  _|_|_
>  ('_')
>  (⊃  )⊃
>  |_|_|



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list