Hi,
Description: The existing wait is in TASK_INTERRUPTIBLE, but does not check for
signals (especially problemtic for a 30 msec wait!) as being a cause for
schedule_timeout()s return. Use msleep() instead, to guarantee the task delays
as expected.
Signed-off-by: Nishanth Aravamudan <nacc@xxxxxxxxxx>
--- 2.6.10-v/drivers/net/cs89x0.c 2004-12-24 13:35:24.000000000 -0800
+++ 2.6.10/drivers/net/cs89x0.c 2005-01-04 14:57:49.000000000 -0800
@@ -136,6 +136,7 @@
#include <linux/string.h>
#include <linux/init.h>
#include <linux/bitops.h>
+#include <linux/delay.h>
#include <asm/system.h>
#include <asm/io.h>
@@ -909,8 +910,7 @@ void __init reset_chip(struct net_devic
writereg(dev, PP_SelfCTL, readreg(dev, PP_SelfCTL) | POWER_ON_RESET);
/* wait 30 ms */
- current->state = TASK_INTERRUPTIBLE;
- schedule_timeout(30*HZ/1000);
+ msleep(30);
#ifndef CONFIG_ARCH_IXDP2X01
if (lp->chip_type != CS8900) {
|