lkml.org 
[lkml]   [2004]   [Aug]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: Initial bits to help pull jiffies out of drivers
Hi Alan,

> > This is really for comment, the basic idea is to add some relative
> > timer functionality. This gives us timeout objects as well as pulling
> > jiffies use into one place in the timer code. The need for the old
> > interfaces never goes away however because some code uses a previous
> > event base to construct timeouts to avoid sliding due to the latency
> > between service and re-addition.
>
> My gripe with this is that the interface still is relative-to-HZ time.
> I'm convinced that driver(writers) are better off with an absolute time
> interface, eg add_timeout_ms(), add_timeout_us() etc.
> (which btw also give a hint about the accuracy required, so that the
> kernel can group milisecond delays together even when they got scheduled
> at different usecs, once we get timers that accurate)

This bothered me as well. I think we should try really hard to
get away from jiffies & HZ in the device drivers and hide the
conversion to jiffies in the add_timeout/mod_timeout functions
for now (until one day we can rip out jiffies alltogether).
Arnd Bergmann created a patch for the s390 device driver to
use the timeout interface. Patch is attach for whoever is
interested.

blue skies,
Martin.

diff -urN linux-2.6.8-rc3/drivers/s390/block/dasd.c linux-2.6.8-rc3-s390/drivers/s390/block/dasd.c
--- linux-2.6.8-rc3/drivers/s390/block/dasd.c Thu Aug 5 15:34:26 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/block/dasd.c Thu Aug 5 15:36:57 2004
@@ -747,7 +747,6 @@
return -EIO;
}
cqr->startclk = get_clock();
- cqr->starttime = jiffies;
cqr->retries--;
rc = ccw_device_start(device->cdev, cqr->cpaddr, (long) cqr,
cqr->lpm, 0);
@@ -808,17 +807,17 @@
{
if (expires == 0) {
if (timer_pending(&device->timer))
- del_timer(&device->timer);
+ del_timeout(&device->timer);
return;
}
if (timer_pending(&device->timer)) {
- if (mod_timer(&device->timer, jiffies + expires))
+ if (mod_timeout(&device->timer, expires))
return;
}
device->timer.function = dasd_timeout_device;
device->timer.data = (unsigned long) device;
- device->timer.expires = jiffies + expires;
- add_timer(&device->timer);
+ device->timer.expires = expires;
+ add_timeout(&device->timer);
}

/*
@@ -828,7 +827,7 @@
dasd_clear_timer(struct dasd_device *device)
{
if (timer_pending(&device->timer))
- del_timer(&device->timer);
+ del_timeout(&device->timer);
}

static void
@@ -1198,10 +1197,11 @@
return;
cqr = list_entry(device->ccw_queue.next, struct dasd_ccw_req, list);
if (cqr->status == DASD_CQR_IN_IO && cqr->expires != 0) {
- if (time_after_eq(jiffies, cqr->expires + cqr->starttime)) {
+ if (get_clock() <= (jiffies_to_clock(cqr->expires)
+ + cqr->startclk)) {
if (device->discipline->term_IO(cqr) != 0)
/* Hmpf, try again in 1/10 sec */
- dasd_set_timer(device, 10);
+ dasd_set_timer(device, (10 * HZ) / 1000);
}
}
}
@@ -1478,7 +1478,6 @@
/* termination successful */
cqr->status = DASD_CQR_QUEUED;
cqr->startclk = cqr->stopclk = 0;
- cqr->starttime = 0;
}
return rc;
}
diff -urN linux-2.6.8-rc3/drivers/s390/char/con3215.c linux-2.6.8-rc3-s390/drivers/s390/char/con3215.c
--- linux-2.6.8-rc3/drivers/s390/char/con3215.c Wed Jun 16 07:19:42 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/char/con3215.c Thu Aug 5 15:36:57 2004
@@ -300,7 +300,7 @@

spin_lock_irqsave(raw->lock, flags);
if (raw->flags & RAW3215_TIMER_RUNS) {
- del_timer(&raw->timer);
+ del_timeout(&raw->timer);
raw->flags &= ~RAW3215_TIMER_RUNS;
raw3215_mk_write_req(raw);
raw3215_start_io(raw);
@@ -327,16 +327,16 @@
/* execute write requests bigger than minimum size */
raw3215_start_io(raw);
if (raw->flags & RAW3215_TIMER_RUNS) {
- del_timer(&raw->timer);
+ del_timeout(&raw->timer);
raw->flags &= ~RAW3215_TIMER_RUNS;
}
} else if (!(raw->flags & RAW3215_TIMER_RUNS)) {
/* delay small writes */
init_timer(&raw->timer);
- raw->timer.expires = RAW3215_TIMEOUT + jiffies;
+ raw->timer.expires = RAW3215_TIMEOUT;
raw->timer.data = (unsigned long) raw;
raw->timer.function = raw3215_timeout;
- add_timer(&raw->timer);
+ add_timeout(&raw->timer);
raw->flags |= RAW3215_TIMER_RUNS;
}
}
diff -urN linux-2.6.8-rc3/drivers/s390/char/sclp.c linux-2.6.8-rc3-s390/drivers/s390/char/sclp.c
--- linux-2.6.8-rc3/drivers/s390/char/sclp.c Thu Aug 5 15:34:26 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/char/sclp.c Thu Aug 5 15:36:57 2004
@@ -132,13 +132,13 @@
* Try again later.
*/
if (!timer_pending(&sclp_busy_timer) ||
- !mod_timer(&sclp_busy_timer,
- jiffies + SCLP_BUSY_POLL_INTERVAL*HZ)) {
+ !mod_timeout(&sclp_busy_timer,
+ SCLP_BUSY_POLL_INTERVAL*HZ)) {
sclp_busy_timer.function =
(void *) sclp_start_request;
sclp_busy_timer.expires =
- jiffies + SCLP_BUSY_POLL_INTERVAL*HZ;
- add_timer(&sclp_busy_timer);
+ SCLP_BUSY_POLL_INTERVAL*HZ;
+ add_timeout(&sclp_busy_timer);
}
break;
}
@@ -648,13 +648,12 @@
change event, so initially, polling is the only alternative
for us to ever become operational. */
if (!timer_pending(&retry_timer) ||
- !mod_timer(&retry_timer,
- jiffies + SCLP_INIT_POLL_INTERVAL*HZ)) {
+ !mod_timeout(&retry_timer,
+ SCLP_INIT_POLL_INTERVAL*HZ)) {
retry_timer.function = sclp_init_mask_retry;
retry_timer.data = 0;
- retry_timer.expires = jiffies +
- SCLP_INIT_POLL_INTERVAL*HZ;
- add_timer(&retry_timer);
+ retry_timer.expires = SCLP_INIT_POLL_INTERVAL*HZ;
+ add_timeout(&retry_timer);
}
} else {
sclp_receive_mask = sccb->sclp_receive_mask;
diff -urN linux-2.6.8-rc3/drivers/s390/char/sclp_con.c linux-2.6.8-rc3-s390/drivers/s390/char/sclp_con.c
--- linux-2.6.8-rc3/drivers/s390/char/sclp_con.c Wed Jun 16 07:19:23 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/char/sclp_con.c Thu Aug 5 15:36:57 2004
@@ -150,12 +150,12 @@
} while (count > 0);
/* Setup timer to output current console buffer after 1/10 second */
if (sclp_conbuf != NULL && sclp_chars_in_buffer(sclp_conbuf) != 0 &&
- !timer_pending(&sclp_con_timer)) {
+ !timeout_pending(&sclp_con_timer)) {
init_timer(&sclp_con_timer);
sclp_con_timer.function = sclp_console_timeout;
sclp_con_timer.data = 0UL;
- sclp_con_timer.expires = jiffies + HZ/10;
- add_timer(&sclp_con_timer);
+ sclp_con_timer.expires = HZ/10;
+ add_timeout(&sclp_con_timer);
}
spin_unlock_irqrestore(&sclp_con_lock, flags);
}
@@ -179,8 +179,7 @@

sclp_conbuf_emit();
spin_lock_irqsave(&sclp_con_lock, flags);
- if (timer_pending(&sclp_con_timer))
- del_timer(&sclp_con_timer);
+ del_timeout(&sclp_con_timer);
while (sclp_con_buffer_count > 0) {
spin_unlock_irqrestore(&sclp_con_lock, flags);
sclp_sync_wait();
diff -urN linux-2.6.8-rc3/drivers/s390/char/sclp_rw.c linux-2.6.8-rc3-s390/drivers/s390/char/sclp_rw.c
--- linux-2.6.8-rc3/drivers/s390/char/sclp_rw.c Wed Jun 16 07:19:22 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/char/sclp_rw.c Thu Aug 5 15:36:57 2004
@@ -428,9 +428,8 @@
/* wait some time, then retry request */
buffer->retry_timer.function = sclp_buffer_retry;
buffer->retry_timer.data = (unsigned long) buffer;
- buffer->retry_timer.expires = jiffies +
- SCLP_BUFFER_RETRY_INTERVAL*HZ;
- add_timer(&buffer->retry_timer);
+ buffer->retry_timer.expires = SCLP_BUFFER_RETRY_INTERVAL*HZ;
+ add_timeout(&buffer->retry_timer);
return;

default:
diff -urN linux-2.6.8-rc3/drivers/s390/char/sclp_tty.c linux-2.6.8-rc3-s390/drivers/s390/char/sclp_tty.c
--- linux-2.6.8-rc3/drivers/s390/char/sclp_tty.c Wed Jun 16 07:18:58 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/char/sclp_tty.c Thu Aug 5 15:36:57 2004
@@ -376,8 +376,8 @@
init_timer(&sclp_tty_timer);
sclp_tty_timer.function = sclp_tty_timeout;
sclp_tty_timer.data = 0UL;
- sclp_tty_timer.expires = jiffies + HZ/10;
- add_timer(&sclp_tty_timer);
+ sclp_tty_timer.expires = HZ/10;
+ add_timeout(&sclp_tty_timer);
}
} else {
if (sclp_ttybuf != NULL &&
diff -urN linux-2.6.8-rc3/drivers/s390/char/tape_std.c linux-2.6.8-rc3-s390/drivers/s390/char/tape_std.c
--- linux-2.6.8-rc3/drivers/s390/char/tape_std.c Wed Jun 16 07:18:37 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/char/tape_std.c Thu Aug 5 15:36:57 2004
@@ -76,12 +76,12 @@
init_timer(&timeout);
timeout.function = tape_std_assign_timeout;
timeout.data = (unsigned long) request;
- timeout.expires = jiffies + 2 * HZ;
- add_timer(&timeout);
+ timeout.expires = 2 * HZ;
+ add_timeout(&timeout);

rc = tape_do_io_interruptible(device, request);

- del_timer(&timeout);
+ del_timeout(&timeout);

if (rc != 0) {
PRINT_WARN("%s: assign failed - device might be busy\n",
diff -urN linux-2.6.8-rc3/drivers/s390/char/tty3270.c linux-2.6.8-rc3-s390/drivers/s390/char/tty3270.c
--- linux-2.6.8-rc3/drivers/s390/char/tty3270.c Wed Jun 16 07:19:01 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/char/tty3270.c Thu Aug 5 15:36:57 2004
@@ -126,19 +126,19 @@
if (expires == 0) {
if (timer_pending(&tp->timer)) {
raw3270_put_view(&tp->view);
- del_timer(&tp->timer);
+ del_timeout(&tp->timer);
}
return;
}
if (timer_pending(&tp->timer)) {
- if (mod_timer(&tp->timer, jiffies + expires))
+ if (mod_timeout(&tp->timer, expires))
return;
}
raw3270_get_view(&tp->view);
tp->timer.function = (void (*)(unsigned long)) tty3270_update;
tp->timer.data = (unsigned long) tp;
- tp->timer.expires = jiffies + expires;
- add_timer(&tp->timer);
+ tp->timer.expires = expires;
+ add_timeout(&tp->timer);
}

/*
diff -urN linux-2.6.8-rc3/drivers/s390/cio/device_fsm.c linux-2.6.8-rc3-s390/drivers/s390/cio/device_fsm.c
--- linux-2.6.8-rc3/drivers/s390/cio/device_fsm.c Thu Aug 5 15:34:27 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/cio/device_fsm.c Thu Aug 5 15:36:57 2004
@@ -80,17 +80,17 @@
ccw_device_set_timeout(struct ccw_device *cdev, int expires)
{
if (expires == 0) {
- del_timer(&cdev->private->timer);
+ del_timeout(&cdev->private->timer);
return;
}
if (timer_pending(&cdev->private->timer)) {
- if (mod_timer(&cdev->private->timer, jiffies + expires))
+ if (mod_timeout(&cdev->private->timer, expires))
return;
}
cdev->private->timer.function = ccw_device_timeout;
cdev->private->timer.data = (unsigned long) cdev;
- cdev->private->timer.expires = jiffies + expires;
- add_timer(&cdev->private->timer);
+ cdev->private->timer.expires = expires;
+ add_timeout(&cdev->private->timer);
}

/*
diff -urN linux-2.6.8-rc3/drivers/s390/crypto/z90main.c linux-2.6.8-rc3-s390/drivers/s390/crypto/z90main.c
--- linux-2.6.8-rc3/drivers/s390/crypto/z90main.c Wed Jun 16 07:18:38 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/crypto/z90main.c Thu Aug 5 15:36:57 2004
@@ -677,7 +677,7 @@
init_timer(&cleanup_timer);
cleanup_timer.function = z90crypt_cleanup_task;
cleanup_timer.data = 0;
- cleanup_timer.expires = jiffies + (CLEANUPTIME * HZ);
+ cleanup_timer.expires = CLEANUPTIME * HZ;
add_timer(&cleanup_timer);

/* Set up the proc file system */
@@ -696,7 +696,7 @@
init_timer(&config_timer);
config_timer.function = z90crypt_config_task;
config_timer.data = 0;
- config_timer.expires = jiffies + (INITIAL_CONFIGTIME * HZ);
+ config_timer.expires = INITIAL_CONFIGTIME * HZ;
add_timer(&config_timer);

/* Set up the reader task */
@@ -704,7 +704,7 @@
init_timer(&reader_timer);
reader_timer.function = z90crypt_schedule_reader_task;
reader_timer.data = 0;
- reader_timer.expires = jiffies + (READERTIME * HZ / 1000);
+ reader_timer.expires = READERTIME * HZ / 1000;
add_timer(&reader_timer);

if ((result = z90_register_ioctl32s()))
@@ -2496,7 +2496,7 @@
{
if (timer_pending(&reader_timer))
return;
- if (mod_timer(&reader_timer, jiffies+(READERTIME*HZ/1000)) != 0)
+ if (mod_timeout(&reader_timer, READERTIME*HZ/1000) != 0)
PRINTK("Timer pending while modifying reader timer\n");
}

@@ -2508,8 +2508,6 @@
unsigned char __user *resp_addr;
static unsigned char buff[1024];

- PDEBUG("jiffies %ld\n", jiffies);
-
/**
* we use workavail = 2 to ensure 2 passes with nothing dequeued before
* exiting the loop. If remaining == 0 after the loop, there is no work
@@ -2567,7 +2565,7 @@
{
if (timer_pending(&config_timer))
return;
- if (mod_timer(&config_timer, jiffies+(expiration*HZ)) != 0)
+ if (mod_timer(&config_timer, expiration*HZ) != 0)
PRINTK("Timer pending while modifying config timer\n");
}

@@ -2576,8 +2574,6 @@
{
int rc;

- PDEBUG("jiffies %ld\n", jiffies);
-
if ((rc = refresh_z90crypt(&z90crypt.cdx)))
PRINTK("Error %d detected in refresh_z90crypt.\n", rc);
/* If return was fatal, don't bother reconfiguring */
@@ -2590,7 +2586,7 @@
{
if (timer_pending(&cleanup_timer))
return;
- if (mod_timer(&cleanup_timer, jiffies+(CLEANUPTIME*HZ)) != 0)
+ if (mod_timer(&cleanup_timer, CLEANUPTIME*HZ) != 0)
PRINTK("Timer pending while modifying cleanup timer\n");
}

@@ -2679,7 +2675,6 @@
static void
z90crypt_cleanup_task(unsigned long ptr)
{
- PDEBUG("jiffies %ld\n", jiffies);
spin_lock_irq(&queuespinlock);
if (z90crypt.mask.st_count <= 0) // no devices!
helper_drain_queues();
diff -urN linux-2.6.8-rc3/drivers/s390/net/ctctty.c linux-2.6.8-rc3-s390/drivers/s390/net/ctctty.c
--- linux-2.6.8-rc3/drivers/s390/net/ctctty.c Thu Aug 5 15:34:27 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/net/ctctty.c Thu Aug 5 15:36:57 2004
@@ -475,7 +475,7 @@
info->mcr &= ~(UART_MCR_DTR | UART_MCR_RTS);
if (info->tty)
set_bit(TTY_IO_ERROR, &info->tty->flags);
- mod_timer(&info->stoptimer, jiffies + (10 * HZ));
+ mod_timeout(&info->stoptimer, 10 * HZ);
skb_queue_purge(&info->tx_queue);
skb_queue_purge(&info->rx_queue);
info->flags &= ~CTC_ASYNC_INITIALIZED;
@@ -1000,7 +1000,7 @@
{
ctc_tty_info *info = (ctc_tty_info *) tty->driver_data;
ulong flags;
- ulong timeout;
+
DBF_TEXT(trace, 3, __FUNCTION__);
if (!info || ctc_tty_paranoia_check(info, tty->name, "ctc_tty_close"))
return;
@@ -1045,21 +1045,26 @@
* line status register.
*/
if (info->flags & CTC_ASYNC_INITIALIZED) {
+ struct timer_list t;
tty_wait_until_sent(tty, 30*HZ); /* 30 seconds timeout */
/*
* Before we drop DTR, make sure the UART transmitter
* has completely drained; this is especially
* important if there is a transmit FIFO!
*/
- timeout = jiffies + HZ;
+ init_timer(&t);
+ t.expires = HZ;
+ t.function = timer_noop;
+ add_timeout(&t);
while (!(info->lsr & UART_LSR_TEMT)) {
set_current_state(TASK_INTERRUPTIBLE);
spin_unlock_irqrestore(&ctc_tty_lock, flags);
schedule_timeout(HZ/2);
spin_lock_irqsave(&ctc_tty_lock, flags);
- if (time_after(jiffies,timeout))
+ if (!timer_pending(&t))
break;
}
+ del_timeout(&t);
}
ctc_tty_shutdown(info);
if (tty->driver->flush_buffer) {
diff -urN linux-2.6.8-rc3/drivers/s390/net/fsm.c linux-2.6.8-rc3-s390/drivers/s390/net/fsm.c
--- linux-2.6.8-rc3/drivers/s390/net/fsm.c Wed Jun 16 07:19:23 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/net/fsm.c Thu Aug 5 15:36:57 2004
@@ -164,7 +164,7 @@
printk(KERN_DEBUG "fsm(%s): Delete timer %p\n", this->fi->name,
this);
#endif
- del_timer(&this->tl);
+ del_timeout(&this->tl);
}

int
@@ -181,37 +181,16 @@
this->tl.data = (long)this;
this->expire_event = event;
this->event_arg = arg;
- this->tl.expires = jiffies + (millisec * HZ) / 1000;
- add_timer(&this->tl);
+ this->tl.expires = (millisec * HZ) / 1000;
+ add_timeout(&this->tl);
return 0;
}

-/* FIXME: this function is never used, why */
-void
-fsm_modtimer(fsm_timer *this, int millisec, int event, void *arg)
-{
-
-#if FSM_TIMER_DEBUG
- printk(KERN_DEBUG "fsm(%s): Restart timer %p %dms\n",
- this->fi->name, this, millisec);
-#endif
-
- del_timer(&this->tl);
- init_timer(&this->tl);
- this->tl.function = (void *)fsm_expire_timer;
- this->tl.data = (long)this;
- this->expire_event = event;
- this->event_arg = arg;
- this->tl.expires = jiffies + (millisec * HZ) / 1000;
- add_timer(&this->tl);
-}
-
EXPORT_SYMBOL(init_fsm);
EXPORT_SYMBOL(kfree_fsm);
EXPORT_SYMBOL(fsm_settimer);
EXPORT_SYMBOL(fsm_deltimer);
EXPORT_SYMBOL(fsm_addtimer);
-EXPORT_SYMBOL(fsm_modtimer);
EXPORT_SYMBOL(fsm_getstate_str);

#if FSM_DEBUG_HISTORY
diff -urN linux-2.6.8-rc3/drivers/s390/net/fsm.h linux-2.6.8-rc3-s390/drivers/s390/net/fsm.h
--- linux-2.6.8-rc3/drivers/s390/net/fsm.h Wed Jun 16 07:19:44 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/net/fsm.h Thu Aug 5 15:36:57 2004
@@ -252,14 +252,4 @@
*/
extern int fsm_addtimer(fsm_timer *timer, int millisec, int event, void *arg);

-/**
- * Modifies a timer of an FSM.
- *
- * @param timer The timer to modify.
- * @param millisec Duration, after which the timer should expire.
- * @param event Event, to trigger if timer expires.
- * @param arg Generic argument, provided to expiry function.
- */
-extern void fsm_modtimer(fsm_timer *timer, int millisec, int event, void *arg);
-
#endif /* _FSM_H_ */
diff -urN linux-2.6.8-rc3/drivers/s390/net/lcs.c linux-2.6.8-rc3-s390/drivers/s390/net/lcs.c
--- linux-2.6.8-rc3/drivers/s390/net/lcs.c Thu Aug 5 15:34:27 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/net/lcs.c Thu Aug 5 15:36:57 2004
@@ -29,6 +29,7 @@
*/

#include <linux/module.h>
+#include <linux/delay.h>
#include <linux/if.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
@@ -720,10 +721,10 @@
init_timer(&timer);
timer.function = lcs_lancmd_timeout;
timer.data = (unsigned long) &reply;
- timer.expires = jiffies + HZ*card->lancmd_timeout;
- add_timer(&timer);
+ timer.expires = HZ*card->lancmd_timeout;
+ add_timeout(&timer);
wait_event(reply.wait_q, reply.received);
- del_timer(&timer);
+ del_timeout(&timer);
LCS_DBF_TEXT_(4, trace, "rc:%d",reply.rc);
return reply.rc ? -EIO : 0;
}
diff -urN linux-2.6.8-rc3/drivers/s390/net/qeth_main.c linux-2.6.8-rc3-s390/drivers/s390/net/qeth_main.c
--- linux-2.6.8-rc3/drivers/s390/net/qeth_main.c Thu Aug 5 15:34:27 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/net/qeth_main.c Thu Aug 5 15:36:57 2004
@@ -1771,9 +1771,9 @@
timer.function = qeth_cmd_timeout;
timer.data = (unsigned long) reply;
if (IS_IPA(iob->data))
- timer.expires = jiffies + QETH_IPA_TIMEOUT;
+ timer.expires = QETH_IPA_TIMEOUT;
else
- timer.expires = jiffies + QETH_TIMEOUT;
+ timer.expires = QETH_TIMEOUT;
init_waitqueue_head(&reply->wait_q);
spin_lock_irqsave(&card->lock, flags);
list_add_tail(&reply->list, &card->cmd_waiter_list);
@@ -1799,9 +1799,9 @@
wake_up(&card->wait_q);
return rc;
}
- add_timer(&timer);
+ add_timeout(&timer);
wait_event(reply->wait_q, reply->received);
- del_timer(&timer);
+ del_timeout(&timer);
rc = reply->rc;
qeth_put_reply(reply);
return rc;
diff -urN linux-2.6.8-rc3/drivers/s390/scsi/zfcp_erp.c linux-2.6.8-rc3-s390/drivers/s390/scsi/zfcp_erp.c
--- linux-2.6.8-rc3/drivers/s390/scsi/zfcp_erp.c Thu Aug 5 15:34:27 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/scsi/zfcp_erp.c Thu Aug 5 15:36:57 2004
@@ -1560,8 +1560,8 @@
init_timer(&erp_action->timer);
erp_action->timer.function = zfcp_erp_memwait_handler;
erp_action->timer.data = (unsigned long) erp_action;
- erp_action->timer.expires = jiffies + ZFCP_ERP_MEMWAIT_TIMEOUT;
- add_timer(&erp_action->timer);
+ erp_action->timer.expires = ZFCP_ERP_MEMWAIT_TIMEOUT;
+ add_timeout(&erp_action->timer);

return retval;
}
@@ -3292,7 +3292,6 @@
init_timer(&erp_action->timer);
erp_action->timer.function = zfcp_erp_timeout_handler;
erp_action->timer.data = (unsigned long) erp_action;
- /* jiffies will be added in zfcp_fsf_req_send */
erp_action->timer.expires = ZFCP_ERP_FSFREQ_TIMEOUT;
}

diff -urN linux-2.6.8-rc3/drivers/s390/scsi/zfcp_fsf.c linux-2.6.8-rc3-s390/drivers/s390/scsi/zfcp_fsf.c
--- linux-2.6.8-rc3/drivers/s390/scsi/zfcp_fsf.c Thu Aug 5 15:34:27 2004
+++ linux-2.6.8-rc3-s390/drivers/s390/scsi/zfcp_fsf.c Thu Aug 5 15:36:57 2004
@@ -1154,7 +1154,7 @@
zfcp_fsf_start_scsi_er_timer(adapter);
retval = zfcp_fsf_req_send(fsf_req, NULL);
if (retval) {
- del_timer(&adapter->scsi_er_timer);
+ del_timeout(&adapter->scsi_er_timer);
ZFCP_LOG_INFO("error: Failed to send abort command request "
"on adapter %s, port 0x%016Lx, unit 0x%016Lx\n",
zfcp_get_busid_by_adapter(adapter),
@@ -1190,7 +1190,7 @@
unsigned char status_qual =
new_fsf_req->qtcb->header.fsf_status_qual.word[0];

- del_timer(&new_fsf_req->adapter->scsi_er_timer);
+ del_timeout(&new_fsf_req->adapter->scsi_er_timer);

if (new_fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR) {
/* do not set ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED */
@@ -3581,7 +3581,7 @@
zfcp_fsf_start_scsi_er_timer(adapter);
retval = zfcp_fsf_req_send(fsf_req, NULL);
if (retval) {
- del_timer(&adapter->scsi_er_timer);
+ del_timeout(&adapter->scsi_er_timer);
ZFCP_LOG_INFO("error: Could not send an FCP-command (task "
"management) on adapter %s, port 0x%016Lx for "
"unit LUN 0x%016Lx\n",
@@ -4278,7 +4278,7 @@
struct zfcp_unit *unit =
fsf_req->data.send_fcp_command_task_management.unit;

- del_timer(&fsf_req->adapter->scsi_er_timer);
+ del_timeout(&fsf_req->adapter->scsi_er_timer);
if (fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR) {
fsf_req->status |= ZFCP_STATUS_FSFREQ_TMFUNCFAILED;
goto skip_fsfstatus;
@@ -4877,10 +4877,8 @@
list_add_tail(&fsf_req->list, &adapter->fsf_req_list_head);
write_unlock_irqrestore(&adapter->fsf_req_list_lock, flags);

- /* figure out expiration time of timeout and start timeout */
if (unlikely(timer)) {
- timer->expires += jiffies;
- add_timer(timer);
+ add_timeout(timer);
}

ZFCP_LOG_TRACE("request queue of adapter %s: "
diff -urN linux-2.6.8-rc3/include/asm-s390/timex.h linux-2.6.8-rc3-s390/include/asm-s390/timex.h
--- linux-2.6.8-rc3/include/asm-s390/timex.h Wed Jun 16 07:18:52 2004
+++ linux-2.6.8-rc3-s390/include/asm-s390/timex.h Thu Aug 5 15:36:57 2004
@@ -37,4 +37,8 @@
return clk;
}

+#define clock_to_jiffies(clk) ((((unsigned long)(a) >> 12)) / (1000000 / HZ))
+#define jiffies_to_clock(jiffies) ((unsigned long long) \
+ (4096ull * 1000ull * 1000ull / HZ * jiffies))
+
#endif
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:04    [W:0.041 / U:0.980 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site