Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c9862e5 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

USB: fix signed jiffies issue in autosuspend logic



This patch (as897) changes the autosuspend timer code to use the
standard types and macros in dealing with jiffies values.

Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent ecb658d3
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -932,7 +932,7 @@ static int autosuspend_check(struct usb_device *udev)
{
	int			i;
	struct usb_interface	*intf;
	long			suspend_time;
	unsigned long		suspend_time;

	/* For autosuspend, fail fast if anything is in use or autosuspend
	 * is disabled.  Also fail if any interfaces require remote wakeup
@@ -964,11 +964,18 @@ static int autosuspend_check(struct usb_device *udev)
	/* If everything is okay but the device hasn't been idle for long
	 * enough, queue a delayed autosuspend request.
	 */
	suspend_time -= jiffies;
	if (suspend_time > 0) {
		if (!timer_pending(&udev->autosuspend.timer))
	if (time_after(suspend_time, jiffies)) {
		if (!timer_pending(&udev->autosuspend.timer)) {

			/* The value of jiffies may change between the
			 * time_after() comparison above and the subtraction
			 * below.  That's okay; the system behaves sanely
			 * when a timer is registered for the present moment
			 * or for the past.
			 */
			queue_delayed_work(ksuspend_usb_wq, &udev->autosuspend,
					suspend_time);
					suspend_time - jiffies);
			}
		return -EAGAIN;
	}
	return 0;