From: Jung Daehwan <dh10.jung@samsung.com>
To: Puma Hsu <pumahsu@google.com>
Cc: Wesley Cheng <quic_wcheng@quicinc.com>,
srinivas.kandagatla@linaro.org, mathias.nyman@intel.com,
perex@perex.cz, conor+dt@kernel.org, dmitry.torokhov@gmail.com,
corbet@lwn.net, broonie@kernel.org, lgirdwood@gmail.com,
krzk+dt@kernel.org, pierre-louis.bossart@linux.intel.com,
Thinh.Nguyen@synopsys.com, tiwai@suse.com, robh@kernel.org,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org, linux-sound@vger.kernel.org,
linux-input@vger.kernel.org, linux-usb@vger.kernel.org,
linux-arm-msm@vger.kernel.org, linux-doc@vger.kernel.org
Subject: Re: [PATCH v36 05/31] usb: host: xhci: Notify xHCI sideband on transfer ring free
Date: Tue, 1 Apr 2025 16:52:47 +0900 [thread overview]
Message-ID: <20250401075247.GF98772@ubuntu> (raw)
In-Reply-To: <CAGCq0LZJmt3BdEXTvyOBUvsCCzVD1eQE2LQ6Eh_WRs7jYmR6oA@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 6697 bytes --]
On Fri, Mar 28, 2025 at 03:45:00PM +0800, Puma Hsu wrote:
> On Wed, Mar 19, 2025 at 8:52 AM Wesley Cheng <quic_wcheng@quicinc.com> wrote:
> >
> > In the case of handling a USB bus reset, the xhci_discover_or_reset_device
> > can run without first notifying the xHCI sideband client driver to stop or
> > prevent the use of the transfer ring. It was seen that when a bus reset
> > situation happened, the USB offload driver was attempting to fetch the xHCI
> > transfer ring information, which was already freed.
> >
> > Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
>
> Tested-by: Puma Hsu <pumahsu@google.com>
>
Tested-by: Daehwan Jung <dh10.jung@samsung.com>
> > ---
> > drivers/usb/host/xhci-sideband.c | 29 ++++++++++++++++++++++++++++-
> > drivers/usb/host/xhci.c | 3 +++
> > include/linux/usb/xhci-sideband.h | 30 +++++++++++++++++++++++++++++-
> > 3 files changed, 60 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/usb/host/xhci-sideband.c b/drivers/usb/host/xhci-sideband.c
> > index 742bbc6c2d9b..d49f9886dd84 100644
> > --- a/drivers/usb/host/xhci-sideband.c
> > +++ b/drivers/usb/host/xhci-sideband.c
> > @@ -88,6 +88,30 @@ __xhci_sideband_remove_endpoint(struct xhci_sideband *sb, struct xhci_virt_ep *e
> >
> > /* sideband api functions */
> >
> > +/**
> > + * xhci_sideband_notify_ep_ring_free - notify client of xfer ring free
> > + * @sb: sideband instance for this usb device
> > + * @ep_index: usb endpoint index
> > + *
> > + * Notifies the xHCI sideband client driver of a xHCI transfer ring free
> > + * routine. This will allow for the client to ensure that all transfers
> > + * are completed.
> > + *
> > + * The callback should be synchronous, as the ring free happens after.
> > + */
> > +void xhci_sideband_notify_ep_ring_free(struct xhci_sideband *sb,
> > + unsigned int ep_index)
> > +{
> > + struct xhci_sideband_event evt;
> > +
> > + evt.type = XHCI_SIDEBAND_XFER_RING_FREE;
> > + evt.evt_data = &ep_index;
> > +
> > + if (sb->notify_client)
> > + sb->notify_client(sb->intf, &evt);
> > +}
> > +EXPORT_SYMBOL_GPL(xhci_sideband_notify_ep_ring_free);
> > +
> > /**
> > * xhci_sideband_add_endpoint - add endpoint to sideband access list
> > * @sb: sideband instance for this usb device
> > @@ -342,7 +366,9 @@ EXPORT_SYMBOL_GPL(xhci_sideband_interrupter_id);
> > * Return: pointer to a new xhci_sideband instance if successful. NULL otherwise.
> > */
> > struct xhci_sideband *
> > -xhci_sideband_register(struct usb_interface *intf, enum xhci_sideband_type type)
> > +xhci_sideband_register(struct usb_interface *intf, enum xhci_sideband_type type,
> > + int (*notify_client)(struct usb_interface *intf,
> > + struct xhci_sideband_event *evt))
> > {
> > struct usb_device *udev = interface_to_usbdev(intf);
> > struct usb_hcd *hcd = bus_to_hcd(udev->bus);
> > @@ -381,6 +407,7 @@ xhci_sideband_register(struct usb_interface *intf, enum xhci_sideband_type type)
> > sb->vdev = vdev;
> > sb->intf = intf;
> > sb->type = type;
> > + sb->notify_client = notify_client;
> > vdev->sideband = sb;
> >
> > spin_unlock_irq(&xhci->lock);
> > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> > index 61950a350432..91e2d6eac8b7 100644
> > --- a/drivers/usb/host/xhci.c
> > +++ b/drivers/usb/host/xhci.c
> > @@ -20,6 +20,7 @@
> > #include <linux/string_choices.h>
> > #include <linux/dmi.h>
> > #include <linux/dma-mapping.h>
> > +#include <linux/usb/xhci-sideband.h>
> >
> > #include "xhci.h"
> > #include "xhci-trace.h"
> > @@ -3919,6 +3920,8 @@ static int xhci_discover_or_reset_device(struct usb_hcd *hcd,
> > }
> >
> > if (ep->ring) {
> > + if (ep->sideband)
> > + xhci_sideband_notify_ep_ring_free(ep->sideband, i);
> > xhci_debugfs_remove_endpoint(xhci, virt_dev, i);
> > xhci_free_endpoint_ring(xhci, virt_dev, i);
> > }
> > diff --git a/include/linux/usb/xhci-sideband.h b/include/linux/usb/xhci-sideband.h
> > index f8722afb8a2d..45288c392f6e 100644
> > --- a/include/linux/usb/xhci-sideband.h
> > +++ b/include/linux/usb/xhci-sideband.h
> > @@ -21,6 +21,20 @@ enum xhci_sideband_type {
> > XHCI_SIDEBAND_VENDOR,
> > };
> >
> > +enum xhci_sideband_notify_type {
> > + XHCI_SIDEBAND_XFER_RING_FREE,
> > +};
> > +
> > +/**
> > + * struct xhci_sideband_event - sideband event
> > + * @type: notifier type
> > + * @evt_data: event data
> > + */
> > +struct xhci_sideband_event {
> > + enum xhci_sideband_notify_type type;
> > + void *evt_data;
> > +};
> > +
> > /**
> > * struct xhci_sideband - representation of a sideband accessed usb device.
> > * @xhci: The xhci host controller the usb device is connected to
> > @@ -30,6 +44,7 @@ enum xhci_sideband_type {
> > * @type: xHCI sideband type
> > * @mutex: mutex for sideband operations
> > * @intf: USB sideband client interface
> > + * @notify_client: callback for xHCI sideband sequences
> > *
> > * FIXME usb device accessed via sideband Keeping track of sideband accessed usb devices.
> > */
> > @@ -44,10 +59,14 @@ struct xhci_sideband {
> > struct mutex mutex;
> >
> > struct usb_interface *intf;
> > + int (*notify_client)(struct usb_interface *intf,
> > + struct xhci_sideband_event *evt);
> > };
> >
> > struct xhci_sideband *
> > -xhci_sideband_register(struct usb_interface *intf, enum xhci_sideband_type type);
> > +xhci_sideband_register(struct usb_interface *intf, enum xhci_sideband_type type,
> > + int (*notify_client)(struct usb_interface *intf,
> > + struct xhci_sideband_event *evt));
> > void
> > xhci_sideband_unregister(struct xhci_sideband *sb);
> > int
> > @@ -71,4 +90,13 @@ void
> > xhci_sideband_remove_interrupter(struct xhci_sideband *sb);
> > int
> > xhci_sideband_interrupter_id(struct xhci_sideband *sb);
> > +
> > +#if IS_ENABLED(CONFIG_USB_XHCI_SIDEBAND)
> > +void xhci_sideband_notify_ep_ring_free(struct xhci_sideband *sb,
> > + unsigned int ep_index);
> > +#else
> > +static inline void xhci_sideband_notify_ep_ring_free(struct xhci_sideband *sb,
> > + unsigned int ep_index)
> > +{ }
> > +#endif /* IS_ENABLED(CONFIG_USB_XHCI_SIDEBAND) */
> > #endif /* __LINUX_XHCI_SIDEBAND_H */
> >
>
>
[-- Attachment #2: Type: text/plain, Size: 0 bytes --]
next prev parent reply other threads:[~2025-04-01 7:43 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-19 0:51 [PATCH v36 00/31] Introduce QC USB SND audio offloading support Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 01/31] xhci: sideband: add initial api to register a secondary interrupter entity Wesley Cheng
2025-03-27 6:27 ` Puma Hsu
2025-03-27 7:02 ` Greg KH
2025-03-27 10:14 ` Puma Hsu
2025-03-27 10:48 ` Greg KH
2025-03-28 4:08 ` Puma Hsu
2025-03-27 16:12 ` Wesley Cheng
2025-03-28 4:11 ` Puma Hsu
2025-04-01 2:23 ` Jung Daehwan
2025-04-01 6:55 ` Greg KH
2025-04-01 7:50 ` Jung Daehwan
2025-03-27 10:13 ` Puma Hsu
2025-03-19 0:51 ` [PATCH v36 02/31] usb: host: xhci-mem: Cleanup pending secondary event ring events Wesley Cheng
2025-03-28 7:42 ` Puma Hsu
2025-04-01 7:51 ` Jung Daehwan
2025-03-19 0:51 ` [PATCH v36 03/31] usb: host: xhci-mem: Allow for interrupter clients to choose specific index Wesley Cheng
2025-03-28 7:43 ` Puma Hsu
2025-04-01 7:51 ` Jung Daehwan
2025-03-19 0:51 ` [PATCH v36 04/31] usb: host: xhci-plat: Set XHCI max interrupters if property is present Wesley Cheng
2025-03-28 7:44 ` Puma Hsu
2025-04-01 7:52 ` Jung Daehwan
2025-03-19 0:51 ` [PATCH v36 05/31] usb: host: xhci: Notify xHCI sideband on transfer ring free Wesley Cheng
2025-03-28 7:45 ` Puma Hsu
2025-04-01 7:52 ` Jung Daehwan [this message]
2025-03-19 0:51 ` [PATCH v36 06/31] usb: dwc3: Specify maximum number of XHCI interrupters Wesley Cheng
2025-03-28 7:46 ` Puma Hsu
2025-04-01 7:53 ` Jung Daehwan
2025-03-19 0:51 ` [PATCH v36 07/31] ALSA: Add USB audio device jack type Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 08/31] ALSA: usb-audio: Export USB SND APIs for modules Wesley Cheng
2025-03-28 7:47 ` Puma Hsu
2025-04-01 7:53 ` Jung Daehwan
2025-03-19 0:51 ` [PATCH v36 09/31] ALSA: usb-audio: Check for support for requested audio format Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 10/31] ALSA: usb-audio: Save UAC sample size information Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 11/31] ALSA: usb-audio: Prevent starting of audio stream if in use Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 12/31] ALSA: usb-audio: Introduce USB SND platform op callbacks Wesley Cheng
2025-03-28 7:48 ` Puma Hsu
2025-04-01 7:53 ` Jung Daehwan
2025-03-19 0:51 ` [PATCH v36 13/31] ALSA: usb-audio: Allow for rediscovery of connected USB SND devices Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 14/31] ASoC: Add SoC USB APIs for adding an USB backend Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 15/31] ASoC: usb: Add PCM format check API for " Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 16/31] ASoC: usb: Create SOC USB SND jack kcontrol Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 17/31] ASoC: usb: Fetch ASoC card and pcm device information Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 18/31] ASoC: usb: Rediscover USB SND devices on USB port add Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 19/31] ASoC: doc: Add documentation for SOC USB Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 20/31] ASoC: dt-bindings: qcom,q6dsp-lpass-ports: Add USB_RX port Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 21/31] ASoC: dt-bindings: Update example for enabling USB offload on SM8250 Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 22/31] ASoC: qcom: qdsp6: Introduce USB AFE port to q6dsp Wesley Cheng
2025-03-25 9:24 ` Stephan Gerhold
2025-03-25 23:18 ` Wesley Cheng
2025-03-26 9:57 ` Stephan Gerhold
2025-03-31 19:52 ` Wesley Cheng
2025-04-01 8:16 ` Stephan Gerhold
2025-04-01 23:47 ` Wesley Cheng
2025-04-02 14:41 ` Stephan Gerhold
2025-04-03 0:23 ` Wesley Cheng
2025-04-03 0:54 ` Wesley Cheng
2025-04-03 13:45 ` Stephan Gerhold
2025-04-03 15:58 ` Wesley Cheng
2025-04-03 18:00 ` Stephan Gerhold
2025-04-03 21:00 ` Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 23/31] ASoC: qcom: qdsp6: q6afe: Increase APR timeout Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 24/31] ASoC: qcom: qdsp6: Add USB backend ASoC driver for Q6 Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 25/31] ASoC: qcom: qdsp6: Add headphone jack for offload connection status Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 26/31] ASoC: qcom: qdsp6: Fetch USB offload mapped card and PCM device Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 27/31] ALSA: usb-audio: qcom: Add USB QMI definitions Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 28/31] ALSA: usb-audio: qcom: Introduce QC USB SND offloading support Wesley Cheng
2025-03-25 9:47 ` Stephan Gerhold
2025-03-26 1:32 ` Wesley Cheng
2025-03-26 10:09 ` Stephan Gerhold
2025-03-27 16:57 ` Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 29/31] ALSA: usb-audio: qcom: Don't allow USB offload path if PCM device is in use Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 30/31] ALSA: usb-audio: qcom: Add USB offload route kcontrol Wesley Cheng
2025-03-25 11:35 ` Stephan Gerhold
2025-03-26 1:42 ` Wesley Cheng
2025-03-19 0:51 ` [PATCH v36 31/31] ALSA: usb-audio: qcom: Notify USB audio devices on USB offload probing Wesley Cheng
2025-03-21 13:13 ` [PATCH v36 00/31] Introduce QC USB SND audio offloading support Luca Weiss
2025-03-21 20:06 ` Wesley Cheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250401075247.GF98772@ubuntu \
--to=dh10.jung@samsung.com \
--cc=Thinh.Nguyen@synopsys.com \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=corbet@lwn.net \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=krzk+dt@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=perex@perex.cz \
--cc=pierre-louis.bossart@linux.intel.com \
--cc=pumahsu@google.com \
--cc=quic_wcheng@quicinc.com \
--cc=robh@kernel.org \
--cc=srinivas.kandagatla@linaro.org \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.