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

Liviu Dudau liviu at dudau.co.uk
Fri Jun 23 12:34:26 UTC 2017


On Fri, Jun 23, 2017 at 09:38:49AM +0200, Daniel Vetter wrote:
> 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.

This is what I've got with lockdep debugging enabled. Not sure it is the same
thing as the previous WARN, the stack trace doesn't match the one above (but I still
get that one after 120s).

[   16.536405] [drm] found ARM HDLCD version r0p0                                                                                                                                                     
[   16.670859] tda998x 0-0071: found TDA19988                                                                                                                                                         
[   16.677173] hdlcd 7ff50000.hdlcd: bound 0-0071 (ops tda998x_ops [tda998x])                                                                                                                         
[   16.686092] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).                                                                                                                            
[   16.692783] [drm] No driver support for vblank timestamp query.                                                                                                                                    
[   16.699518] [drm] No outputs connected, deferring setup                                                                                                                                            
[   16.704844]                                                                                                                                                                                        
[   16.706322] =====================================                                                                                                                                                  
[   16.710981] WARNING: bad unlock balance detected!                                                                                                                                                  
[   16.715643] 4.12.0-rc5-01275-g1e2237a19156 #3 Not tainted                                                                                                                                          
[   16.720992] -------------------------------------                                                                                                                                                  
[   16.725652] systemd-udevd/176 is trying to release lock (&dev->mode_config.mutex) at:                                                                                                              
[   16.733466] [<ffff000000a3363c>] __drm_fb_helper_initial_config+0x11c/0x570 [drm_kms_helper]                                                                                                       
[   16.741830] but there are no more locks to release!                                                                                                                                                
[   16.746661]                                                                                                                                                                                        
[   16.746661] other info that might help us debug this:                                                                                                                                              
[   16.753135] 4 locks held by systemd-udevd/176:                                                                                                                                                     
[   16.757535]  #0:  (&dev->mutex){......}, at: [<ffff00000854a134>] __driver_attach+0x4c/0xc8                                                                                                        
[   16.774279]  #1:  (&dev->mutex){......}, at: [<ffff00000854a144>] __driver_attach+0x5c/0xc8                                                                                                        
[   16.782571]  #2:  (component_mutex){+.+.+.}, at: [<ffff000008544044>] component_master_add_with_match+0x84/0xf8                                                                                    
[   16.792585]  #3:  (&helper->lock){+.+.+.}, at: [<ffff000000a33ac4>] drm_fb_helper_initial_config+0x34/0x68 [drm_kms_helper]                                                                        
[   16.803669]                                                                                                                                                                                        
[   16.803669] stack backtrace:                                                                                                                                                                       
[   16.807992] CPU: 2 PID: 176 Comm: systemd-udevd Not tainted 4.12.0-rc5-01275-g1e2237a19156 #3                                                                                                      
[   16.816442] Hardware name: ARM Juno development board (r0) (DT)                                                                                                                                    
[   16.822306] Call trace:                                                                                                                                                                            
[   16.824733] [<ffff000008088fc8>] dump_backtrace+0x0/0x238                                                                                                                                          
[   16.830083] [<ffff0000080892cc>] show_stack+0x14/0x20                                                                                                                                              
[   16.835091] [<ffff0000083e7be0>] dump_stack+0xbc/0xf4                                                                                                                                              
[   16.840097] [<ffff00000810d260>] print_unlock_imbalance_bug+0xe8/0xf0                                                                                                                              
[   16.846481] [<ffff00000811170c>] lock_release+0x174/0x368                                                                                                                                          
[   16.851832] [<ffff0000088f6eb4>] __mutex_unlock_slowpath+0x44/0x2b0                                                                                                                                
[   16.858041] [<ffff0000088f7130>] mutex_unlock+0x10/0x18                                                                                                                                            
[   16.863256] [<ffff000000a3363c>] __drm_fb_helper_initial_config+0x11c/0x570 [drm_kms_helper]                                                                                                       
[   16.871661] [<ffff000000a33ad0>] drm_fb_helper_initial_config+0x40/0x68 [drm_kms_helper]                                                                                                           
[   16.871699] [<ffff000000a34510>] drm_fbdev_cma_init_with_funcs+0x88/0x158 [drm_kms_helper]                                                                                                         
[   16.871736] [<ffff000000a345f0>] drm_fbdev_cma_init+0x10/0x20 [drm_kms_helper]                                                                                                                     
[   16.871748] [<ffff000000b5e708>] hdlcd_drm_bind+0x1f0/0x488 [hdlcd]                                                                                                                                
[   16.871752] [<ffff000008543e00>] try_to_bring_up_master+0x178/0x1d8                                                                                                                                
[   16.871756] [<ffff000008544064>] component_master_add_with_match+0xa4/0xf8                                                                                                                         
[   16.871765] [<ffff000000b5e4f0>] hdlcd_probe+0x50/0x78 [hdlcd]                                                                                                                                     
[   16.871770] [<ffff00000854bda8>] platform_drv_probe+0x58/0xb8                                                                                                                                      
[   16.871775] [<ffff00000854a03c>] driver_probe_device+0x224/0x2d0                                                                                                                                   
[   16.871779] [<ffff00000854a1ac>] __driver_attach+0xc4/0xc8                                                                                                                                         
[   16.871783] [<ffff00000854806c>] bus_for_each_dev+0x4c/0x98                                                                                                                                        
[   16.871787] [<ffff000008549948>] driver_attach+0x20/0x28                                                                                                                                           
[   16.871791] [<ffff000008549518>] bus_add_driver+0x1c0/0x230                                                                                                                                        
[   16.871794] [<ffff00000854ab60>] driver_register+0x60/0xf8                                                                                                                                         
[   16.871799] [<ffff00000854bcf8>] __platform_driver_register+0x40/0x48                                                                                                                              
[   16.871807] [<ffff000000b6a018>] hdlcd_platform_driver_init+0x18/0x1000 [hdlcd]                                                                                                                    
[   16.871812] [<ffff000008083140>] do_one_initcall+0x38/0x128                                                                                                                                        
[   16.871818] [<ffff000008195c1c>] do_init_module+0x58/0x1bc                                                                                                                                         
[   16.871823] [<ffff00000815093c>] load_module+0x1e94/0x2168                                                                                                                                         
[   16.871827] [<ffff000008150eb0>] SyS_finit_module+0xa8/0xc0                                                                                                                                        
[   16.871831] [<ffff000008082fcc>] __sys_trace_return+0x0/0x4                                                                                                                                        
[   16.872439] [drm] Initialized hdlcd 1.0.0 20151021 for 7ff50000.hdlcd on minor 0                                                                                                                   
[   16.872781] mali-dp 6f200000.malidp: assigned reserved memory node framebuffer at 60000000                                                                                                            
[   16.872859] [drm] found ARM Mali-DP650 version r0p0                                                                                                                                                
[   17.038821] tda998x 1-0070: found TDA19988                                                                                                                                                         
[   17.056417] mali-dp 6f200000.malidp: bound 1-0070 (ops tda998x_ops [tda998x])                                                                                                                      
[   17.063827] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).                                                                                                                            
[   17.070435] [drm] No driver support for vblank timestamp query.                                                                                                                                    
[   17.079290] [drm] No outputs connected, deferring setup                                                                                                                                            
[   17.085265] [drm] Initialized mali-dp 1.0.0 20160106 for 6f200000.malidp on minor 1                                                                                                                
[   17.092701] random: crng init done                                                                                                                                                                 
[   17.096720] [drm] found ARM HDLCD version r0p0                                                                                                                                                     
[   17.227312] tda998x 0-0070: found TDA19988                                                                                                                                                         
[   17.233258] hdlcd 7ff60000.hdlcd: bound 0-0070 (ops tda998x_ops [tda998x])                                                                                                                         
[   17.240152] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).                                                                                                                            
[   17.246781] [drm] No driver support for vblank timestamp query.                                                                                                                                    
[   17.355359] Console: switching to colour frame buffer device 240x75                                                                                                                                
[   17.417368] hdlcd 7ff60000.hdlcd: fb0:  frame buffer device                                                                                                                                        
[   17.436616] [drm] Initialized hdlcd 1.0.0 20151021 for 7ff60000.hdlcd on minor 2

Best regards,
Liviu

> 
> 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