1 diff -ur linux-gpib-4.1.0/drivers/gpib/agilent_82357a/agilent_82357a.c linux-gpib-4.1.0-k415/drivers/gpib/agilent_82357a/agilent_82357a.c
2 --- linux-gpib-4.1.0/drivers/gpib/agilent_82357a/agilent_82357a.c 2017-01-16 10:26:30.000000000 +0100
3 +++ linux-gpib-4.1.0-k415/drivers/gpib/agilent_82357a/agilent_82357a.c 2018-01-29 20:55:10.341502118 +0100
5 up(&context->complete);
8 +#ifdef HAVE_TIMER_SETUP
9 +static void agilent_82357a_timeout_handler(struct timer_list *t)
11 + agilent_82357a_private_t *a_priv = from_timer(a_priv, t, bulk_timer);
13 static void agilent_82357a_timeout_handler(unsigned long arg)
15 - agilent_82357a_urb_context_t *context = (agilent_82357a_urb_context_t *) arg;
16 + agilent_82357a_private_t *a_priv = (agilent_82357a_private_t *) arg;
18 + agilent_82357a_urb_context_t *context = &a_priv->context;
19 context->timed_out = 1;
20 up(&context->complete);
23 struct usb_device *usb_dev;
25 unsigned int out_pipe;
26 - agilent_82357a_urb_context_t context;
27 - struct timer_list *timer = NULL;
28 + agilent_82357a_urb_context_t *context = &a_priv->context;
30 *actual_data_length = 0;
31 retval = mutex_lock_interruptible(&a_priv->bulk_alloc_lock);
34 usb_dev = interface_to_usbdev(a_priv->bus_interface);
35 out_pipe = usb_sndbulkpipe(usb_dev, a_priv->bulk_out_endpoint);
36 - sema_init(&context.complete, 0);
37 - context.timed_out = 0;
38 + sema_init(&context->complete, 0);
39 + context->timed_out = 0;
40 usb_fill_bulk_urb(a_priv->bulk_urb, usb_dev, out_pipe, data, data_length,
41 - &agilent_82357a_bulk_complete, &context);
42 + &agilent_82357a_bulk_complete, context);
46 - timer = kmalloc(sizeof(struct timer_list), GFP_KERNEL);
49 - mutex_unlock(&a_priv->bulk_alloc_lock);
54 - timer->expires = jiffies + msecs_to_jiffies(timeout_msecs);
55 - timer->function = agilent_82357a_timeout_handler;
56 - timer->data = (unsigned long) &context;
59 + mod_timer(&a_priv->bulk_timer, jiffies + msecs_to_jiffies(timeout_msecs));
61 //printk("%s: submitting urb\n", __FUNCTION__);
62 retval = usb_submit_urb(a_priv->bulk_urb, GFP_KERNEL);
67 mutex_unlock(&a_priv->bulk_alloc_lock);
68 - if(down_interruptible(&context.complete))
69 + if(down_interruptible(&context->complete))
71 printk("%s: %s: interrupted\n", __FILE__, __FUNCTION__);
72 retval = -ERESTARTSYS;
75 - if(context.timed_out)
76 + if(context->timed_out)
81 *actual_data_length = a_priv->bulk_urb->actual_length;
87 - if(timer_pending(timer))
88 - del_timer_sync(timer);
90 + if(timer_pending(&a_priv->bulk_timer))
91 + del_timer_sync(&a_priv->bulk_timer);
93 mutex_lock(&a_priv->bulk_alloc_lock);
96 struct usb_device *usb_dev;
99 - agilent_82357a_urb_context_t context;
100 - struct timer_list *timer = NULL;
101 + agilent_82357a_urb_context_t *context = &a_priv->context;
103 *actual_data_length = 0;
104 retval = mutex_lock_interruptible(&a_priv->bulk_alloc_lock);
105 @@ -169,25 +162,14 @@
107 usb_dev = interface_to_usbdev(a_priv->bus_interface);
108 in_pipe = usb_rcvbulkpipe(usb_dev, AGILENT_82357_BULK_IN_ENDPOINT);
109 - sema_init(&context.complete, 0);
110 - context.timed_out = 0;
111 + sema_init(&context->complete, 0);
112 + context->timed_out = 0;
113 usb_fill_bulk_urb(a_priv->bulk_urb, usb_dev, in_pipe, data, data_length,
114 - &agilent_82357a_bulk_complete, &context);
115 + &agilent_82357a_bulk_complete, context);
119 - timer = kmalloc(sizeof(struct timer_list), GFP_KERNEL);
123 - mutex_unlock(&a_priv->bulk_alloc_lock);
127 - timer->expires = jiffies + msecs_to_jiffies(timeout_msecs);
128 - timer->function = agilent_82357a_timeout_handler;
129 - timer->data = (unsigned long) &context;
132 + mod_timer(&a_priv->bulk_timer, jiffies + msecs_to_jiffies(timeout_msecs));
134 //printk("%s: submitting urb\n", __FUNCTION__);
135 retval = usb_submit_urb(a_priv->bulk_urb, GFP_KERNEL);
137 @@ -197,13 +179,13 @@
140 mutex_unlock(&a_priv->bulk_alloc_lock);
141 - if(down_interruptible(&context.complete))
142 + if(down_interruptible(&context->complete))
144 printk("%s: %s: interrupted\n", __FILE__, __FUNCTION__);
145 retval = -ERESTARTSYS;
148 - if(context.timed_out)
149 + if(context->timed_out)
154 retval = a_priv->bulk_urb->status;
155 *actual_data_length = a_priv->bulk_urb->actual_length;
159 - if(timer_pending(timer))
161 - del_timer_sync(timer);
166 + del_timer_sync(&a_priv->bulk_timer);
168 mutex_lock(&a_priv->bulk_alloc_lock);
171 @@ -1351,13 +1328,22 @@
174 //printk("%s: finished setup_urbs()()\n", __FUNCTION__);
176 +#ifdef HAVE_TIMER_SETUP
177 + timer_setup(&a_priv->bulk_timer, agilent_82357a_timeout_handler, 0);
179 + setup_timer(&a_priv->bulk_timer, agilent_82357a_timeout_handler, (unsigned long) a_priv);
182 retval = agilent_82357a_init(board);
186 mutex_unlock(&agilent_82357a_hotplug_lock);
189 //printk("%s: finished init()\n", __FUNCTION__);
191 printk("%s: attached\n", __FUNCTION__);
192 mutex_unlock(&agilent_82357a_hotplug_lock);
194 diff -ur linux-gpib-4.1.0/drivers/gpib/agilent_82357a/agilent_82357a.h linux-gpib-4.1.0-k415/drivers/gpib/agilent_82357a/agilent_82357a.h
195 --- linux-gpib-4.1.0/drivers/gpib/agilent_82357a/agilent_82357a.h 2017-01-16 09:31:39.000000000 +0100
196 +++ linux-gpib-4.1.0-k415/drivers/gpib/agilent_82357a/agilent_82357a.h 2018-01-29 20:55:10.341502118 +0100
198 #ifndef _AGILENT_82357_H
199 #define _AGILENT_82357_H
201 +#include <linux/kernel.h>
202 #include <linux/mutex.h>
203 #include <linux/semaphore.h>
204 #include <linux/usb.h>
206 #define STATUS_DATA_LEN 8
207 #define INTERRUPT_BUF_LEN 8
211 + struct semaphore complete;
212 + unsigned timed_out : 1;
213 +} agilent_82357a_urb_context_t ;
215 // struct which defines local data for each 82357 device
218 @@ -155,17 +162,14 @@
219 struct mutex bulk_alloc_lock;
220 struct mutex interrupt_alloc_lock;
221 struct mutex control_alloc_lock;
222 + struct timer_list bulk_timer;
223 + agilent_82357a_urb_context_t context;
224 unsigned bulk_out_endpoint;
225 unsigned interrupt_in_endpoint;
226 uint8_t *status_data;
228 } agilent_82357a_private_t;
232 - struct semaphore complete;
233 - unsigned timed_out : 1;
234 -} agilent_82357a_urb_context_t;
236 struct agilent_82357a_register_pairlet
238 diff -ur linux-gpib-4.1.0/drivers/gpib/include/gpib_proto.h linux-gpib-4.1.0-k415/drivers/gpib/include/gpib_proto.h
239 --- linux-gpib-4.1.0/drivers/gpib/include/gpib_proto.h 2016-06-22 10:48:46.000000000 +0200
240 +++ linux-gpib-4.1.0-k415/drivers/gpib/include/gpib_proto.h 2018-01-29 20:55:10.341502118 +0100
242 long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg );
244 void osReset( void );
245 -void watchdog_timeout( unsigned long arg );
246 +//void watchdog_timeout( struct timer_list *t );
247 void osStartTimer( gpib_board_t *board, unsigned int usec_timeout );
248 void osRemoveTimer( gpib_board_t *board );
249 void osSendEOI( void );
250 diff -ur linux-gpib-4.1.0/drivers/gpib/include/gpib_types.h linux-gpib-4.1.0-k415/drivers/gpib/include/gpib_types.h
251 --- linux-gpib-4.1.0/drivers/gpib/include/gpib_types.h 2018-01-29 21:01:19.642149223 +0100
252 +++ linux-gpib-4.1.0-k415/drivers/gpib/include/gpib_types.h 2018-01-29 20:55:10.344835496 +0100
254 #include <linux/timer.h>
255 #include <linux/interrupt.h>
257 +#if defined(timer_setup) && defined(from_timer)
258 +#define HAVE_TIMER_SETUP
261 typedef struct gpib_interface_struct gpib_interface_t;
262 typedef struct gpib_board_struct gpib_board_t;
264 @@ -157,14 +161,21 @@
266 struct timer_list timer;
267 irqreturn_t (*handler)(int, void * PT_REGS_ARG);
268 + gpib_board_t *board;
272 static inline void init_gpib_pseudo_irq( struct gpib_pseudo_irq *pseudo_irq)
274 pseudo_irq->handler = NULL;
275 - init_timer(&pseudo_irq->timer);
276 +#ifdef HAVE_TIMER_SETUP
277 + timer_setup(&pseudo_irq->timer, NULL, 0);
279 + setup_timer(&pseudo_irq->timer, NULL, (unsigned long)pseudo_irq);
281 + smp_mb__before_atomic();
282 atomic_set(&pseudo_irq->active, 0);
283 + smp_mb__after_atomic();
286 /* list so we can make a linked list of drivers */
287 diff -ur linux-gpib-4.1.0/drivers/gpib/ni_usb/ni_usb_gpib.c linux-gpib-4.1.0-k415/drivers/gpib/ni_usb/ni_usb_gpib.c
288 --- linux-gpib-4.1.0/drivers/gpib/ni_usb/ni_usb_gpib.c 2017-09-02 19:29:49.000000000 +0200
289 +++ linux-gpib-4.1.0-k415/drivers/gpib/ni_usb/ni_usb_gpib.c 2018-01-29 20:55:10.341502118 +0100
291 up(&context->complete);
294 -static void ni_usb_timeout_handler(unsigned long arg)
295 +#ifdef HAVE_TIMER_SETUP
296 +static void ni_usb_timeout_handler(struct timer_list *t)
298 - ni_usb_urb_context_t *context = (ni_usb_urb_context_t *) arg;
299 + ni_usb_private_t *ni_priv = from_timer(ni_priv, t, bulk_timer);
301 +static void ni_usb_timeout_handler (unsigned long arg)
303 + ni_usb_private_t *ni_priv = (ni_usb_private_t *) arg;
305 + ni_usb_urb_context_t *context = &ni_priv->context;
306 context->timed_out = 1;
307 up(&context->complete);
310 struct usb_device *usb_dev;
312 unsigned int out_pipe;
313 - ni_usb_urb_context_t context;
314 - struct timer_list timer;
315 + ni_usb_urb_context_t *context = &ni_priv->context;
317 *actual_data_length = 0;
318 mutex_lock(&ni_priv->bulk_transfer_lock);
319 @@ -117,24 +123,19 @@
321 usb_dev = interface_to_usbdev(ni_priv->bus_interface);
322 out_pipe = usb_sndbulkpipe(usb_dev, ni_priv->bulk_out_endpoint);
323 - sema_init(&context.complete, 0);
324 - context.timed_out = 0;
325 + sema_init(&context->complete, 0);
326 + context->timed_out = 0;
327 usb_fill_bulk_urb(ni_priv->bulk_urb, usb_dev, out_pipe, data, data_length,
328 - &ni_usb_bulk_complete, &context);
329 - init_timer(&timer);
330 + &ni_usb_bulk_complete, context);
334 - timer.expires = jiffies + msecs_to_jiffies(timeout_msecs);
335 - timer.function = ni_usb_timeout_handler;
336 - timer.data = (unsigned long) &context;
339 + mod_timer(&ni_priv->bulk_timer, jiffies + msecs_to_jiffies(timeout_msecs));
341 //printk("%s: submitting urb\n", __FUNCTION__);
342 retval = usb_submit_urb(ni_priv->bulk_urb, GFP_KERNEL);
345 - if(timer_pending(&timer))
346 - del_timer_sync(&timer);
347 + del_timer_sync(&ni_priv->bulk_timer);
348 usb_free_urb(ni_priv->bulk_urb);
349 ni_priv->bulk_urb = NULL;
350 printk("%s: failed to submit bulk out urb, retval=%i\n", __FILE__, retval);
351 @@ -142,16 +143,16 @@
354 mutex_unlock(&ni_priv->bulk_transfer_lock);
355 - down(&context.complete); // wait for ni_usb_bulk_complete
356 - if(context.timed_out)
357 + down(&context->complete); // wait for ni_usb_bulk_complete
358 + if(context->timed_out)
360 usb_kill_urb(ni_priv->bulk_urb);
361 printk("%s: killed urb due to timeout\n", __FUNCTION__);
364 retval = ni_priv->bulk_urb->status;
365 - if(timer_pending(&timer))
366 - del_timer_sync(&timer);
368 + del_timer_sync(&ni_priv->bulk_timer);
369 *actual_data_length = ni_priv->bulk_urb->actual_length;
370 mutex_lock(&ni_priv->bulk_transfer_lock);
371 usb_free_urb(ni_priv->bulk_urb);
373 struct usb_device *usb_dev;
375 unsigned int in_pipe;
376 - ni_usb_urb_context_t context;
377 - struct timer_list timer;
378 + ni_usb_urb_context_t *context = &ni_priv->context;
380 *actual_data_length = 0;
381 mutex_lock(&ni_priv->bulk_transfer_lock);
382 @@ -206,24 +206,19 @@
384 usb_dev = interface_to_usbdev(ni_priv->bus_interface);
385 in_pipe = usb_rcvbulkpipe(usb_dev, ni_priv->bulk_in_endpoint);
386 - sema_init(&context.complete, 0);
387 - context.timed_out = 0;
388 + sema_init(&context->complete, 0);
389 + context->timed_out = 0;
390 usb_fill_bulk_urb(ni_priv->bulk_urb, usb_dev, in_pipe, data, data_length,
391 - &ni_usb_bulk_complete, &context);
392 - init_timer(&timer);
393 + &ni_usb_bulk_complete, context);
397 - timer.expires = jiffies + msecs_to_jiffies(timeout_msecs);
398 - timer.function = ni_usb_timeout_handler;
399 - timer.data = (unsigned long) &context;
402 + mod_timer(&ni_priv->bulk_timer, jiffies + msecs_to_jiffies(timeout_msecs));
404 //printk("%s: submitting urb\n", __FUNCTION__);
405 retval = usb_submit_urb(ni_priv->bulk_urb, GFP_KERNEL);
408 - if(timer_pending(&timer))
409 - del_timer_sync(&timer);
410 + del_timer_sync(&ni_priv->bulk_timer);
411 usb_free_urb(ni_priv->bulk_urb);
412 ni_priv->bulk_urb = NULL;
413 printk("%s: failed to submit bulk out urb, retval=%i\n", __FILE__, retval);
415 mutex_unlock(&ni_priv->bulk_transfer_lock);
418 - if(down_interruptible(&context.complete))
419 + if(down_interruptible(&context->complete))
421 /* If we got interrupted by a signal while waiting for the usb gpib
422 to respond, we should send a stop command so it will finish
423 @@ -242,21 +237,21 @@
424 retval = -ERESTARTSYS;
425 /* now do an uninterruptible wait, it shouldn't take long
426 for the board to respond now. */
427 - down(&context.complete);
428 + down(&context->complete);
432 - down(&context.complete);
433 + down(&context->complete);
435 - if(context.timed_out)
436 + if(context->timed_out)
438 usb_kill_urb(ni_priv->bulk_urb);
439 printk("%s: killed urb due to timeout\n", __FUNCTION__);
441 }else if(ni_priv->bulk_urb->status)
442 retval = ni_priv->bulk_urb->status;
443 - if(timer_pending(&timer))
444 - del_timer_sync(&timer);
446 + del_timer_sync(&ni_priv->bulk_timer);
447 *actual_data_length = ni_priv->bulk_urb->actual_length;
448 mutex_lock(&ni_priv->bulk_transfer_lock);
449 usb_free_urb(ni_priv->bulk_urb);
450 @@ -2170,6 +2165,13 @@
451 mutex_unlock(&ni_usb_hotplug_lock);
455 +#ifdef HAVE_TIMER_SETUP
456 + timer_setup(&ni_priv->bulk_timer, ni_usb_timeout_handler, 0);
458 + setup_timer(&ni_priv->bulk_timer, ni_usb_timeout_handler, (unsigned long)ni_priv);
461 retval = ni_usb_init(board);
464 @@ -2182,6 +2184,7 @@
465 mutex_unlock(&ni_usb_hotplug_lock);
469 mutex_unlock(&ni_usb_hotplug_lock);
472 diff -ur linux-gpib-4.1.0/drivers/gpib/ni_usb/ni_usb_gpib.h linux-gpib-4.1.0-k415/drivers/gpib/ni_usb/ni_usb_gpib.h
473 --- linux-gpib-4.1.0/drivers/gpib/ni_usb/ni_usb_gpib.h 2017-09-01 17:32:15.000000000 +0200
474 +++ linux-gpib-4.1.0-k415/drivers/gpib/ni_usb/ni_usb_gpib.h 2018-01-29 20:55:10.341502118 +0100
476 NIUSB_HS_PLUS_INTERRUPT_IN_ENDPOINT = 0x3,
481 + struct semaphore complete;
482 + unsigned timed_out : 1;
483 +} ni_usb_urb_context_t;
485 // struct which defines private_data for ni_usb devices
489 struct mutex bulk_transfer_lock;
490 struct mutex control_transfer_lock;
491 struct mutex interrupt_transfer_lock;
492 + struct timer_list bulk_timer;
493 + ni_usb_urb_context_t context;
498 - struct semaphore complete;
499 - unsigned timed_out : 1;
500 -} ni_usb_urb_context_t;
502 struct ni_usb_status_block
505 diff -ur linux-gpib-4.1.0/drivers/gpib/sys/ibwait.c linux-gpib-4.1.0-k415/drivers/gpib/sys/ibwait.c
506 --- linux-gpib-4.1.0/drivers/gpib/sys/ibwait.c 2017-09-02 15:19:47.000000000 +0200
507 +++ linux-gpib-4.1.0-k415/drivers/gpib/sys/ibwait.c 2018-01-29 20:55:10.341502118 +0100
509 unsigned long usec_timeout;
513 +#ifdef HAVE_TIMER_SETUP
514 +static void wait_timeout( struct timer_list *t )
516 + struct wait_info *winfo = from_timer(winfo, t, timer);
518 +static void wait_timeout( unsigned long arg )
520 + struct wait_info *winfo = ( struct wait_info * ) arg;
522 + winfo->timed_out = 1;
523 + wake_up_interruptible( &winfo->board->wait );
526 static void init_wait_info( struct wait_info *winfo )
529 - init_timer( &winfo->timer );
530 winfo->timed_out = 0;
531 +#ifdef HAVE_TIMER_SETUP
532 + timer_setup_on_stack( &winfo->timer, wait_timeout, 0 );
534 + setup_timer( &winfo->timer, wait_timeout, (unsigned long)winfo );
538 static int wait_satisfied( struct wait_info *winfo, gpib_status_queue_t *status_queue,
543 -static void wait_timeout( unsigned long arg )
544 -/* Watchdog timeout routine */
546 - struct wait_info *winfo = ( struct wait_info * ) arg;
548 - winfo->timed_out = 1;
549 - wake_up_interruptible( &winfo->board->wait );
552 /* install timer interrupt handler */
553 static void startWaitTimer( struct wait_info *winfo )
554 /* Starts the timeout task */
557 if( winfo->usec_timeout > 0 )
559 - winfo->timer.expires = jiffies + usec_to_jiffies( winfo->usec_timeout );
560 - winfo->timer.function = wait_timeout;
561 - winfo->timer.data = (unsigned long) winfo;
562 - add_timer( &winfo->timer ); /* add timer */
563 + mod_timer( &winfo->timer, jiffies + usec_to_jiffies( winfo->usec_timeout ));
567 static void removeWaitTimer( struct wait_info *winfo )
569 - if( timer_pending( &winfo->timer ) )
570 - del_timer_sync( &winfo->timer );
571 + del_timer_sync( &winfo->timer );
572 +#ifdef HAVE_TIMER_SETUP
573 + destroy_timer_on_stack( &winfo->timer );
578 diff -ur linux-gpib-4.1.0/drivers/gpib/sys/osinit.c linux-gpib-4.1.0-k415/drivers/gpib/sys/osinit.c
579 --- linux-gpib-4.1.0/drivers/gpib/sys/osinit.c 2017-09-29 19:25:30.000000000 +0200
580 +++ linux-gpib-4.1.0-k415/drivers/gpib/sys/osinit.c 2018-01-29 20:55:10.341502118 +0100
582 board->locking_pid = 0;
583 spin_lock_init(&board->locking_pid_spinlock);
584 spin_lock_init(&board->spinlock);
585 - init_timer(&board->timer);
586 +#ifdef HAVE_TIMER_SETUP
587 + timer_setup(&board->timer, NULL, 0);
589 + setup_timer(&board->timer, NULL, (unsigned long)board);
594 diff -ur linux-gpib-4.1.0/drivers/gpib/sys/ostimer.c linux-gpib-4.1.0-k415/drivers/gpib/sys/ostimer.c
595 --- linux-gpib-4.1.0/drivers/gpib/sys/ostimer.c 2016-06-22 10:48:48.000000000 +0200
596 +++ linux-gpib-4.1.0-k415/drivers/gpib/sys/ostimer.c 2018-01-29 21:00:09.728177393 +0100
601 -void watchdog_timeout( unsigned long arg )
602 /* Watchdog timeout routine */
604 +#ifdef HAVE_TIMER_SETUP
605 +void watchdog_timeout( struct timer_list *t )
607 + gpib_board_t *board = from_timer(board, t, timer);
609 +void watchdog_timeout( unsigned long arg )
611 gpib_board_t *board = (gpib_board_t*) arg;
614 set_bit( TIMO_NUM, &board->status );
615 wake_up_interruptible( &board->wait );
619 if( usec_timeout > 0 )
621 - board->timer.expires = jiffies + usec_to_jiffies( usec_timeout ); /* set number of ticks */
622 board->timer.function = watchdog_timeout;
623 - board->timer.data = (unsigned long) board;
624 - add_timer( &board->timer ); /* add timer */
625 + mod_timer(&board->timer, jiffies + usec_to_jiffies( usec_timeout )); /* set number of ticks */
629 diff -ur linux-gpib-4.1.0/drivers/gpib/sys/osutil.c linux-gpib-4.1.0-k415/drivers/gpib/sys/osutil.c
630 --- linux-gpib-4.1.0/drivers/gpib/sys/osutil.c 2016-06-22 10:48:48.000000000 +0200
631 +++ linux-gpib-4.1.0-k415/drivers/gpib/sys/osutil.c 2018-01-29 20:59:08.427580118 +0100
633 return (HZ + 99) / 100;
636 +#ifdef HAVE_TIMER_SETUP
637 +void pseudo_irq_handler(struct timer_list *t)
639 + struct gpib_pseudo_irq *pseudo_irq = from_timer(pseudo_irq, t, timer);
641 void pseudo_irq_handler(unsigned long arg)
643 - gpib_board_t *board = (gpib_board_t*) arg;
644 - if(board->pseudo_irq.handler)
645 - board->pseudo_irq.handler(0, board
646 + struct gpib_pseudo_irq *pseudo_irq = (struct gpib_pseudo_irq *)arg;
648 + if(pseudo_irq->handler)
649 + pseudo_irq->handler(0, pseudo_irq->board
655 printk("gpib: bug! pseudo_irq.handler is NULL\n");
656 - if(atomic_read(&board->pseudo_irq.active))
657 - mod_timer(&board->pseudo_irq.timer, jiffies + pseudo_irq_period());
658 + if(atomic_read(&pseudo_irq->active))
659 + mod_timer(&pseudo_irq->timer, jiffies + pseudo_irq_period());
662 int gpib_request_pseudo_irq(gpib_board_t *board, irqreturn_t (*handler)(int, void * PT_REGS_ARG))
666 board->pseudo_irq.handler = handler;
667 - board->pseudo_irq.timer.expires = jiffies + pseudo_irq_period();
668 board->pseudo_irq.timer.function = pseudo_irq_handler;
669 - board->pseudo_irq.timer.data = (unsigned long) board;
670 + board->pseudo_irq.board = board;
671 atomic_set(&board->pseudo_irq.active, 1);
672 - add_timer(&board->pseudo_irq.timer);
673 + mod_timer(&board->pseudo_irq.timer, jiffies + pseudo_irq_period());