Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp5424175imm; Tue, 12 Jun 2018 07:40:13 -0700 (PDT) X-Google-Smtp-Source: ADUXVKLEYLwyg3SE5cStSkvzfX0XbrwqIFw0VnyjXoJt/MesLEjA1fa9IR2qGL3I6k1CV5wQzmGk X-Received: by 2002:a17:902:8c95:: with SMTP id t21-v6mr745021plo.306.1528814413764; Tue, 12 Jun 2018 07:40:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528814413; cv=none; d=google.com; s=arc-20160816; b=Ik5M4gQiAtGVenxl5o2Mew2gmrvNHGoW0rPrX1mMAeU5LX74d2CCsGFQTnNQjqq9tY saU1iI7oCTnkSxASJJvw263P1SGjBFdgVUkcHWtUkoX/nnUTCx3k4UrvOT9HtIiLTNM/ sw8UuPndi2jIrPX45fzWFAAXuPOOM3TVa9j+C4TogUI1LOgAu31DFRENSrg4hHSN5In/ blXyGLKyKLnumuvyK/Tpx2DPtkxWy5KvyG63HwofaAwaYxheEMlwSLu3D8+/r7sqI+0H 882xIL0ADC2PCtI60ec85Ma4fE+oMYpggy0AbYfkOL3z74TfIkj3uh0XSmQJHjKZv1lh AG2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:in-reply-to :subject:cc:to:from:date:arc-authentication-results; bh=cxEIdBhDruRr35lRddPmMCaXDkZ7BUUrvNQZoIYEkk4=; b=Q7mtnN7F3z+navudsKUeQ9CBGwuQeGIpJrybRBWN8HrLRHmBXQ4BMQub65cdGyX5Y+ TWWcZgD2+9weoT0ZQMUOOwGwHBDD2m2c3AomPBT+x3Z9pvjV/4ksEXfyXgBVIfj7OAl/ sHYThnyPar2LG4SuGfXPCQ64Nl7dB01rwc8WOU2pqutKUcykt5EsCnWHfB1L00zhA98u Xdhf02a3tHoOhsNf+dcDOqdnKK+pR+uJBHBI9QDoDRXtgJslr+XiqvV86SXs4h480+Ih sam3La6fQPCY5ovbEU3ycYu2ME231U7VGKY+47JHGZ6L5ptWy1T8riin38+KLOlWFOVB rCGw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r9-v6si240694pge.1.2018.06.12.07.39.59; Tue, 12 Jun 2018 07:40:13 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934110AbeFLOit (ORCPT + 99 others); Tue, 12 Jun 2018 10:38:49 -0400 Received: from iolanthe.rowland.org ([192.131.102.54]:46954 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1754290AbeFLOir (ORCPT ); Tue, 12 Jun 2018 10:38:47 -0400 Received: (qmail 3252 invoked by uid 2102); 12 Jun 2018 10:38:45 -0400 Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; 12 Jun 2018 10:38:45 -0400 Date: Tue, 12 Jun 2018 10:38:45 -0400 (EDT) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: Mikulas Patocka cc: Greg Kroah-Hartman , Ming Lei , , Subject: Re: [PATCH] usb: don't offload isochronous urb completions to ksoftirq In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 12 Jun 2018, Mikulas Patocka wrote: > I have a single-core machine with usb2 soundcard. When I increase mplayer > priority (to real-time or high non-realtime priority), the sound is > stuttering. The reason for the stuttering is that mplayer at high priority > preempts the softirq thread, preventing URBs from being completed. It was > caused by the patch 428aac8a81058 that offloads URB completion to softirq. > > This patch prevents offloading isochronous URBs to softirq to fix the > stuttering. How about just not running mplayer at such a high priority? Or raising the priority of the softirq thread? Alan Stern > > Fixes: c04ee4b1136e ("Revert "Revert "USB: EHCI: support running URB giveback in tasklet context""") > Cc: stable@vger.kernel.org > > --- > drivers/usb/core/hcd.c | 10 ++++++++++ > drivers/usb/host/ehci-q.c | 11 ++++++++++- > include/linux/usb/hcd.h | 2 ++ > 3 files changed, 22 insertions(+), 1 deletion(-) > > Index: linux-4.17/drivers/usb/core/hcd.c > =================================================================== > --- linux-4.17.orig/drivers/usb/core/hcd.c 2018-06-12 16:06:23.000000000 +0200 > +++ linux-4.17/drivers/usb/core/hcd.c 2018-06-12 16:07:51.000000000 +0200 > @@ -1858,6 +1858,16 @@ void usb_hcd_giveback_urb(struct usb_hcd > } > EXPORT_SYMBOL_GPL(usb_hcd_giveback_urb); > > +void _usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status) > +{ > + /* pass status to tasklet via unlinked */ > + if (likely(!urb->unlinked)) > + urb->unlinked = status; > + > + __usb_hcd_giveback_urb(urb); > +} > +EXPORT_SYMBOL_GPL(_usb_hcd_giveback_urb); > + > /*-------------------------------------------------------------------------*/ > > /* Cancel all URBs pending on this endpoint and wait for the endpoint's > Index: linux-4.17/drivers/usb/host/ehci-q.c > =================================================================== > --- linux-4.17.orig/drivers/usb/host/ehci-q.c 2018-06-12 16:06:23.000000000 +0200 > +++ linux-4.17/drivers/usb/host/ehci-q.c 2018-06-12 16:09:28.000000000 +0200 > @@ -238,6 +238,8 @@ static int qtd_copy_status ( > > static void > ehci_urb_done(struct ehci_hcd *ehci, struct urb *urb, int status) > +__releases(ehci->lock) > +__acquires(ehci->lock) > { > if (usb_pipetype(urb->pipe) == PIPE_INTERRUPT) { > /* ... update hc-wide periodic stats */ > @@ -264,7 +266,14 @@ ehci_urb_done(struct ehci_hcd *ehci, str > #endif > > usb_hcd_unlink_urb_from_ep(ehci_to_hcd(ehci), urb); > - usb_hcd_giveback_urb(ehci_to_hcd(ehci), urb, status); > + if (usb_pipeisoc(urb->pipe)) { > + /* complete() can reenter this HCD */ > + spin_unlock(&ehci->lock); > + _usb_hcd_giveback_urb(ehci_to_hcd(ehci), urb, status); > + spin_lock(&ehci->lock); > + } else { > + usb_hcd_giveback_urb(ehci_to_hcd(ehci), urb, status); > + } > } > > static int qh_schedule (struct ehci_hcd *ehci, struct ehci_qh *qh); > Index: linux-4.17/include/linux/usb/hcd.h > =================================================================== > --- linux-4.17.orig/include/linux/usb/hcd.h 2018-06-05 21:07:27.000000000 +0200 > +++ linux-4.17/include/linux/usb/hcd.h 2018-06-12 16:07:11.000000000 +0200 > @@ -428,6 +428,8 @@ extern int usb_hcd_submit_urb(struct urb > extern int usb_hcd_unlink_urb(struct urb *urb, int status); > extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, > int status); > +extern void _usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, > + int status); > extern int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, > gfp_t mem_flags); > extern void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *, struct urb *); > -- > To unsubscribe from this list: send the line "unsubscribe linux-usb" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > >