aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/misc/usbtest.c
diff options
context:
space:
mode:
authorKees Cook <keescook@chromium.org>2017-10-22 20:57:22 -0400
committerKees Cook <keescook@chromium.org>2017-11-01 14:44:52 -0400
commit7d221856add016ef6cc0f4c0cad8e5d2612feedb (patch)
treedf4201b5251737a21f46ab55e805b27bdd6e4475 /drivers/usb/misc/usbtest.c
parent254db5bd075427b0f71ea112b30c924fb22bd0fd (diff)
usb: usbtest: Convert timers to use timer_setup()
In preparation for unconditionally passing the struct timer_list pointer to all timer callbacks, switch to using the new timer_setup() and from_timer() to pass the timer pointer explicitly. Also adds missing call to destroy_timer_on_stack(); Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Felipe Balbi <felipe.balbi@linux.intel.com> Cc: Alan Stern <stern@rowland.harvard.edu> Cc: "Gustavo A. R. Silva" <garsilva@embeddedor.com> Cc: linux-usb@vger.kernel.org Signed-off-by: Kees Cook <keescook@chromium.org> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/misc/usbtest.c')
-rw-r--r--drivers/usb/misc/usbtest.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index eee82ca55b7b..b1ad69edf839 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -575,11 +575,16 @@ alloc_sglist(int nents, int max, int vary, struct usbtest_dev *dev, int pipe)
575 return sg; 575 return sg;
576} 576}
577 577
578static void sg_timeout(unsigned long _req) 578struct sg_timeout {
579 struct timer_list timer;
580 struct usb_sg_request *req;
581};
582
583static void sg_timeout(struct timer_list *t)
579{ 584{
580 struct usb_sg_request *req = (struct usb_sg_request *) _req; 585 struct sg_timeout *timeout = from_timer(timeout, t, timer);
581 586
582 usb_sg_cancel(req); 587 usb_sg_cancel(timeout->req);
583} 588}
584 589
585static int perform_sglist( 590static int perform_sglist(
@@ -593,9 +598,11 @@ static int perform_sglist(
593{ 598{
594 struct usb_device *udev = testdev_to_usbdev(tdev); 599 struct usb_device *udev = testdev_to_usbdev(tdev);
595 int retval = 0; 600 int retval = 0;
596 struct timer_list sg_timer; 601 struct sg_timeout timeout = {
602 .req = req,
603 };
597 604
598 setup_timer_on_stack(&sg_timer, sg_timeout, (unsigned long) req); 605 timer_setup_on_stack(&timeout.timer, sg_timeout, 0);
599 606
600 while (retval == 0 && iterations-- > 0) { 607 while (retval == 0 && iterations-- > 0) {
601 retval = usb_sg_init(req, udev, pipe, 608 retval = usb_sg_init(req, udev, pipe,
@@ -606,13 +613,14 @@ static int perform_sglist(
606 613
607 if (retval) 614 if (retval)
608 break; 615 break;
609 mod_timer(&sg_timer, jiffies + 616 mod_timer(&timeout.timer, jiffies +
610 msecs_to_jiffies(SIMPLE_IO_TIMEOUT)); 617 msecs_to_jiffies(SIMPLE_IO_TIMEOUT));
611 usb_sg_wait(req); 618 usb_sg_wait(req);
612 if (!del_timer_sync(&sg_timer)) 619 if (!del_timer_sync(&timeout.timer))
613 retval = -ETIMEDOUT; 620 retval = -ETIMEDOUT;
614 else 621 else
615 retval = req->status; 622 retval = req->status;
623 destroy_timer_on_stack(&timeout.timer);
616 624
617 /* FIXME check resulting data pattern */ 625 /* FIXME check resulting data pattern */
618 626