[Prism54-devel] sleep_on() considered harmful.

David Woodhouse dwmw2@infradead.org
Thu, 22 Jan 2004 23:23:55 +0000


Index: islpci_dev.c
===================================================================
RCS file: /var/lib/cvs/prism54-ng/ksrc/islpci_dev.c,v
retrieving revision 1.49
diff -u -p -r1.49 islpci_dev.c
--- islpci_dev.c	17 Jan 2004 14:13:13 -0000	1.49
+++ islpci_dev.c	22 Jan 2004 23:25:00 -0000
@@ -335,6 +335,11 @@ static int
 islpci_reset_if(islpci_private *priv)
 {
 	long remaining;
+	DECLARE_WAITQUEUE(wait, current);
+
+	set_current_state(TASK_UNINTERRUPTIBLE);
+	add_wait_queue(&priv->reset_done, &wait);
+
 	/* now the last step is to reset the interface */
 	isl38xx_interface_reset(priv->device_base, priv->device_host_address);
 
@@ -342,7 +347,12 @@ islpci_reset_if(islpci_private *priv)
 
 	/* The software reset acknowledge needs about 220 msec here.
 	 * Be conservative and wait for up to one second. */
-	remaining = sleep_on_timeout(&priv->reset_done, HZ);
+	
+	remaining = schedule_timeout(HZ);
+
+	remove_wait_queue(&priv->reset_done, &wait);
+	set_current_state(TASK_RUNNING);
+
 	if (remaining == 0) {
 		printk(KERN_ERR "%s: device soft reset timed out\n",
 		       priv->ndev->name);

-- 
dwmw2