mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
UPSTREAM: usb: dwc2: host: Giveback URB in tasklet context
In commit94dfd7edfd("USB: HCD: support giveback of URB in tasklet context") support was added to give back the URB in tasklet context. Let's take advantage of this in dwc2. This speeds up the dwc2 interrupt handler considerably. Note that this requires the change ("usb: dwc2: host: Add a delay before releasing periodic bandwidth") to come first. Note that, as per Alan Stern in <https://patchwork.kernel.org/patch/7555771/>, we also need to make sure that the extra delay before the device drivers submit more data doesn't break the scheduler. At the moment the scheduler is pretty broken (see future patches) so it's hard to be 100% certain, but I have yet to see any new breakage introduced by this delay. ...and speeding up interrupt processing for dwc2 is a huge deal because it means we've got a better chance of not missing SOF interrupts. That means we've got an overall win here. Note that when playing USB audio and using a USB webcam and having several USB keyboards plugged in, the crackling on the USB audio device is noticably reduced with this patch. Change-Id: Ieab057cad78d41492a390e9cfff825eed0f728a9 Acked-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Douglas Anderson <dianders@chromium.org> Tested-by: Heiko Stuebner <heiko@sntech.de> Tested-by: Stefan Wahren <stefan.wahren@i2se.com> Signed-off-by: Felipe Balbi <balbi@kernel.org> Signed-off-by: Huang, Tao <huangtao@rock-chips.com> (cherry picked from commit8add17cf8e)
This commit is contained in:
committed by
Huang, Tao
parent
c28b62a22f
commit
388ce3e133
@@ -2341,9 +2341,7 @@ void dwc2_host_complete(struct dwc2_hsotg *hsotg, struct dwc2_qtd *qtd,
|
||||
kfree(qtd->urb);
|
||||
qtd->urb = NULL;
|
||||
|
||||
spin_unlock(&hsotg->lock);
|
||||
usb_hcd_giveback_urb(dwc2_hsotg_to_hcd(hsotg), urb, status);
|
||||
spin_lock(&hsotg->lock);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2964,7 +2962,7 @@ static struct hc_driver dwc2_hc_driver = {
|
||||
.hcd_priv_size = sizeof(struct wrapper_priv_data),
|
||||
|
||||
.irq = _dwc2_hcd_irq,
|
||||
.flags = HCD_MEMORY | HCD_USB2,
|
||||
.flags = HCD_MEMORY | HCD_USB2 | HCD_BH,
|
||||
|
||||
.start = _dwc2_hcd_start,
|
||||
.stop = _dwc2_hcd_stop,
|
||||
|
||||
Reference in New Issue
Block a user