lkml.org 
[lkml]   [2000]   [Sep]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From

The drivers below loop, but don't set TASK_{UN}INTERRUPTIBLE each time ...

thanks
john

--- drivers/char/drm/i810_dma.c Fri Aug 11 00:21:18 2000
+++ drivers/char/drm/i810_dma.c.new Fri Sep 1 03:47:08 2000
@@ -1068,7 +1068,6 @@
return;
}
atomic_set(&dev_priv->flush_done, 0);
- current->state = TASK_INTERRUPTIBLE;
add_wait_queue(&dev_priv->flush_queue, &entry);
end = jiffies + (HZ*3);

@@ -1079,13 +1078,13 @@
DRM_ERROR("lockup\n");
break;
}
+ current->state = TASK_INTERRUPTIBLE;
schedule_timeout(HZ*3);
if (signal_pending(current)) {
break;
}
}

- current->state = TASK_RUNNING;
remove_wait_queue(&dev_priv->flush_queue, &entry);

return;
--- drivers/char/ftape/lowlevel/ftape-io.c Wed Sep 22 20:12:53 1999
+++ drivers/char/ftape/lowlevel/ftape-io.c.new Fri Sep 1 03:49:20 2000
@@ -97,7 +97,6 @@
timeout = ticks;
save_flags(flags);
sti();
- set_current_state(TASK_INTERRUPTIBLE);
do {
/* Mmm. Isn't current->blocked == 0xffffffff ?
*/
@@ -106,9 +105,9 @@
"awoken by non-blocked signal :-(");
break; /* exit on signal */
}
- while (current->state != TASK_RUNNING) {
- timeout = schedule_timeout(timeout);
- }
+
+ set_current_state(TASK_INTERRUPTIBLE);
+ timeout = schedule_timeout(timeout);
} while (timeout);
restore_flags(flags);
}
--- drivers/char/ftape/lowlevel/fdc-io.c Fri Dec 3 18:51:50 1999
+++ drivers/char/ftape/lowlevel/fdc-io.c.new Fri Sep 1 03:56:35 2000
@@ -386,7 +386,6 @@
int fdc_interrupt_wait(unsigned int time)
{
DECLARE_WAITQUEUE(wait,current);
- sigset_t old_sigmask;
static int resetting = 0;
long timeout;

@@ -404,23 +403,12 @@
/* timeout time will be up to USPT microseconds too long ! */
timeout = (1000 * time + FT_USPT - 1) / FT_USPT;

- spin_lock_irq(&current->sigmask_lock);
- old_sigmask = current->blocked;
- sigfillset(&current->blocked);
- recalc_sigpending(current);
- spin_unlock_irq(&current->sigmask_lock);
-
- current->state = TASK_INTERRUPTIBLE;
add_wait_queue(&ftape_wait_intr, &wait);
- while (!ft_interrupt_seen && (current->state == TASK_INTERRUPTIBLE)) {
+ while (!ft_interrupt_seen && timeout) {
+ current->state = TASK_UNINTERRUPTIBLE;
timeout = schedule_timeout(timeout);
}

- spin_lock_irq(&current->sigmask_lock);
- current->blocked = old_sigmask;
- recalc_sigpending(current);
- spin_unlock_irq(&current->sigmask_lock);
-
remove_wait_queue(&ftape_wait_intr, &wait);
/* the following IS necessary. True: as well
* wake_up_interruptible() as the schedule() set TASK_RUNNING
--- drivers/sound/cmpci.c Sat Aug 26 16:26:46 2000
+++ drivers/sound/cmpci.c.new Fri Sep 1 03:58:33 2000
@@ -1194,9 +1194,9 @@

if (s->dma_dac.mapped || !s->dma_dac.ready)
return 0;
- current->state = TASK_INTERRUPTIBLE;
add_wait_queue(&s->dma_dac.wait, &wait);
for (;;) {
+ current->state = TASK_INTERRUPTIBLE;
spin_lock_irqsave(&s->lock, flags);
count = s->dma_dac.count;
spin_unlock_irqrestore(&s->lock, flags);
@@ -2031,9 +2031,9 @@

lock_kernel();
if (file->f_mode & FMODE_WRITE) {
- __set_current_state(TASK_INTERRUPTIBLE);
add_wait_queue(&s->midi.owait, &wait);
for (;;) {
+ __set_current_state(TASK_INTERRUPTIBLE);
spin_lock_irqsave(&s->lock, flags);
count = s->midi.ocnt;
spin_unlock_irqrestore(&s->lock, flags);
--- drivers/sound/maestro.c Sat Aug 26 16:26:50 2000
+++ drivers/sound/maestro.c.new Fri Sep 1 03:59:56 2000
@@ -2122,9 +2122,9 @@

if (s->dma_dac.mapped || !s->dma_dac.ready)
return 0;
- current->state = TASK_INTERRUPTIBLE;
add_wait_queue(&s->dma_dac.wait, &wait);
for (;;) {
+ current->state = TASK_INTERRUPTIBLE;
/* XXX uhm.. questionable locking*/
spin_lock_irqsave(&s->lock, flags);
count = s->dma_dac.count;
@@ -2140,8 +2140,6 @@
}
tmo = (count * HZ) / s->ratedac;
tmo >>= sample_shift[(s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_MASK];
- /* XXX this is just broken. someone is waking us up alot, or schedule_timeout is broken.
- or something. who cares. - zach */
if (!schedule_timeout(tmo ? tmo : 1) && tmo)
M_printk(KERN_DEBUG "maestro: dma timed out?? %ld\n",jiffies);
}
--- drivers/isdn/isdnloop/isdnloop.c Wed Nov 17 18:50:29 1999
+++ drivers/isdn/isdnloop/isdnloop.c.new Fri Sep 1 04:03:34 2000
@@ -1196,8 +1196,10 @@
if (!card->leased) {
card->leased = 1;
while (card->ptype == ISDN_PTYPE_UNKNOWN) {
+ set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(10);
}
+ set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(10);
sprintf(cbuf, "00;FV2ON\n01;EAZ1\n02;EAZ2\n");
i = isdnloop_writecmd(cbuf, strlen(cbuf), 0, card);
--- drivers/usb/devio.c Sat Aug 26 16:26:55 2000
+++ drivers/usb/devio.c.new Fri Sep 1 04:04:43 2000
@@ -84,10 +84,10 @@
add_wait_queue(&s.wait, &wait);
urb->context = &s;
urb->complete = sync_completed;
- set_current_state(TASK_INTERRUPTIBLE);
if ((ret = usb_submit_urb(urb)))
goto out;
while (urb->status == -EINPROGRESS) {
+ set_current_state(TASK_INTERRUPTIBLE);
tmdiff = tm - jiffies;
if (tmdiff <= 0) {
ret = -ETIMEDOUT;
--- drivers/usb/usb.c Sat Aug 26 16:26:58 2000
+++ drivers/usb/usb.c.new Fri Sep 1 04:10:47 2000
@@ -865,7 +865,6 @@
awd.wakeup = &wqh;
awd.handler = 0;
init_waitqueue_head(&wqh);
- current->state = TASK_INTERRUPTIBLE;
add_wait_queue(&wqh, &wait);
urb->context = &awd;
status = usb_submit_urb(urb);
@@ -877,8 +876,10 @@
}

if (urb->status == -EINPROGRESS) {
- while (timeout && urb->status == -EINPROGRESS)
+ while (timeout && urb->status == -EINPROGRESS) {
+ current->state = TASK_UNINTERRUPTIBLE;
status = timeout = schedule_timeout(timeout);
+ }
} else
status = 1;

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

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