Merge branch 'fsnotify' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
[linux-2.6-microblaze.git] / drivers / parport / ieee1284.c
index 74cc6dd..2d1a5c7 100644 (file)
@@ -44,10 +44,11 @@ static void parport_ieee1284_wakeup (struct parport *port)
        up (&port->physport->ieee1284.irq);
 }
 
-static struct parport *port_from_cookie[PARPORT_MAX];
-static void timeout_waiting_on_port (unsigned long cookie)
+static void timeout_waiting_on_port (struct timer_list *t)
 {
-       parport_ieee1284_wakeup (port_from_cookie[cookie % PARPORT_MAX]);
+       struct parport *port = from_timer(port, t, timer);
+
+       parport_ieee1284_wakeup (port);
 }
 
 /**
@@ -69,27 +70,19 @@ static void timeout_waiting_on_port (unsigned long cookie)
 int parport_wait_event (struct parport *port, signed long timeout)
 {
        int ret;
-       struct timer_list timer;
 
        if (!port->physport->cad->timeout)
                /* Zero timeout is special, and we can't down() the
                   semaphore. */
                return 1;
 
-       init_timer_on_stack(&timer);
-       timer.expires = jiffies + timeout;
-       timer.function = timeout_waiting_on_port;
-       port_from_cookie[port->number % PARPORT_MAX] = port;
-       timer.data = port->number;
-
-       add_timer (&timer);
+       timer_setup(&port->timer, timeout_waiting_on_port, 0);
+       mod_timer(&port->timer, jiffies + timeout);
        ret = down_interruptible (&port->physport->ieee1284.irq);
-       if (!del_timer_sync(&timer) && !ret)
+       if (!del_timer_sync(&port->timer) && !ret)
                /* Timed out. */
                ret = 1;
 
-       destroy_timer_on_stack(&timer);
-
        return ret;
 }