mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
Introduce new tracepoints to the USB core to improve debuggability of USB device lifecycle events. The following tracepoints are added: - usb_alloc_dev: Triggered when a new USB device structure is allocated, providing insights into early device setup. - usb_set_device_state: Triggered when the USB device state changes, allowing observation of the device's state transitions. These tracepoints capture detailed information about the USB device, including its name, speed, state, bus current value, and authorized flag. This will aid developers in diagnosing issues related to device enumeration within the USB subsystem. Examples: usb_alloc_dev: usb 1-1 speed UNKNOWN state attached 0mA [authorized] usb_set_device_state: usb 1-1 speed UNKNOWN state powered 0mA [authorized] usb_set_device_state: usb 1-1 speed full-speed state default 500mA [authorized] usb_set_device_state: usb 1-1 speed full-speed state default 500mA [authorized] usb_set_device_state: usb 1-1 speed full-speed state addressed 500mA [authorized] usb_set_device_state: usb 1-1 speed full-speed state configured 500mA [authorized] usb_set_device_state: usb 1-1 speed full-speed state suspended 500mA [authorized] usb_set_device_state: usb 1-1 speed full-speed state not attached 500mA [authorized] 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-2-5a14b5b9d4e0@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) 2025 Google LLC
|
|
*/
|
|
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM usbcore
|
|
|
|
#if !defined(_USB_CORE_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _USB_CORE_TRACE_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/tracepoint.h>
|
|
#include <linux/usb.h>
|
|
|
|
DECLARE_EVENT_CLASS(usb_core_log_usb_device,
|
|
TP_PROTO(struct usb_device *udev),
|
|
TP_ARGS(udev),
|
|
TP_STRUCT__entry(
|
|
__string(name, dev_name(&udev->dev))
|
|
__field(enum usb_device_speed, speed)
|
|
__field(enum usb_device_state, state)
|
|
__field(unsigned short, bus_mA)
|
|
__field(unsigned, authorized)
|
|
),
|
|
TP_fast_assign(
|
|
__assign_str(name);
|
|
__entry->speed = udev->speed;
|
|
__entry->state = udev->state;
|
|
__entry->bus_mA = udev->bus_mA;
|
|
__entry->authorized = udev->authorized;
|
|
),
|
|
TP_printk("usb %s speed %s state %s %dmA [%s]",
|
|
__get_str(name),
|
|
usb_speed_string(__entry->speed),
|
|
usb_state_string(__entry->state),
|
|
__entry->bus_mA,
|
|
__entry->authorized ? "authorized" : "unauthorized")
|
|
);
|
|
|
|
DEFINE_EVENT(usb_core_log_usb_device, usb_set_device_state,
|
|
TP_PROTO(struct usb_device *udev),
|
|
TP_ARGS(udev)
|
|
);
|
|
|
|
DEFINE_EVENT(usb_core_log_usb_device, usb_alloc_dev,
|
|
TP_PROTO(struct usb_device *udev),
|
|
TP_ARGS(udev)
|
|
);
|
|
|
|
|
|
#endif /* _USB_CORE_TRACE_H */
|
|
|
|
/* this part has to be here */
|
|
|
|
#undef TRACE_INCLUDE_PATH
|
|
#define TRACE_INCLUDE_PATH .
|
|
|
|
#undef TRACE_INCLUDE_FILE
|
|
#define TRACE_INCLUDE_FILE trace
|
|
|
|
#include <trace/define_trace.h>
|