diff options
author | Larry Finger <Larry.Finger@lwfinger.net> | 2010-11-13 14:01:56 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-11-16 15:25:53 -0500 |
commit | f36d83a8cb7224f45fdfa1129a616dff56479a09 (patch) | |
tree | a664839d8a66a008d187ad9f29425c7193cdaf65 | |
parent | 61838261edaf621d1e8ee4ea9d7c052f7d783ca4 (diff) |
staging: rtl8187se: Change panic to warn when RF switch turned off
This driver issues a kernel panic over conditions that do not
justify such drastic action. Change these to log entries with
a stack dump.
This patch fixes the system crash reported in
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/674285.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Reported-and-Tested-by: Robie Basik <rb-oss-3@justgohome.co.uk>
Cc: Stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/rtl8187se/r8185b_init.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/drivers/staging/rtl8187se/r8185b_init.c b/drivers/staging/rtl8187se/r8185b_init.c index 46000d72f4c4..3bdf9b31cc4e 100644 --- a/drivers/staging/rtl8187se/r8185b_init.c +++ b/drivers/staging/rtl8187se/r8185b_init.c | |||
@@ -264,8 +264,12 @@ HwHSSIThreeWire( | |||
264 | 264 | ||
265 | udelay(10); | 265 | udelay(10); |
266 | } | 266 | } |
267 | if (TryCnt == TC_3W_POLL_MAX_TRY_CNT) | 267 | if (TryCnt == TC_3W_POLL_MAX_TRY_CNT) { |
268 | panic("HwThreeWire(): CmdReg: %#X RE|WE bits are not clear!!\n", u1bTmp); | 268 | printk(KERN_ERR "rtl8187se: HwThreeWire(): CmdReg:" |
269 | " %#X RE|WE bits are not clear!!\n", u1bTmp); | ||
270 | dump_stack(); | ||
271 | return 0; | ||
272 | } | ||
269 | 273 | ||
270 | /* RTL8187S HSSI Read/Write Function */ | 274 | /* RTL8187S HSSI Read/Write Function */ |
271 | u1bTmp = read_nic_byte(dev, RF_SW_CONFIG); | 275 | u1bTmp = read_nic_byte(dev, RF_SW_CONFIG); |
@@ -298,13 +302,23 @@ HwHSSIThreeWire( | |||
298 | int idx; | 302 | int idx; |
299 | int ByteCnt = nDataBufBitCnt / 8; | 303 | int ByteCnt = nDataBufBitCnt / 8; |
300 | /* printk("%d\n",nDataBufBitCnt); */ | 304 | /* printk("%d\n",nDataBufBitCnt); */ |
301 | if ((nDataBufBitCnt % 8) != 0) | 305 | if ((nDataBufBitCnt % 8) != 0) { |
302 | panic("HwThreeWire(): nDataBufBitCnt(%d) should be multiple of 8!!!\n", | 306 | printk(KERN_ERR "rtl8187se: " |
303 | nDataBufBitCnt); | 307 | "HwThreeWire(): nDataBufBitCnt(%d)" |
308 | " should be multiple of 8!!!\n", | ||
309 | nDataBufBitCnt); | ||
310 | dump_stack(); | ||
311 | nDataBufBitCnt += 8; | ||
312 | nDataBufBitCnt &= ~7; | ||
313 | } | ||
304 | 314 | ||
305 | if (nDataBufBitCnt > 64) | 315 | if (nDataBufBitCnt > 64) { |
306 | panic("HwThreeWire(): nDataBufBitCnt(%d) should <= 64!!!\n", | 316 | printk(KERN_ERR "rtl8187se: HwThreeWire():" |
307 | nDataBufBitCnt); | 317 | " nDataBufBitCnt(%d) should <= 64!!!\n", |
318 | nDataBufBitCnt); | ||
319 | dump_stack(); | ||
320 | nDataBufBitCnt = 64; | ||
321 | } | ||
308 | 322 | ||
309 | for (idx = 0; idx < ByteCnt; idx++) | 323 | for (idx = 0; idx < ByteCnt; idx++) |
310 | write_nic_byte(dev, (SW_3W_DB0+idx), *(pDataBuf+idx)); | 324 | write_nic_byte(dev, (SW_3W_DB0+idx), *(pDataBuf+idx)); |