Messages in this thread | | | Subject | Re: [PATCH] debugobjects: Move printk out of db lock critical sections | From | Waiman Long <> | Date | Thu, 13 Dec 2018 14:59:14 -0500 |
| |
On 12/12/2018 09:03 PM, Sergey Senozhatsky wrote: > On (12/12/18 17:28), Waiman Long wrote: >> The db->lock is a raw spinlock and so the lock hold time is supposed >> to be short. This will not be the case when printk() is being involved >> in some of the critical sections. In order to avoid the long hold time, >> in case some messages need to be printed, the debug_object_is_on_stack() >> and debug_print_object() calls are now moved out of those critical >> sections. >> >> Holding the db->lock while calling printk() may lead to deadlock if >> printk() somehow requires the allocation/freeing of debug object that >> happens to be in the same hash bucket or a circular lock dependency >> warning from lockdep as reported in https://lkml.org/lkml/2018/12/11/143. >> >> [ 87.209665] WARNING: possible circular locking dependency detected >> [ 87.210547] 4.20.0-rc4-00057-gc96cf92 #1 Tainted: G W >> [ 87.211449] ------------------------------------------------------ >> [ 87.212405] getty/519 is trying to acquire lock: >> [ 87.213074] (____ptrval____) (&obj_hash[i].lock){-.-.}, at: debug_check_no_obj_freed+0xb4/0x302 >> [ 87.214343] >> [ 87.214343] but task is already holding lock: >> [ 87.215174] (____ptrval____) (&port_lock_key){-.-.}, at: uart_shutdown+0x3a3/0x4e2 >> [ 87.216260] >> [ 87.216260] which lock already depends on the new lock. >> >> This patch was also found to be able to fix a boot hanging problem >> when the initramfs image was switched on after a debugobjects splat >> from the EFI code. >> >> Signed-off-by: Waiman Long <longman@redhat.com> > The patch looks good to me. A bit curious if we need to also patch > the self-test part debugobjects - check_results(). That guy still > printk()-s under bucket ->lock. > > -ss
Yes, I should have changed those in the check_results() as well.
-Longman
| |