summaryrefslogtreecommitdiffstats
path: root/recipes-bsp/powervr-drivers/omap3-sgx-modules-5.01.01.01/0003-SGX-displayclass-am335x-am437x-fix-mutex-deadlock-wa.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-bsp/powervr-drivers/omap3-sgx-modules-5.01.01.01/0003-SGX-displayclass-am335x-am437x-fix-mutex-deadlock-wa.patch')
-rw-r--r--recipes-bsp/powervr-drivers/omap3-sgx-modules-5.01.01.01/0003-SGX-displayclass-am335x-am437x-fix-mutex-deadlock-wa.patch153
1 files changed, 153 insertions, 0 deletions
diff --git a/recipes-bsp/powervr-drivers/omap3-sgx-modules-5.01.01.01/0003-SGX-displayclass-am335x-am437x-fix-mutex-deadlock-wa.patch b/recipes-bsp/powervr-drivers/omap3-sgx-modules-5.01.01.01/0003-SGX-displayclass-am335x-am437x-fix-mutex-deadlock-wa.patch
new file mode 100644
index 00000000..0e2902d3
--- /dev/null
+++ b/recipes-bsp/powervr-drivers/omap3-sgx-modules-5.01.01.01/0003-SGX-displayclass-am335x-am437x-fix-mutex-deadlock-wa.patch
@@ -0,0 +1,153 @@
1From cf5156ff82e14fe01a194f9fa9a9adc528ac72f0 Mon Sep 17 00:00:00 2001
2From: Darren Etheridge <detheridge@ti.com>
3Date: Tue, 29 Jul 2014 15:39:56 -0500
4Subject: [PATCH 3/4] SGX: displayclass: am335x, am437x - fix mutex deadlock
5 warning
6
7Rearrange the locking semantics in the Unblank screen function to
8remove the kernel warning about a possible deadlock scenario.
9
10The warning presents itself on the console like this:
11[ 2976.202979] ======================================================
12[ 2976.202983] [ INFO: possible circular locking dependency detected ]
13[ 2976.202994] 3.14.11-00997-gb20d0ac-dirty #53 Tainted: G O
14[ 2976.202997] -------------------------------------------------------
15[ 2976.203005] OGLES2Chameleon/1203 is trying to acquire lock:
16[ 2976.203058] (console_lock){+.+.+.}, at: [<bf07a310>]
17OMAPLFBUnblankDisplay+0x24/0xbc [omaplfb]
18[ 2976.203062]
19[ 2976.203062] but task is already holding lock:
20[ 2976.203087] (&fb_info->lock){+.+.+.}, at: [<c0312358>]
21lock_fb_info+0x18/0x3c
22[ 2976.203090]
23[ 2976.203090] which lock already depends on the new lock.
24[ 2976.203090]
25[ 2976.203093]
26[ 2976.203093] the existing dependency chain (in reverse order) is:
27[ 2976.203101]
28[ 2976.203101] -> #1 (&fb_info->lock){+.+.+.}:
29[ 2976.203112] [<c0312358>] lock_fb_info+0x18/0x3c
30[ 2976.203124] [<c0313a7c>] register_framebuffer+0x174/0x26c
31[ 2976.203146] [<c033c314>] omapfb_create_framebuffers+0x48c/0x7ac
32[ 2976.203157] [<c033d3c4>] omapfb_probe+0x4d4/0x848
33[ 2976.203170] [<c0381cc8>] platform_drv_probe+0x18/0x48
34[ 2976.203189] [<c038096c>] driver_probe_device+0x10c/0x238
35[ 2976.203199] [<c0380b2c>] __driver_attach+0x94/0x98
36[ 2976.203208] [<c037f0f0>] bus_for_each_dev+0x54/0x88
37[ 2976.203216] [<c03800f0>] bus_add_driver+0xd8/0x1d8
38[ 2976.203223] [<c038115c>] driver_register+0x78/0xf4
39[ 2976.203234] [<c0008968>] do_one_initcall+0xe4/0x144
40[ 2976.203250] [<c07d3c18>] kernel_init_freeable+0xfc/0x1cc
41[ 2976.203261] [<c0563260>] kernel_init+0x8/0xec
42[ 2976.203275] [<c000e648>] ret_from_fork+0x14/0x2c
43[ 2976.203284]
44[ 2976.203284] -> #0 (console_lock){+.+.+.}:
45[ 2976.203301] [<c008bc00>] console_lock+0x4c/0x60
46[ 2976.203328] [<bf07a310>] OMAPLFBUnblankDisplay+0x24/0xbc [omaplfb]
47[ 2976.203340] [<bf0797f4>] OpenDCDevice+0x60/0x78 [omaplfb]
48[ 2976.203459] [<bf041ac0>] PVRSRVOpenDCDeviceKM+0xec/0x178 [pvrsrvkm]
49[ 2976.203654] [<bf05645c>] PVRSRVOpenDCDeviceBW+0x6c/0xac [pvrsrvkm]
50[ 2976.203811] [<bf056d10>] BridgedDispatchKM+0xf4/0x14c [pvrsrvkm]
51[ 2976.203966] [<bf04f304>] PVRSRV_BridgeDispatchKM+0xf0/0x204
52[pvrsrvkm]
53[ 2976.203987] [<c0129500>] do_vfs_ioctl+0x78/0x61c
54[ 2976.203997] [<c0129b08>] SyS_ioctl+0x64/0x74
55[ 2976.204013] [<c000e580>] ret_fast_syscall+0x0/0x48
56[ 2976.204016]
57[ 2976.204016] other info that might help us debug this:
58[ 2976.204016]
59[ 2976.204019] Possible unsafe locking scenario:
60[ 2976.204019]
61[ 2976.204022] CPU0 CPU1
62[ 2976.204024] ---- ----
63[ 2976.204030] lock(&fb_info->lock);
64[ 2976.204036] lock(console_lock);
65[ 2976.204041] lock(&fb_info->lock);
66[ 2976.204046] lock(console_lock);
67[ 2976.204048]
68[ 2976.204048] *** DEADLOCK ***
69[ 2976.204048]
70[ 2976.204055] 2 locks held by OGLES2Chameleon/1203:
71[ 2976.204217] #0: (psPVRSRVMutex#2/1){+.+.+.}, at: [<bf04f238>]
72PVRSRV_BridgeDispatchKM+0x24/0x204 [pvrsrvkm]
73[ 2976.204240] #1: (&fb_info->lock){+.+.+.}, at: [<c0312358>]
74lock_fb_info+0x18/0x3c
75
76Signed-off-by: Darren Etheridge <detheridge@ti.com>
77---
78 GFX_Linux_KM/services4/3rdparty/dc_ti335x_linux/omaplfb_linux.c | 8 +++++---
79 GFX_Linux_KM/services4/3rdparty/dc_ti43xx_linux/omaplfb_linux.c | 7 +++++--
80 2 files changed, 10 insertions(+), 5 deletions(-)
81
82diff --git a/GFX_Linux_KM/services4/3rdparty/dc_ti335x_linux/omaplfb_linux.c b/GFX_Linux_KM/services4/3rdparty/dc_ti335x_linux/omaplfb_linux.c
83index 3857b95..a5cc7d0 100644
84--- a/GFX_Linux_KM/services4/3rdparty/dc_ti335x_linux/omaplfb_linux.c
85+++ b/GFX_Linux_KM/services4/3rdparty/dc_ti335x_linux/omaplfb_linux.c
86@@ -812,10 +812,13 @@ static OMAPLFB_ERROR OMAPLFBBlankOrUnblankDisplay(OMAPLFB_DEVINFO *psDevInfo, IM
87 {
88 #ifdef FBDEV_PRESENT
89 int res;
90+
91+ OMAPLFB_CONSOLE_LOCK();
92 if (!lock_fb_info(psDevInfo->psLINFBInfo))
93 {
94 printk(KERN_ERR DRIVER_PREFIX
95 ": %s: Device %u: Couldn't lock FB info\n", __FUNCTION__, psDevInfo->uiFBDevID);
96+ OMAPLFB_CONSOLE_UNLOCK();
97 return (OMAPLFB_ERROR_GENERIC);
98 }
99
100@@ -825,14 +828,13 @@ static OMAPLFB_ERROR OMAPLFBBlankOrUnblankDisplay(OMAPLFB_DEVINFO *psDevInfo, IM
101 * notification.
102 */
103
104-
105- OMAPLFB_CONSOLE_LOCK();
106 psDevInfo->psLINFBInfo->flags |= FBINFO_MISC_USEREVENT;
107 res = fb_blank(psDevInfo->psLINFBInfo, bBlank ? 1 : 0);
108 psDevInfo->psLINFBInfo->flags &= ~FBINFO_MISC_USEREVENT;
109
110- OMAPLFB_CONSOLE_UNLOCK();
111 unlock_fb_info(psDevInfo->psLINFBInfo);
112+ OMAPLFB_CONSOLE_UNLOCK();
113+
114 if (res != 0 && res != -EINVAL)
115 {
116 printk(KERN_ERR DRIVER_PREFIX
117diff --git a/GFX_Linux_KM/services4/3rdparty/dc_ti43xx_linux/omaplfb_linux.c b/GFX_Linux_KM/services4/3rdparty/dc_ti43xx_linux/omaplfb_linux.c
118index c79dbd0..58b8640 100755
119--- a/GFX_Linux_KM/services4/3rdparty/dc_ti43xx_linux/omaplfb_linux.c
120+++ b/GFX_Linux_KM/services4/3rdparty/dc_ti43xx_linux/omaplfb_linux.c
121@@ -948,10 +948,13 @@ static OMAPLFB_ERROR OMAPLFBBlankOrUnblankDisplay(OMAPLFB_DEVINFO *psDevInfo, IM
122 {
123 #ifdef FBDEV_PRESENT
124 int res;
125+
126+ OMAPLFB_CONSOLE_LOCK();
127 if (!lock_fb_info(psDevInfo->psLINFBInfo))
128 {
129 printk(KERN_ERR DRIVER_PREFIX
130 ": %s: Device %u: Couldn't lock FB info\n", __FUNCTION__, psDevInfo->uiFBDevID);
131+ OMAPLFB_CONSOLE_UNLOCK();
132 return (OMAPLFB_ERROR_GENERIC);
133 }
134
135@@ -961,13 +964,13 @@ static OMAPLFB_ERROR OMAPLFBBlankOrUnblankDisplay(OMAPLFB_DEVINFO *psDevInfo, IM
136 * notification.
137 */
138
139- OMAPLFB_CONSOLE_LOCK();
140 psDevInfo->psLINFBInfo->flags |= FBINFO_MISC_USEREVENT;
141 res = fb_blank(psDevInfo->psLINFBInfo, bBlank ? 1 : 0);
142 psDevInfo->psLINFBInfo->flags &= ~FBINFO_MISC_USEREVENT;
143
144- OMAPLFB_CONSOLE_UNLOCK();
145 unlock_fb_info(psDevInfo->psLINFBInfo);
146+ OMAPLFB_CONSOLE_UNLOCK();
147+
148 if (res != 0 && res != -EINVAL)
149 {
150 printk(KERN_ERR DRIVER_PREFIX
151--
1521.9.1
153