Uri Mashiach
9b2761cb72
wlcore/wl12xx: spi: fix oops on firmware load
The maximum chunks used by the function is
(SPI_AGGR_BUFFER_SIZE / WSPI_MAX_CHUNK_SIZE + 1).
The original commands array had space for
(SPI_AGGR_BUFFER_SIZE / WSPI_MAX_CHUNK_SIZE) commands.
When the last chunk is used (len > 4 * WSPI_MAX_CHUNK_SIZE), the last
command is stored outside the bounds of the commands array.
Oops 5 (page fault) is generated during current wl1271 firmware load
attempt:
root@debian-armhf:~# ifconfig wlan0 up
[ 294.312399] Unable to handle kernel paging request at virtual address
00203fc4
[ 294.320173] pgd = de528000
[ 294.323028] [00203fc4] *pgd=00000000
[ 294.326916] Internal error: Oops: 5 [#1] SMP ARM
[ 294.331789] Modules linked in: bnep rfcomm bluetooth ipv6 arc4 wl12xx
wlcore mac80211 musb_dsps cfg80211 musb_hdrc usbcore usb_common
wlcore_spi omap_rng rng_core musb_am335x omap_wdt cpufreq_dt thermal_sys
hwmon
[ 294.351838] CPU: 0 PID: 1827 Comm: ifconfig Not tainted
4.2.0-00002-g3e9ad27-dirty #78
[ 294.360154] Hardware name: Generic AM33XX (Flattened Device Tree)
[ 294.366557] task: dc9d6d40 ti: de550000 task.ti: de550000
[ 294.372236] PC is at __spi_validate+0xa8/0x2ac
[ 294.376902] LR is at __spi_sync+0x78/0x210
[ 294.381200] pc : [<c049c760>] lr : [<c049ebe0>] psr: 60000013
[ 294.381200] sp : de551998 ip : de5519d8 fp : 00200000
[ 294.393242] r10: de551c8c r9 : de5519d8 r8 : de3a9000
[ 294.398730] r7 : de3a9258 r6 : de3a9400 r5 : de551a48 r4 :
00203fbc
[ 294.405577] r3 : 00000000 r2 : 00000000 r1 : 00000000 r0 :
de3a9000
[ 294.412420] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM
Segment user
[ 294.419918] Control: 10c5387d Table: 9e528019 DAC: 00000015
[ 294.425954] Process ifconfig (pid: 1827, stack limit = 0xde550218)
[ 294.432437] Stack: (0xde551998 to 0xde552000)
...
[ 294.883613] [<c049c760>] (__spi_validate) from [<c049ebe0>]
(__spi_sync+0x78/0x210)
[ 294.891670] [<c049ebe0>] (__spi_sync) from [<bf036598>]
(wl12xx_spi_raw_write+0xfc/0x148 [wlcore_spi])
[ 294.901661] [<bf036598>] (wl12xx_spi_raw_write [wlcore_spi]) from
[<bf21c694>] (wlcore_boot_upload_firmware+0x1ec/0x458 [wlcore])
[ 294.914038] [<bf21c694>] (wlcore_boot_upload_firmware [wlcore]) from
[<bf24532c>] (wl12xx_boot+0xc10/0xfac [wl12xx])
[ 294.925161] [<bf24532c>] (wl12xx_boot [wl12xx]) from [<bf20d5cc>]
(wl1271_op_add_interface+0x5b0/0x910 [wlcore])
[ 294.936364] [<bf20d5cc>] (wl1271_op_add_interface [wlcore]) from
[<bf15c4ac>] (ieee80211_do_open+0x44c/0xf7c [mac80211])
[ 294.947963] [<bf15c4ac>] (ieee80211_do_open [mac80211]) from
[<c0537978>] (__dev_open+0xa8/0x110)
[ 294.957307] [<c0537978>] (__dev_open) from [<c0537bf8>]
(__dev_change_flags+0x88/0x148)
[ 294.965713] [<c0537bf8>] (__dev_change_flags) from [<c0537cd0>]
(dev_change_flags+0x18/0x48)
[ 294.974576] [<c0537cd0>] (dev_change_flags) from [<c05a55a0>]
(devinet_ioctl+0x6b4/0x7d0)
[ 294.983191] [<c05a55a0>] (devinet_ioctl) from [<c0517040>]
(sock_ioctl+0x1e4/0x2bc)
[ 294.991244] [<c0517040>] (sock_ioctl) from [<c017d378>]
(do_vfs_ioctl+0x420/0x6b0)
[ 294.999208] [<c017d378>] (do_vfs_ioctl) from [<c017d674>]
(SyS_ioctl+0x6c/0x7c)
[ 295.006880] [<c017d674>] (SyS_ioctl) from [<c000f4c0>]
(ret_fast_syscall+0x0/0x54)
[ 295.014835] Code: e1550004 e2444034 0a00007d e5953018 (e5942008)
[ 295.021544] ---[ end trace 66ed188198f4e24e ]---
Signed-off-by: Uri Mashiach <uri.mashiach@compulab.co.il>
Acked-by: Igor Grinberg <grinberg@compulab.co.il>
Cc: stable@vger.kernel.org
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2015-12-11 13:54:23 +02:00
..
2015-11-20 01:22:52 +01:00
2015-11-13 20:35:54 -08:00
2015-12-05 17:50:55 -05:00
2015-11-20 01:22:33 +01:00
2015-12-01 10:52:12 -07:00
2015-11-19 17:50:33 +01:00
2015-11-12 09:58:21 -08:00
2015-11-16 06:28:43 -06:00
2015-11-12 15:26:39 -08:00
2015-11-16 19:07:08 +01:00
2015-11-06 17:50:42 -08:00
2015-11-27 16:23:59 +01:00
2015-10-23 12:40:48 +02:00
2015-11-17 09:40:05 -08:00
2015-11-16 09:21:05 +05:30
2015-10-30 01:16:16 -04:00
2015-11-06 14:22:15 -08:00
2015-10-26 14:48:22 +00:00
2015-11-11 10:21:34 -08:00
2015-11-10 15:00:03 -08:00
2015-10-29 15:20:25 -07:00
2015-11-30 13:50:21 +01:00
2015-11-28 06:50:34 +10:00
2015-12-02 14:51:00 +01:00
2015-10-30 16:10:40 +01:00
2015-11-04 16:24:33 +01:00
2015-11-16 09:59:50 -08:00
2015-11-13 20:04:17 -08:00
2015-11-20 16:22:21 +01:00
2015-11-06 17:50:42 -08:00
2015-11-18 13:15:50 -08:00
2015-12-06 22:40:45 -05:00
2015-11-13 21:41:14 -08:00
2015-11-09 09:10:49 +01:00
2015-11-17 14:25:59 +01:00
2015-12-03 21:09:12 -05:00
2015-11-05 13:15:12 -08:00
2015-11-29 14:34:58 -07:00
2015-11-04 14:03:04 +05:30
2015-10-29 09:02:16 +09:00
2015-11-23 14:54:46 -05:00
2015-11-20 16:17:32 -08:00
2015-11-10 15:00:03 -08:00
2015-11-12 07:06:18 -05:00
2015-11-06 14:22:15 -08:00
2015-11-13 20:04:17 -08:00
2015-11-09 14:04:52 +01:00
2015-11-16 10:51:39 -08:00
2015-12-11 13:54:23 +02:00
2015-11-10 18:11:41 -08:00
2015-11-08 16:24:43 -05:00
2015-11-12 09:55:23 -08:00
2015-12-01 13:23:22 -07:00
2015-11-12 11:50:33 -08:00
2015-11-10 16:32:11 -08:00
2015-11-25 13:23:38 -06:00
2015-11-04 14:47:13 -08:00
2015-11-09 17:44:24 -05:00
2015-12-01 11:13:04 +01:00
2015-11-13 21:53:18 -08:00
2015-11-06 10:23:50 -08:00
2015-11-11 09:16:10 -08:00
2015-11-05 13:15:12 -08:00
2015-11-26 17:44:28 +02:00
2015-11-26 18:11:26 +01:00
2015-11-18 08:59:29 -08:00
2015-11-28 19:52:10 -08:00
2015-11-17 02:12:46 +09:00
2015-11-25 23:48:12 +01:00
2015-11-30 12:26:47 +00:00
2015-11-04 22:15:15 -08:00
2015-10-28 21:05:21 +02:00
2015-11-18 13:22:44 -08:00
2015-11-28 21:23:13 -08:00
2015-11-23 16:38:40 -08:00
2015-11-20 16:19:54 -08:00
2015-11-19 16:31:42 -08:00
2015-11-04 21:50:37 -08:00
2015-11-13 17:05:32 -08:00
2015-12-08 21:55:49 -05:00
2015-11-10 10:00:09 -08:00
2015-11-04 22:15:15 -08:00
2015-11-05 12:28:15 -08:00
2015-11-23 09:00:09 +01:00
2015-11-26 11:42:25 -08:00
2015-11-04 22:15:15 -08:00
2015-11-16 15:22:28 -07:00