Linux USB
 help / color / mirror / Atom feed
* [PATCH] usb: udc: Add trace event for usb_gadget_set_state
@ 2025-08-18  8:27 Kuen-Han Tsai
  2025-09-06 13:16 ` Greg KH
  0 siblings, 1 reply; 3+ messages in thread
From: Kuen-Han Tsai @ 2025-08-18  8:27 UTC (permalink / raw)
  To: gregkh, royluo, jkeeping, stern; +Cc: linux-usb, linux-kernel, Kuen-Han Tsai

While the userspace program can be notified of gadget state changes,
timing issue can lead to missed transitions when reading the state
value.

Introduce a trace event for usb_gadget_set_state to reliably track state
transitions.

Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
---
 drivers/usb/gadget/udc/core.c  | 1 +
 drivers/usb/gadget/udc/trace.h | 5 +++++
 2 files changed, 6 insertions(+)

diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
index d709e24c1fd4..e28fea614496 100644
--- a/drivers/usb/gadget/udc/core.c
+++ b/drivers/usb/gadget/udc/core.c
@@ -1125,6 +1125,7 @@ void usb_gadget_set_state(struct usb_gadget *gadget,
 {
 	gadget->state = state;
 	schedule_work(&gadget->work);
+	trace_usb_gadget_set_state(gadget, 0);
 }
 EXPORT_SYMBOL_GPL(usb_gadget_set_state);
 
diff --git a/drivers/usb/gadget/udc/trace.h b/drivers/usb/gadget/udc/trace.h
index 4e334298b0e8..fa3e6ddf0a12 100644
--- a/drivers/usb/gadget/udc/trace.h
+++ b/drivers/usb/gadget/udc/trace.h
@@ -81,6 +81,11 @@ DECLARE_EVENT_CLASS(udc_log_gadget,
 		__entry->ret)
 );
 
+DEFINE_EVENT(udc_log_gadget, usb_gadget_set_state,
+	TP_PROTO(struct usb_gadget *g, int ret),
+	TP_ARGS(g, ret)
+);
+
 DEFINE_EVENT(udc_log_gadget, usb_gadget_frame_number,
 	TP_PROTO(struct usb_gadget *g, int ret),
 	TP_ARGS(g, ret)
-- 
2.51.0.rc1.163.g2494970778-goog


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] usb: udc: Add trace event for usb_gadget_set_state
  2025-08-18  8:27 [PATCH] usb: udc: Add trace event for usb_gadget_set_state Kuen-Han Tsai
@ 2025-09-06 13:16 ` Greg KH
  2025-09-11  7:27   ` Kuen-Han Tsai
  0 siblings, 1 reply; 3+ messages in thread
From: Greg KH @ 2025-09-06 13:16 UTC (permalink / raw)
  To: Kuen-Han Tsai; +Cc: royluo, jkeeping, stern, linux-usb, linux-kernel

On Mon, Aug 18, 2025 at 04:27:19PM +0800, Kuen-Han Tsai wrote:
> While the userspace program can be notified of gadget state changes,
> timing issue can lead to missed transitions when reading the state
> value.
> 
> Introduce a trace event for usb_gadget_set_state to reliably track state
> transitions.
> 
> Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
> ---
>  drivers/usb/gadget/udc/core.c  | 1 +
>  drivers/usb/gadget/udc/trace.h | 5 +++++
>  2 files changed, 6 insertions(+)
> 
> diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
> index d709e24c1fd4..e28fea614496 100644
> --- a/drivers/usb/gadget/udc/core.c
> +++ b/drivers/usb/gadget/udc/core.c
> @@ -1125,6 +1125,7 @@ void usb_gadget_set_state(struct usb_gadget *gadget,
>  {
>  	gadget->state = state;
>  	schedule_work(&gadget->work);
> +	trace_usb_gadget_set_state(gadget, 0);

Will this show the state the gadget has been set to?  And why not just
do that in the work callback, as that is when it really happens.

What is the output of this trace line?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] usb: udc: Add trace event for usb_gadget_set_state
  2025-09-06 13:16 ` Greg KH
@ 2025-09-11  7:27   ` Kuen-Han Tsai
  0 siblings, 0 replies; 3+ messages in thread
From: Kuen-Han Tsai @ 2025-09-11  7:27 UTC (permalink / raw)
  To: Greg KH; +Cc: royluo, jkeeping, stern, linux-usb, linux-kernel

Hi Greg,

On Sat, Sep 6, 2025 at 9:16 PM Greg KH <gregkh@linuxfoundation.org> wrote:
>
> On Mon, Aug 18, 2025 at 04:27:19PM +0800, Kuen-Han Tsai wrote:
> > While the userspace program can be notified of gadget state changes,
> > timing issue can lead to missed transitions when reading the state
> > value.
> >
> > Introduce a trace event for usb_gadget_set_state to reliably track state
> > transitions.
> >
> > Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
> > ---
> >  drivers/usb/gadget/udc/core.c  | 1 +
> >  drivers/usb/gadget/udc/trace.h | 5 +++++
> >  2 files changed, 6 insertions(+)
> >
> > diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
> > index d709e24c1fd4..e28fea614496 100644
> > --- a/drivers/usb/gadget/udc/core.c
> > +++ b/drivers/usb/gadget/udc/core.c
> > @@ -1125,6 +1125,7 @@ void usb_gadget_set_state(struct usb_gadget *gadget,
> >  {
> >       gadget->state = state;
> >       schedule_work(&gadget->work);
> > +     trace_usb_gadget_set_state(gadget, 0);
>
> Will this show the state the gadget has been set to?  And why not just
> do that in the work callback, as that is when it really happens.

Yes, it shows the new state by logging the state field from the gadget object.

The work callback is for handling asynchronous sysfs notifications
that occur later. Placing the tracepoint here accurately reflects when
the state change actually happens.

>
> What is the output of this trace line?
>

The output looks like

usb_gadget_set_state: speed 5/5 state 5 100mA
[sg:self-powered:activated:connected] --> 0
usb_gadget_set_state: speed 5/5 state 6 100mA
[sg:self-powered:activated:connected] --> 0
usb_gadget_set_state: speed 5/5 state 7 100mA
[sg:self-powered:activated:connected] --> 0
usb_gadget_set_state: speed 5/5 state 7 900mA
[sg:bus-powered:activated:connected] --> 0

Regards,
Kuen-Han

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-09-11  7:28 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-18  8:27 [PATCH] usb: udc: Add trace event for usb_gadget_set_state Kuen-Han Tsai
2025-09-06 13:16 ` Greg KH
2025-09-11  7:27   ` Kuen-Han Tsai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox