Comment 9 for bug 817282

Revision history for this message
Fang Bao (fang-bao) wrote :

Is there any solution for PVR GPU's deadlock issue?

I am troubled by this issue from linaro ubuntu 11.07 to latest lianro ubuntu 11.11 on Pandaborad.

The video output of Pandaboard always worked incorrectly.

[ 37.492187] =============================================
[ 37.499450] [ INFO: possible recursive locking detected ]
[ 37.505157] 3.1.0-1402-linaro-lt-omap #5~oneiric1-Ubuntu
[ 37.510742] ---------------------------------------------
[ 37.516418] Xorg/1686 is trying to acquire lock:
[ 37.521270] (psPVRSRVMutex){+.+.+.}, at: [<bf06ec34>] LinuxLockMutex+0x1c/0x20 [omapdrm_pvr]
[ 37.530334]
[ 37.530334] but task is already holding lock:
[ 37.536468] (psPVRSRVMutex){+.+.+.}, at: [<bf06ec34>] LinuxLockMutex+0x1c/0x20 [omapdrm_pvr]
[ 37.545471]
[ 37.545471] other info that might help us debug this:
[ 37.552337] Possible unsafe locking scenario:
[ 37.552368]
[ 37.558593] CPU0
[ 37.561157] ----
[ 37.563720] lock(psPVRSRVMutex);
[ 37.567321] lock(psPVRSRVMutex);
[ 37.570892]
[ 37.570922] *** DEADLOCK ***
[ 37.570922]
[ 37.577148] May be due to missing lock nesting notation
[ 37.577148]
[ 37.584320] 2 locks held by Xorg/1686:
[ 37.588256] #0: (drm_global_mutex){+.+.+.}, at: [<c03d0b84>] drm_release+0x34/0x38c
[ 37.596557] #1: (psPVRSRVMutex){+.+.+.}, at: [<bf06ec34>] LinuxLockMutex+0x1c/0x20 [omapdrm_pvr]
[ 37.606018]
[ 37.606018] stack backtrace:
[ 37.610626] [<c001a950>] (unwind_backtrace+0x0/0xec) from [<c06e3988>] (dump_stack+0x20/0x24)
[ 37.619628] [<c06e3988>] (dump_stack+0x20/0x24) from [<c008e3f8>] (print_deadlock_bug+0xb8/0xe4)
[ 37.628906] [<c008e3f8>] (print_deadlock_bug+0xb8/0xe4) from [<c008e584>] (check_deadlock.isra.19+0x160/0x18c)
[ 37.639434] [<c008e584>] (check_deadlock.isra.19+0x160/0x18c) from [<c008fc74>] (validate_chain.isra.23+0x4cc/0x51c)
[ 37.650543] [<c008fc74>] (validate_chain.isra.23+0x4cc/0x51c) from [<c00909e0>] (__lock_acquire+0x6a0/0x76c)
[ 37.660888] [<c00909e0>] (__lock_acquire+0x6a0/0x76c) from [<c00910ec>] (lock_acquire+0x138/0x15c)
[ 37.670349] [<c00910ec>] (lock_acquire+0x138/0x15c) from [<c0704f10>] (mutex_lock_nested+0x54/0x38c)
[ 37.679962] [<c0704f10>] (mutex_lock_nested+0x54/0x38c) from [<bf06ec34>] (LinuxLockMutex+0x1c/0x20 [omapdrm_pvr])
[ 37.690917] [<bf06ec34>] (LinuxLockMutex+0x1c/0x20 [omapdrm_pvr]) from [<bf06ccbc>] (LinuxMMapPerProcessDisconnect+0x28/0x78 [omapd)
[ 37.704132] [<bf06ccbc>] (LinuxMMapPerProcessDisconnect+0x28/0x78 [omapdrm_pvr]) from [<bf06f130>] (OSPerProcessPrivateDataDeInit+0)
[ 37.718719] [<bf06f130>] (OSPerProcessPrivateDataDeInit+0x20/0x44 [omapdrm_pvr]) from [<bf07e610>] (BridgedDispatchKM+0x1f8/0x228 [)
[ 37.732391] [<bf07e610>] (BridgedDispatchKM+0x1f8/0x228 [omapdrm_pvr]) from [<bf07e804>] (PVRSRVPerProcessDataDisconnect+0x50/0x68 )
[ 37.746154] [<bf07e804>] (PVRSRVPerProcessDataDisconnect+0x50/0x68 [omapdrm_pvr]) from [<bf076d78>] (PVRSRVProcessDisconnect+0x18/0)
[ 37.760284] [<bf076d78>] (PVRSRVProcessDisconnect+0x18/0x1c [omapdrm_pvr]) from [<bf06d028>] (PVRSRVRelease+0x5c/0x94 [omapdrm_pvr])
[ 37.772827] [<bf06d028>] (PVRSRVRelease+0x5c/0x94 [omapdrm_pvr]) from [<bf085c98>] (PVRSRVDrmRelease+0x24/0x2c [omapdrm_pvr])
[ 37.784759] [<bf085c98>] (PVRSRVDrmRelease+0x24/0x2c [omapdrm_pvr]) from [<c05006dc>] (dev_postclose+0x58/0x84)
[ 37.795410] [<c05006dc>] (dev_postclose+0x58/0x84) from [<c03d0e40>] (drm_release+0x2f0/0x38c)
[ 37.804504] [<c03d0e40>] (drm_release+0x2f0/0x38c) from [<c0103114>] (__fput+0xf8/0x1bc)
[ 37.813018] [<c0103114>] (__fput+0xf8/0x1bc) from [<c0103218>] (fput+0x40/0x44)
[ 37.820709] [<c0103218>] (fput+0x40/0x44) from [<c0100308>] (filp_close+0x80/0x8c)
[ 37.828704] [<c0100308>] (filp_close+0x80/0x8c) from [<c01003c8>] (sys_close+0xb4/0xf4)
[ 37.837127] [<c01003c8>] (sys_close+0xb4/0xf4) from [<c00130e0>] (ret_fast_syscall+0x0/0x3c)