diff options
author | Kees Cook <keescook@chromium.org> | 2017-10-22 20:57:22 -0400 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2017-11-01 14:44:52 -0400 |
commit | 7d221856add016ef6cc0f4c0cad8e5d2612feedb (patch) | |
tree | df4201b5251737a21f46ab55e805b27bdd6e4475 /drivers/usb/misc/usbtest.c | |
parent | 254db5bd075427b0f71ea112b30c924fb22bd0fd (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.c | 22 |
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 | ||
578 | static void sg_timeout(unsigned long _req) | 578 | struct sg_timeout { |
579 | struct timer_list timer; | ||
580 | struct usb_sg_request *req; | ||
581 | }; | ||
582 | |||
583 | static 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 | ||
585 | static int perform_sglist( | 590 | static 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 | ||