diff options
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.patch | 153 |
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 @@ | |||
1 | From cf5156ff82e14fe01a194f9fa9a9adc528ac72f0 Mon Sep 17 00:00:00 2001 | ||
2 | From: Darren Etheridge <detheridge@ti.com> | ||
3 | Date: Tue, 29 Jul 2014 15:39:56 -0500 | ||
4 | Subject: [PATCH 3/4] SGX: displayclass: am335x, am437x - fix mutex deadlock | ||
5 | warning | ||
6 | |||
7 | Rearrange the locking semantics in the Unblank screen function to | ||
8 | remove the kernel warning about a possible deadlock scenario. | ||
9 | |||
10 | The 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>] | ||
17 | OMAPLFBUnblankDisplay+0x24/0xbc [omaplfb] | ||
18 | [ 2976.203062] | ||
19 | [ 2976.203062] but task is already holding lock: | ||
20 | [ 2976.203087] (&fb_info->lock){+.+.+.}, at: [<c0312358>] | ||
21 | lock_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>] | ||
72 | PVRSRV_BridgeDispatchKM+0x24/0x204 [pvrsrvkm] | ||
73 | [ 2976.204240] #1: (&fb_info->lock){+.+.+.}, at: [<c0312358>] | ||
74 | lock_fb_info+0x18/0x3c | ||
75 | |||
76 | Signed-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 | |||
82 | diff --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 | ||
83 | index 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 | ||
117 | diff --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 | ||
118 | index 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 | -- | ||
152 | 1.9.1 | ||
153 | |||