[PATCH 2/3] USB: runtime pm: use pm_runtime_mark_last_busy

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Ming Lei <tom.leiming@xxxxxxxxx>

Since runtime pm core already defines .last_busy field in device.power,
this patch use this to replace .last_busy field defined in usb_device
and use pm_runtime_mark_last_busy to implement usb_mark_last_busy.

Signed-off-by: Ming Lei <tom.leiming@xxxxxxxxx>
---
 drivers/usb/core/driver.c |   25 ++++++++++++++-----------
 include/linux/usb.h       |    4 ++--
 2 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 1ab51b9..05a02c9 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -1329,7 +1329,7 @@ int usb_resume(struct device *dev, pm_message_t msg)
 			pm_runtime_disable(dev);
 			pm_runtime_set_active(dev);
 			pm_runtime_enable(dev);
-			udev->last_busy = jiffies;
+			usb_mark_last_busy(udev);
 			do_unbind_rebind(udev, DO_REBIND);
 		}
 	}
@@ -1397,7 +1397,7 @@ void usb_autosuspend_device(struct usb_device *udev)
 {
 	int	status;
 
-	udev->last_busy = jiffies;
+	usb_mark_last_busy(udev);
 	status = pm_runtime_put_sync(&udev->dev);
 	dev_vdbg(&udev->dev, "%s: cnt %d -> %d\n",
 			__func__, atomic_read(&udev->dev.power.usage_count),
@@ -1482,7 +1482,7 @@ void usb_autopm_put_interface(struct usb_interface *intf)
 	struct usb_device	*udev = interface_to_usbdev(intf);
 	int			status;
 
-	udev->last_busy = jiffies;
+	usb_mark_last_busy(udev);
 	atomic_dec(&intf->pm_usage_cnt);
 	status = pm_runtime_put_sync(&intf->dev);
 	dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
@@ -1512,8 +1512,8 @@ void usb_autopm_put_interface_async(struct usb_interface *intf)
 	unsigned long		last_busy;
 	int			status = 0;
 
-	last_busy = udev->last_busy;
-	udev->last_busy = jiffies;
+	last_busy = udev->dev.power.last_busy;
+	usb_mark_last_busy(udev);
 	atomic_dec(&intf->pm_usage_cnt);
 	pm_runtime_put_noidle(&intf->dev);
 
@@ -1554,7 +1554,7 @@ void usb_autopm_put_interface_no_suspend(struct usb_interface *intf)
 {
 	struct usb_device	*udev = interface_to_usbdev(intf);
 
-	udev->last_busy = jiffies;
+	usb_mark_last_busy(udev);
 	atomic_dec(&intf->pm_usage_cnt);
 	pm_runtime_put_noidle(&intf->dev);
 }
@@ -1650,7 +1650,7 @@ void usb_autopm_get_interface_no_resume(struct usb_interface *intf)
 {
 	struct usb_device	*udev = interface_to_usbdev(intf);
 
-	udev->last_busy = jiffies;
+	usb_mark_last_busy(udev);
 	atomic_inc(&intf->pm_usage_cnt);
 	pm_runtime_get_noresume(&intf->dev);
 }
@@ -1662,6 +1662,7 @@ static int autosuspend_check(struct usb_device *udev)
 	int			w, i;
 	struct usb_interface	*intf;
 	unsigned long		suspend_time, j;
+	unsigned long last_busy;
 
 	/* Fail if autosuspend is disabled, or any interfaces are in use, or
 	 * any interface drivers require remote wakeup but it isn't available.
@@ -1706,7 +1707,8 @@ static int autosuspend_check(struct usb_device *udev)
 	 * enough, queue a delayed autosuspend request.
 	 */
 	j = ACCESS_ONCE(jiffies);
-	suspend_time = udev->last_busy + udev->autosuspend_delay;
+	last_busy = udev->dev.power.last_busy;
+	suspend_time = last_busy + udev->autosuspend_delay;
 	if (time_before(j, suspend_time)) {
 		pm_schedule_suspend(&udev->dev, jiffies_to_msecs(
 				round_jiffies_up_relative(suspend_time - j)));
@@ -1735,14 +1737,15 @@ static int usb_runtime_suspend(struct device *dev)
 	 * away.
 	 */
 	if (status) {
-		udev->last_busy = jiffies +
+		unsigned long last_busy = jiffies +
 				(udev->autosuspend_delay == 0 ?
 					HZ/2 : 0);
+		udev->dev.power.last_busy = last_busy;
 	}
 
 	/* Prevent the parent from suspending immediately after */
 	else if (udev->parent)
-		udev->parent->last_busy = jiffies;
+		usb_mark_last_busy(udev->parent);
 
 	/* Runtime suspend for a USB interface doesn't mean anything. */
 	return status;
@@ -1757,7 +1760,7 @@ static int usb_runtime_resume(struct device *dev)
 	 */
 
 	status = usb_resume_both(udev, PMSG_AUTO_RESUME);
-	udev->last_busy = jiffies;
+	usb_mark_last_busy(udev);
 	return status;
 }
 
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 35fe6ab..c399031 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -20,6 +20,7 @@
 #include <linux/completion.h>	/* for struct completion */
 #include <linux/sched.h>	/* for current && schedule_timeout */
 #include <linux/mutex.h>	/* for struct mutex */
+#include <linux/pm_runtime.h>	/* for runtime PM */
 
 struct usb_device;
 struct usb_driver;
@@ -481,7 +482,6 @@ struct usb_device {
 	unsigned long active_duration;
 
 #ifdef CONFIG_PM
-	unsigned long last_busy;
 	int autosuspend_delay;
 	unsigned long connect_time;
 
@@ -527,7 +527,7 @@ extern void usb_autopm_put_interface_no_suspend(struct usb_interface *intf);
 
 static inline void usb_mark_last_busy(struct usb_device *udev)
 {
-	udev->last_busy = jiffies;
+	pm_runtime_mark_last_busy(&udev->dev);
 }
 
 #else
-- 
1.7.3

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux