Messages in this thread | | | Date | Mon, 25 Jan 1999 21:24:07 +0100 (CET) | From | MOLNAR Ingo <> | Subject | Re: down_interruptible and timers |
| |
On Sat, 23 Jan 1999, Tim Waugh wrote:
> Here's a code snippet from a module I'm compiling against the 2.2.0-pre9 > source:
> false_alarm: > timer.expires = jiffies + HZ; > timer.data = (unsigned long) port; > timer.function = (timer_fn) parport_ieee1284_wakeup; > add_timer (&timer);
> printk (KERN_DEBUG "No signal pending\n"); > if (!time_before (jiffies, expire)) { > /* Timed out. */ > printk (KERN_DEBUG "Timed out\n"); > break; > } > > ecrval = inb (ecr); > if (!(ecrval & (1<<2))) > goto false_alarm; > continue; > }
i think here is your problem. You've returned from down_interruptible without having a signal, this means you _got_ the semaphore. In this case you should not do the 'goto false_alarm' because you will down() forever.
also, you say the timer wakes you up, but only if everything is OK. You should rather have a timer for the case that the hardware doesnt respond, this will then up() your process, and the process might retry 5 times if the hardware is not yet OK.
-- mingo
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |