[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