* [PATCH] add ssleep(), kill scsi_sleep()
@ 2004-08-19 4:51 Jeff Garzik
2004-08-19 5:58 ` Andrew Morton
0 siblings, 1 reply; 3+ messages in thread
From: Jeff Garzik @ 2004-08-19 4:51 UTC (permalink / raw)
To: Andrew Morton, James Bottomley; +Cc: SCSI Mailing List
[-- Attachment #1: Type: text/plain, Size: 157 bytes --]
So, the kernel needs a 'sleep', but that token is far too common, so I
chose ssleep().
scsi_sleep() is a manually implemented msleep(), so I remove it.
[-- Attachment #2: patch --]
[-- Type: text/plain, Size: 9896 bytes --]
===== drivers/scsi/aha1542.c 1.37 vs edited =====
--- 1.37/drivers/scsi/aha1542.c 2004-07-26 17:21:48 -04:00
+++ edited/drivers/scsi/aha1542.c 2004-08-18 22:38:11 -04:00
@@ -1479,7 +1479,7 @@
* we are pretty desperate anyways.
*/
spin_unlock_irq(SCpnt->device->host->host_lock);
- scsi_sleep(4 * HZ);
+ ssleep(4);
spin_lock_irq(SCpnt->device->host->host_lock);
WAIT(STATUS(SCpnt->device->host->io_port),
@@ -1543,7 +1543,7 @@
* we are pretty desperate anyways.
*/
spin_unlock_irq(SCpnt->device->host->host_lock);
- scsi_sleep(4 * HZ);
+ ssleep(4);
spin_lock_irq(SCpnt->device->host->host_lock);
WAIT(STATUS(SCpnt->device->host->io_port),
===== drivers/scsi/aic7xxx_old.c 1.57 vs edited =====
--- 1.57/drivers/scsi/aic7xxx_old.c 2004-07-26 17:38:41 -04:00
+++ edited/drivers/scsi/aic7xxx_old.c 2004-08-18 22:38:37 -04:00
@@ -10489,7 +10489,7 @@
aic_outb(p, lastphase | ATNO, SCSISIGO);
unpause_sequencer(p, FALSE);
spin_unlock_irq(p->host->host_lock);
- scsi_sleep(HZ);
+ ssleep(1);
spin_lock_irq(p->host->host_lock);
if(aic_dev->flags & BUS_DEVICE_RESET_PENDING)
return FAILED;
@@ -10548,7 +10548,7 @@
aic_outb(p, saved_scbptr, SCBPTR);
unpause_sequencer(p, FALSE);
spin_unlock_irq(p->host->host_lock);
- scsi_sleep(HZ/4);
+ msleep(1000/4);
spin_lock_irq(p->host->host_lock);
if(aic_dev->flags & BUS_DEVICE_RESET_PENDING)
return FAILED;
@@ -10786,7 +10786,7 @@
}
unpause_sequencer(p, FALSE);
spin_unlock_irq(p->host->host_lock);
- scsi_sleep(HZ/4);
+ msleep(1000/4);
spin_lock_irq(p->host->host_lock);
if (p->flags & AHC_ABORT_PENDING)
{
@@ -10887,7 +10887,7 @@
aic7xxx_run_done_queue(p, TRUE);
unpause_sequencer(p, FALSE);
spin_unlock_irq(p->host->host_lock);
- scsi_sleep(2 * HZ);
+ ssleep(2);
spin_lock_irq(p->host->host_lock);
return SUCCESS;
}
===== drivers/scsi/scsi_error.c 1.79 vs edited =====
--- 1.79/drivers/scsi/scsi_error.c 2004-06-19 10:47:16 -04:00
+++ edited/drivers/scsi/scsi_error.c 2004-08-18 22:45:39 -04:00
@@ -23,6 +23,7 @@
#include <linux/interrupt.h>
#include <linux/blkdev.h>
#include <linux/smp_lock.h>
+#include <linux/delay.h>
#include <scsi/scsi.h>
#include <scsi/scsi_dbg.h>
@@ -42,8 +43,8 @@
* These should *probably* be handled by the host itself.
* Since it is allowed to sleep, it probably should.
*/
-#define BUS_RESET_SETTLE_TIME (10*HZ)
-#define HOST_RESET_SETTLE_TIME (10*HZ)
+#define BUS_RESET_SETTLE_TIME (10)
+#define HOST_RESET_SETTLE_TIME (10)
/* called with shost->host_lock held */
void scsi_eh_wakeup(struct Scsi_Host *shost)
@@ -1044,7 +1045,7 @@
if (rtn == SUCCESS) {
if (!scmd->device->host->hostt->skip_settle_delay)
- scsi_sleep(BUS_RESET_SETTLE_TIME);
+ ssleep(BUS_RESET_SETTLE_TIME);
spin_lock_irqsave(scmd->device->host->host_lock, flags);
scsi_report_bus_reset(scmd->device->host, scmd->device->channel);
spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
@@ -1076,7 +1077,7 @@
if (rtn == SUCCESS) {
if (!scmd->device->host->hostt->skip_settle_delay)
- scsi_sleep(HOST_RESET_SETTLE_TIME);
+ ssleep(HOST_RESET_SETTLE_TIME);
spin_lock_irqsave(scmd->device->host->host_lock, flags);
scsi_report_bus_reset(scmd->device->host, scmd->device->channel);
spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
@@ -1213,43 +1214,6 @@
scsi_eh_finish_cmd(scmd, done_q);
}
return;
-}
-
-/**
- * scsi_sleep_done - timer function for scsi_sleep
- * @sem: semphore to signal
- *
- **/
-static void scsi_sleep_done(unsigned long data)
-{
- struct semaphore *sem = (struct semaphore *)data;
-
- if (sem)
- up(sem);
-}
-
-/**
- * scsi_sleep - sleep for specified timeout
- * @timeout: timeout value
- *
- **/
-void scsi_sleep(int timeout)
-{
- DECLARE_MUTEX_LOCKED(sem);
- struct timer_list timer;
-
- init_timer(&timer);
- timer.data = (unsigned long)&sem;
- timer.expires = jiffies + timeout;
- timer.function = (void (*)(unsigned long))scsi_sleep_done;
-
- SCSI_LOG_ERROR_RECOVERY(5, printk("sleeping for timer tics %d\n",
- timeout));
-
- add_timer(&timer);
-
- down(&sem);
- del_timer(&timer);
}
/**
===== drivers/scsi/scsi_syms.c 1.49 vs edited =====
--- 1.49/drivers/scsi/scsi_syms.c 2004-06-26 18:40:24 -04:00
+++ edited/drivers/scsi/scsi_syms.c 2004-08-18 22:39:16 -04:00
@@ -69,8 +69,6 @@
EXPORT_SYMBOL(scsi_get_host_dev);
EXPORT_SYMBOL(scsi_free_host_dev);
-EXPORT_SYMBOL(scsi_sleep);
-
EXPORT_SYMBOL(scsi_io_completion);
EXPORT_SYMBOL(scsi_add_device);
===== drivers/scsi/sg.c 1.95 vs edited =====
--- 1.95/drivers/scsi/sg.c 2004-08-07 22:11:33 -04:00
+++ edited/drivers/scsi/sg.c 2004-08-18 22:45:56 -04:00
@@ -47,8 +47,9 @@
#include <linux/devfs_fs_kernel.h>
#include <linux/cdev.h>
#include <linux/seq_file.h>
-
#include <linux/blkdev.h>
+#include <linux/delay.h>
+
#include "scsi.h"
#include <scsi/scsi_host.h>
#include <scsi/scsi_driver.h>
@@ -1547,7 +1548,7 @@
}
if (delay)
- scsi_sleep(2); /* dirty detach so delay device destruction */
+ msleep(10); /* dirty detach so delay device destruction */
}
/* Set 'perm' (4th argument) to 0 to disable module_param's definition
===== drivers/scsi/sr_ioctl.c 1.35 vs edited =====
--- 1.35/drivers/scsi/sr_ioctl.c 2004-06-20 12:31:34 -04:00
+++ edited/drivers/scsi/sr_ioctl.c 2004-08-18 22:45:43 -04:00
@@ -7,6 +7,7 @@
#include <linux/blkdev.h>
#include <linux/blkpg.h>
#include <linux/cdrom.h>
+#include <linux/delay.h>
#include <asm/io.h>
#include <asm/uaccess.h>
@@ -131,7 +132,7 @@
printk(KERN_INFO "%s: CDROM not ready yet.\n", cd->cdi.name);
if (retries++ < 10) {
/* sleep 2 sec and try again */
- scsi_sleep(2 * HZ);
+ ssleep(2);
goto retry;
} else {
/* 20 secs are enough? */
===== drivers/scsi/aacraid/linit.c 1.33 vs edited =====
--- 1.33/drivers/scsi/aacraid/linit.c 2004-07-13 21:33:33 -04:00
+++ edited/drivers/scsi/aacraid/linit.c 2004-08-18 23:54:47 -04:00
@@ -44,6 +44,7 @@
#include <linux/spinlock.h>
#include <linux/syscalls.h>
#include <linux/ioctl32.h>
+#include <linux/delay.h>
#include <asm/semaphore.h>
#include <scsi/scsi.h>
@@ -416,7 +417,7 @@
return SUCCESS;
}
spin_unlock_irq(host->host_lock);
- scsi_sleep(HZ);
+ ssleep(1);
spin_lock_irq(host->host_lock);
}
printk(KERN_ERR "%s: SCSI bus appears hung\n", AAC_DRIVERNAME);
===== drivers/scsi/aic7xxx/aic79xx_osm.c 1.53 vs edited =====
--- 1.53/drivers/scsi/aic7xxx/aic79xx_osm.c 2004-04-26 02:09:37 -04:00
+++ edited/drivers/scsi/aic7xxx/aic79xx_osm.c 2004-08-18 22:36:56 -04:00
@@ -61,6 +61,7 @@
#endif
#include <linux/mm.h> /* For fetching system memory size */
+#include <linux/delay.h> /* For ssleep/msleep */
/*
* Lock protecting manipulation of the ahd softc list.
@@ -3163,7 +3164,7 @@
break;
}
if (status & SSQ_DELAY)
- scsi_sleep(1 * HZ);
+ ssleep(1);
break;
case SS_START:
@@ -3323,7 +3324,7 @@
}
if (targ->dv_state_retry <= 10) {
if ((status & (SSQ_DELAY_RANDOM|SSQ_DELAY))!= 0)
- scsi_sleep(ahd->our_id*HZ/10);
+ msleep(ahd->our_id*1000/10);
break;
}
#ifdef AHD_DEBUG
@@ -3367,7 +3368,7 @@
targ->dv_state_retry--;
} else if (targ->dv_state_retry < 60) {
if ((status & SSQ_DELAY) != 0)
- scsi_sleep(1 * HZ);
+ ssleep(1);
} else {
#ifdef AHD_DEBUG
if (ahd_debug & AHD_SHOW_DV) {
===== drivers/scsi/aic7xxx/aic7xxx_osm.c 1.55 vs edited =====
--- 1.55/drivers/scsi/aic7xxx/aic7xxx_osm.c 2004-06-25 10:50:05 -04:00
+++ edited/drivers/scsi/aic7xxx/aic7xxx_osm.c 2004-08-18 22:37:31 -04:00
@@ -140,6 +140,7 @@
#include <linux/mm.h> /* For fetching system memory size */
#include <linux/blkdev.h> /* For block_size() */
+#include <linux/delay.h> /* For ssleep/msleep */
/*
* Lock protecting manipulation of the ahc softc list.
@@ -2825,7 +2826,7 @@
break;
}
if (status & SSQ_DELAY)
- scsi_sleep(1 * HZ);
+ ssleep(1);
break;
case SS_START:
@@ -2985,7 +2986,7 @@
}
if (targ->dv_state_retry <= 10) {
if ((status & (SSQ_DELAY_RANDOM|SSQ_DELAY))!= 0)
- scsi_sleep(ahc->our_id*HZ/10);
+ msleep(ahc->our_id*1000/10);
break;
}
#ifdef AHC_DEBUG
@@ -3029,7 +3030,7 @@
targ->dv_state_retry--;
} else if (targ->dv_state_retry < 60) {
if ((status & SSQ_DELAY) != 0)
- scsi_sleep(1 * HZ);
+ ssleep(1);
} else {
#ifdef AHC_DEBUG
if (ahc_debug & AHC_SHOW_DV) {
===== drivers/scsi/arm/fas216.c 1.27 vs edited =====
--- 1.27/drivers/scsi/arm/fas216.c 2004-06-19 11:53:28 -04:00
+++ edited/drivers/scsi/arm/fas216.c 2004-08-18 22:37:53 -04:00
@@ -2681,7 +2681,7 @@
* IRQs after the sleep.
*/
spin_unlock_irq(info->host->host_lock);
- scsi_sleep(50 * HZ/100);
+ msleep(50 * 1000/100);
spin_lock_irq(info->host->host_lock);
/*
@@ -2920,7 +2920,7 @@
* scsi standard says wait 250ms
*/
spin_unlock_irq(info->host->host_lock);
- scsi_sleep(100*HZ/100);
+ msleep(100*1000/100);
spin_lock_irq(info->host->host_lock);
fas216_writeb(info, REG_CNTL1, info->scsi.cfg[0]);
===== include/linux/delay.h 1.4 vs edited =====
--- 1.4/include/linux/delay.h 2004-05-18 11:48:36 -04:00
+++ edited/include/linux/delay.h 2004-08-18 22:35:15 -04:00
@@ -40,4 +40,9 @@
void msleep(unsigned int msecs);
+static inline void ssleep(unsigned int seconds)
+{
+ msleep(seconds * 1000);
+}
+
#endif /* defined(_LINUX_DELAY_H) */
===== include/scsi/scsi_eh.h 1.2 vs edited =====
--- 1.2/include/scsi/scsi_eh.h 2004-06-04 07:45:01 -04:00
+++ edited/include/scsi/scsi_eh.h 2004-08-18 22:39:39 -04:00
@@ -11,7 +11,6 @@
extern void scsi_report_bus_reset(struct Scsi_Host *, int);
extern void scsi_report_device_reset(struct Scsi_Host *, int, int);
extern int scsi_block_when_processing_errors(struct scsi_device *);
-extern void scsi_sleep(int);
/*
* Reset request from external source
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] add ssleep(), kill scsi_sleep()
2004-08-19 4:51 [PATCH] add ssleep(), kill scsi_sleep() Jeff Garzik
@ 2004-08-19 5:58 ` Andrew Morton
2004-08-19 15:24 ` Jeff Garzik
0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2004-08-19 5:58 UTC (permalink / raw)
To: Jeff Garzik; +Cc: James.Bottomley, linux-scsi
Jeff Garzik <jgarzik@pobox.com> wrote:
>
> So, the kernel needs a 'sleep', but that token is far too common, so I
> chose ssleep().
Dorky name, but whatever.
> scsi_sleep() is a manually implemented msleep(), so I remove it.
scsi_sleep() was buggy anyway: the CPU running scsi_sleep_done() could
still be dinking with the semaphore when it goes out of scope on the CPU
running scsi_sleep(). That's why struct completion was added.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] add ssleep(), kill scsi_sleep()
2004-08-19 5:58 ` Andrew Morton
@ 2004-08-19 15:24 ` Jeff Garzik
0 siblings, 0 replies; 3+ messages in thread
From: Jeff Garzik @ 2004-08-19 15:24 UTC (permalink / raw)
To: Andrew Morton; +Cc: James.Bottomley, linux-scsi
Andrew Morton wrote:
> Jeff Garzik <jgarzik@pobox.com> wrote:
>
>>So, the kernel needs a 'sleep', but that token is far too common, so I
>> chose ssleep().
>
>
> Dorky name, but whatever.
Feel free to rename :) I care mainly about the end results:
1) having a function that takes a 'seconds' argument, since that matches
common usage in many places
2) killing scsi_sleep
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-08-19 15:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-08-19 4:51 [PATCH] add ssleep(), kill scsi_sleep() Jeff Garzik
2004-08-19 5:58 ` Andrew Morton
2004-08-19 15:24 ` Jeff Garzik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).