]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
usb: core: Centralize device state update logic
authorKuen-Han Tsai <khtsai@google.com>
Tue, 14 Oct 2025 19:50:51 +0000 (03:50 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Oct 2025 08:58:30 +0000 (10:58 +0200)
Introduce a new static function, update_usb_device_state(), to
centralize the process of changing a device's state, including the
management of active_duration during suspend/resume transitions.

This change prepares for adding tracepoints, allowing tracing logic to
be added in a single, central location within the new helper function.

Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
Link: https://patch.msgid.link/20251015-usbcore-tracing-v2-1-5a14b5b9d4e0@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/core/hub.c

index c8a543af3ad9b006446144af8e777927f225f8c2..f2314da01159de53117df673d6f2edc20988e7f5 100644 (file)
@@ -2142,6 +2142,20 @@ static void update_port_device_state(struct usb_device *udev)
        }
 }
 
+static void update_usb_device_state(struct usb_device *udev,
+                                   enum usb_device_state new_state)
+{
+       if (udev->state == USB_STATE_SUSPENDED &&
+           new_state != USB_STATE_SUSPENDED)
+               udev->active_duration -= jiffies;
+       else if (new_state == USB_STATE_SUSPENDED &&
+                udev->state != USB_STATE_SUSPENDED)
+               udev->active_duration += jiffies;
+
+       udev->state = new_state;
+       update_port_device_state(udev);
+}
+
 static void recursively_mark_NOTATTACHED(struct usb_device *udev)
 {
        struct usb_hub *hub = usb_hub_to_struct_hub(udev);
@@ -2151,10 +2165,7 @@ static void recursively_mark_NOTATTACHED(struct usb_device *udev)
                if (hub->ports[i]->child)
                        recursively_mark_NOTATTACHED(hub->ports[i]->child);
        }
-       if (udev->state == USB_STATE_SUSPENDED)
-               udev->active_duration -= jiffies;
-       udev->state = USB_STATE_NOTATTACHED;
-       update_port_device_state(udev);
+       update_usb_device_state(udev, USB_STATE_NOTATTACHED);
 }
 
 /**
@@ -2204,14 +2215,7 @@ void usb_set_device_state(struct usb_device *udev,
                        else
                                wakeup = 0;
                }
-               if (udev->state == USB_STATE_SUSPENDED &&
-                       new_state != USB_STATE_SUSPENDED)
-                       udev->active_duration -= jiffies;
-               else if (new_state == USB_STATE_SUSPENDED &&
-                               udev->state != USB_STATE_SUSPENDED)
-                       udev->active_duration += jiffies;
-               udev->state = new_state;
-               update_port_device_state(udev);
+               update_usb_device_state(udev, new_state);
        } else
                recursively_mark_NOTATTACHED(udev);
        spin_unlock_irqrestore(&device_state_lock, flags);