From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.7 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6CE26C04AA6 for ; Tue, 30 Apr 2019 15:31:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 395112147A for ; Tue, 30 Apr 2019 15:31:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="LVUwgkJE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726105AbfD3Pbf (ORCPT ); Tue, 30 Apr 2019 11:31:35 -0400 Received: from lelv0143.ext.ti.com ([198.47.23.248]:40672 "EHLO lelv0143.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725906AbfD3Pbe (ORCPT ); Tue, 30 Apr 2019 11:31:34 -0400 Received: from lelv0265.itg.ti.com ([10.180.67.224]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id x3UFVIjv111448; Tue, 30 Apr 2019 10:31:18 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1556638278; bh=4QGSJ62ES/Rz1i9PeLAfB7uPMJpr8cbFT9IZNWvLw44=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=LVUwgkJEySc1NQiMsX7SfPcrMmupuezK/cY5XOVpW+9wsYmba8CupcBX2Z/8ciJTn eMabujMf2PJ5J2ait6x+tEDoU/sViesLPsZcoq4kWsF5adYVLcbnyUoyCeXl/RYe1z wrzaZdhGIF5WnPsr0JL9TqciPofjnJuHifm+FjLk= Received: from DLEE103.ent.ti.com (dlee103.ent.ti.com [157.170.170.33]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x3UFVICH095519 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 30 Apr 2019 10:31:18 -0500 Received: from DLEE113.ent.ti.com (157.170.170.24) by DLEE103.ent.ti.com (157.170.170.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 30 Apr 2019 10:31:18 -0500 Received: from lelv0326.itg.ti.com (10.180.67.84) by DLEE113.ent.ti.com (157.170.170.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Tue, 30 Apr 2019 10:31:18 -0500 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id x3UFVIqs113684; Tue, 30 Apr 2019 10:31:18 -0500 Date: Tue, 30 Apr 2019 10:31:18 -0500 From: Bin Liu To: "Matwey V. Kornilov" CC: , , , Subject: Re: [PATCH 6/6] usb: musb: Decrease URB starting latency in musb_advance_schedule() Message-ID: <20190430153118.GI20993@uda0271908> Mail-Followup-To: Bin Liu , "Matwey V. Kornilov" , gregkh@linuxfoundation.org, matwey.kornilov@gmail.com, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org References: <20190403185310.8437-1-matwey@sai.msu.ru> <20190403185310.8437-7-matwey@sai.msu.ru> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <20190403185310.8437-7-matwey@sai.msu.ru> User-Agent: Mutt/1.5.21 (2010-09-15) X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Greg and all devs, On Wed, Apr 03, 2019 at 09:53:10PM +0300, Matwey V. Kornilov wrote: > Previously, the algorithm was the following: > > 1. giveback current URB > 2. if current qh is not empty > then start next URB > 3. if current qh is empty > then dispose the qh, find next qh if any, and start URB. > > It may take a while to run urb->callback inside URB giveback which is > run synchronously in musb. In order to improve the latency we rearrange > the function behaviour for the case when qh is not empty: next URB is > started before URB giveback. When qh is empty then the behaviour is > intentionally kept in order not to break existing inter qh scheduling: > URB giveback could potentionally enqueue other URB to the empty qh > preventing it from being disposed. This patch changes the sequence of urb giveback in musb. before after ------ ----- 1. giveback current urb 1. start next urb if qh != empty 2. start next urb if qh != empty 2. giveback current urb I see there is a potential that the urb giveback could be out of order, for example, if urb giveback in BH and the next urb finishes before BH runs. If this potential is possible, is it a problem for any class driver? Thanks, -Bin. > > Before this patch, time spent in urb->callback led to the following > glitches between the host and a hub during isoc transfer (line 4): > > 11.624492 d= 0.000124 [130.6 + 1.050] [ 4] SPLIT > 11.624492 d= 0.000000 [130.6 + 1.467] [ 3] IN : 3.5 > 11.624493 d= 0.000000 [130.6 + 1.967] [ 37] DATA0: aa 08 [skipped...] > 11.625617 d= 0.001124 [131.7 + 1.050] [ 4] SPLIT > 11.625617 d= 0.000000 [131.7 + 1.467] [ 3] IN : 3.5 > 11.625867 d= 0.000250 [132.1 + 1.050] [ 4] SPLIT > 11.625867 d= 0.000000 [132.1 + 1.467] [ 3] IN : 3.5 > 11.625868 d= 0.000001 [132.1 + 1.983] [ 3] DATA0: 00 00 > 11.626617 d= 0.000749 [132.7 + 1.050] [ 4] SPLIT > 11.626617 d= 0.000000 [132.7 + 1.467] [ 3] IN : 3.5 > 11.626867 d= 0.000250 [133.1 + 1.050] [ 4] SPLIT > 11.626867 d= 0.000000 [133.1 + 1.467] [ 3] IN : 3.5 > 11.626868 d= 0.000000 [133.1 + 1.967] [ 3] DATA0: 00 00 > > After the hub, they look as the following and may lead to broken > perepherial transfer (as in case of PWC based webcam): > > 11.332004 d= 0.000997 [ 30.0 + 3.417] [ 3] IN : 5.5 > 11.332007 d= 0.000003 [ 30.0 + 6.833] [800] DATA0: 8a 1c [skipped...] > 11.334004 d= 0.001997 [ 32.0 + 3.417] [ 3] IN : 5.5 > 11.334007 d= 0.000003 [ 32.0 + 6.750] [ 3] DATA0: 00 00 > 11.335004 d= 0.000997 [ 33 + 3.417] [ 3] IN : 5.5 > 11.335007 d= 0.000003 [ 33 + 6.750] [ 3] DATA0: 00 00 > > Removing this glitches makes us able to successfully run 10fps > video stream from the webcam attached via USB hub. That was > previously impossible. > > Signed-off-by: Matwey V. Kornilov > --- > drivers/usb/musb/musb_host.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c > index ed99ecd4e63a..75be92873b5b 100644 > --- a/drivers/usb/musb/musb_host.c > +++ b/drivers/usb/musb/musb_host.c > @@ -85,6 +85,11 @@ static bool musb_qh_empty(struct musb_qh *qh) > return list_empty(&qh->hep->urb_list); > } > > +static bool musb_qh_singular(struct musb_qh *qh) > +{ > + return list_is_singular(&qh->hep->urb_list); > +} > + > static void musb_qh_unlink_hep(struct musb_qh *qh) > { > if (!qh->hep) > @@ -362,6 +367,19 @@ static void musb_advance_schedule(struct musb *musb, struct urb *urb, > break; > } > > + if (ready && !musb_qh_singular(qh)) { > + struct urb *next_urb = list_next_entry(urb, urb_list); > + > + musb_dbg(musb, "... next ep%d %cX urb %p", hw_ep->epnum, is_in ? 'R' : 'T', next_urb); > + musb_start_urb(musb, is_in, qh, next_urb); > + > + qh->is_ready = 0; > + musb_giveback(musb, urb, status); > + qh->is_ready = ready; > + > + return; > + } > + > qh->is_ready = 0; > musb_giveback(musb, urb, status); > qh->is_ready = ready; > -- > 2.16.4 > From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [6/6] usb: musb: Decrease URB starting latency in musb_advance_schedule() From: Bin Liu Message-Id: <20190430153118.GI20993@uda0271908> Date: Tue, 30 Apr 2019 10:31:18 -0500 To: "Matwey V. Kornilov" Cc: gregkh@linuxfoundation.org, matwey.kornilov@gmail.com, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org List-ID: SGkgR3JlZyBhbmQgYWxsIGRldnMsCgpPbiBXZWQsIEFwciAwMywgMjAxOSBhdCAwOTo1MzoxMFBN ICswMzAwLCBNYXR3ZXkgVi4gS29ybmlsb3Ygd3JvdGU6Cj4gUHJldmlvdXNseSwgdGhlIGFsZ29y aXRobSB3YXMgdGhlIGZvbGxvd2luZzoKPiAKPiAgMS4gZ2l2ZWJhY2sgY3VycmVudCBVUkIKPiAg Mi4gaWYgY3VycmVudCBxaCBpcyBub3QgZW1wdHkKPiAgICAgdGhlbiBzdGFydCBuZXh0IFVSQgo+ ICAzLiBpZiBjdXJyZW50IHFoIGlzIGVtcHR5Cj4gICAgIHRoZW4gZGlzcG9zZSB0aGUgcWgsIGZp bmQgbmV4dCBxaCBpZiBhbnksIGFuZCBzdGFydCBVUkIuCj4gCj4gSXQgbWF5IHRha2UgYSB3aGls ZSB0byBydW4gdXJiLT5jYWxsYmFjayBpbnNpZGUgVVJCIGdpdmViYWNrIHdoaWNoIGlzCj4gcnVu IHN5bmNocm9ub3VzbHkgaW4gbXVzYi4gSW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUgbGF0ZW5jeSB3 ZSByZWFycmFuZ2UKPiB0aGUgZnVuY3Rpb24gYmVoYXZpb3VyIGZvciB0aGUgY2FzZSB3aGVuIHFo IGlzIG5vdCBlbXB0eTogbmV4dCBVUkIgaXMKPiBzdGFydGVkIGJlZm9yZSBVUkIgZ2l2ZWJhY2su IFdoZW4gcWggaXMgZW1wdHkgdGhlbiB0aGUgYmVoYXZpb3VyIGlzCj4gaW50ZW50aW9uYWxseSBr ZXB0IGluIG9yZGVyIG5vdCB0byBicmVhayBleGlzdGluZyBpbnRlciBxaCBzY2hlZHVsaW5nOgo+ IFVSQiBnaXZlYmFjayBjb3VsZCBwb3RlbnRpb25hbGx5IGVucXVldWUgb3RoZXIgVVJCIHRvIHRo ZSBlbXB0eSBxaAo+IHByZXZlbnRpbmcgaXQgZnJvbSBiZWluZyBkaXNwb3NlZC4KClRoaXMgcGF0 Y2ggY2hhbmdlcyB0aGUgc2VxdWVuY2Ugb2YgdXJiIGdpdmViYWNrIGluIG11c2IuCgoJYmVmb3Jl CQkJCWFmdGVyCgktLS0tLS0JCQkJLS0tLS0KMS4gZ2l2ZWJhY2sgY3VycmVudCB1cmIJCQkxLiBz dGFydCBuZXh0IHVyYiBpZiBxaCAhPSBlbXB0eQoyLiBzdGFydCBuZXh0IHVyYiBpZiBxaCAhPSBl bXB0eQkyLiBnaXZlYmFjayBjdXJyZW50IHVyYgoKSSBzZWUgdGhlcmUgaXMgYSBwb3RlbnRpYWwg dGhhdCB0aGUgdXJiIGdpdmViYWNrIGNvdWxkIGJlIG91dCBvZiBvcmRlciwKZm9yIGV4YW1wbGUs IGlmIHVyYiBnaXZlYmFjayBpbiBCSCBhbmQgdGhlIG5leHQgdXJiIGZpbmlzaGVzIGJlZm9yZSBC SApydW5zLgoKSWYgdGhpcyBwb3RlbnRpYWwgaXMgcG9zc2libGUsIGlzIGl0IGEgcHJvYmxlbSBm b3IgYW55IGNsYXNzIGRyaXZlcj8KClRoYW5rcywKLUJpbi4KCj4gCj4gQmVmb3JlIHRoaXMgcGF0 Y2gsIHRpbWUgc3BlbnQgaW4gdXJiLT5jYWxsYmFjayBsZWQgdG8gdGhlIGZvbGxvd2luZwo+IGds aXRjaGVzIGJldHdlZW4gdGhlIGhvc3QgYW5kIGEgaHViIGR1cmluZyBpc29jIHRyYW5zZmVyIChs aW5lIDQpOgo+IAo+ICAgICAxMS42MjQ0OTIgZD0gIDAuMDAwMTI0IFsxMzAuNiArICAxLjA1MF0g WyAgNF0gU1BMSVQKPiAgICAgMTEuNjI0NDkyIGQ9ICAwLjAwMDAwMCBbMTMwLjYgKyAgMS40Njdd IFsgIDNdIElOICAgOiAzLjUKPiAgICAgMTEuNjI0NDkzIGQ9ICAwLjAwMDAwMCBbMTMwLjYgKyAg MS45NjddIFsgMzddIERBVEEwOiBhYSAwOCBbc2tpcHBlZC4uLl0KPiAgICAgMTEuNjI1NjE3IGQ9 ICAwLjAwMTEyNCBbMTMxLjcgKyAgMS4wNTBdIFsgIDRdIFNQTElUCj4gICAgIDExLjYyNTYxNyBk PSAgMC4wMDAwMDAgWzEzMS43ICsgIDEuNDY3XSBbICAzXSBJTiAgIDogMy41Cj4gICAgIDExLjYy NTg2NyBkPSAgMC4wMDAyNTAgWzEzMi4xICsgIDEuMDUwXSBbICA0XSBTUExJVAo+ICAgICAxMS42 MjU4NjcgZD0gIDAuMDAwMDAwIFsxMzIuMSArICAxLjQ2N10gWyAgM10gSU4gICA6IDMuNQo+ICAg ICAxMS42MjU4NjggZD0gIDAuMDAwMDAxIFsxMzIuMSArICAxLjk4M10gWyAgM10gREFUQTA6IDAw IDAwCj4gICAgIDExLjYyNjYxNyBkPSAgMC4wMDA3NDkgWzEzMi43ICsgIDEuMDUwXSBbICA0XSBT UExJVAo+ICAgICAxMS42MjY2MTcgZD0gIDAuMDAwMDAwIFsxMzIuNyArICAxLjQ2N10gWyAgM10g SU4gICA6IDMuNQo+ICAgICAxMS42MjY4NjcgZD0gIDAuMDAwMjUwIFsxMzMuMSArICAxLjA1MF0g WyAgNF0gU1BMSVQKPiAgICAgMTEuNjI2ODY3IGQ9ICAwLjAwMDAwMCBbMTMzLjEgKyAgMS40Njdd IFsgIDNdIElOICAgOiAzLjUKPiAgICAgMTEuNjI2ODY4IGQ9ICAwLjAwMDAwMCBbMTMzLjEgKyAg MS45NjddIFsgIDNdIERBVEEwOiAwMCAwMAo+IAo+IEFmdGVyIHRoZSBodWIsIHRoZXkgbG9vayBh cyB0aGUgZm9sbG93aW5nIGFuZCBtYXkgbGVhZCB0byBicm9rZW4KPiBwZXJlcGhlcmlhbCB0cmFu c2ZlciAoYXMgaW4gY2FzZSBvZiBQV0MgYmFzZWQgd2ViY2FtKToKPiAKPiAgICAgMTEuMzMyMDA0 IGQ9ICAwLjAwMDk5NyBbIDMwLjAgKyAgMy40MTddIFsgIDNdIElOICAgOiA1LjUKPiAgICAgMTEu MzMyMDA3IGQ9ICAwLjAwMDAwMyBbIDMwLjAgKyAgNi44MzNdIFs4MDBdIERBVEEwOiA4YSAxYyBb c2tpcHBlZC4uLl0KPiAgICAgMTEuMzM0MDA0IGQ9ICAwLjAwMTk5NyBbIDMyLjAgKyAgMy40MTdd IFsgIDNdIElOICAgOiA1LjUKPiAgICAgMTEuMzM0MDA3IGQ9ICAwLjAwMDAwMyBbIDMyLjAgKyAg Ni43NTBdIFsgIDNdIERBVEEwOiAwMCAwMAo+ICAgICAxMS4zMzUwMDQgZD0gIDAuMDAwOTk3IFsg MzMgICArICAzLjQxN10gWyAgM10gSU4gICA6IDUuNQo+ICAgICAxMS4zMzUwMDcgZD0gIDAuMDAw MDAzIFsgMzMgICArICA2Ljc1MF0gWyAgM10gREFUQTA6IDAwIDAwCj4gCj4gUmVtb3ZpbmcgdGhp cyBnbGl0Y2hlcyBtYWtlcyB1cyBhYmxlIHRvIHN1Y2Nlc3NmdWxseSBydW4gMTBmcHMKPiB2aWRl byBzdHJlYW0gZnJvbSB0aGUgd2ViY2FtIGF0dGFjaGVkIHZpYSBVU0IgaHViLiBUaGF0IHdhcwo+ IHByZXZpb3VzbHkgaW1wb3NzaWJsZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBNYXR3ZXkgVi4gS29y bmlsb3YgPG1hdHdleUBzYWkubXN1LnJ1Pgo+IC0tLQo+ICBkcml2ZXJzL3VzYi9tdXNiL211c2Jf aG9zdC5jIHwgMTggKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNl cnRpb25zKCspCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMg Yi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCj4gaW5kZXggZWQ5OWVjZDRlNjNhLi43NWJl OTI4NzNiNWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwo+ICsr KyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKPiBAQCAtODUsNiArODUsMTEgQEAgc3Rh dGljIGJvb2wgbXVzYl9xaF9lbXB0eShzdHJ1Y3QgbXVzYl9xaCAqcWgpCj4gIAlyZXR1cm4gbGlz dF9lbXB0eSgmcWgtPmhlcC0+dXJiX2xpc3QpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgYm9vbCBtdXNi X3FoX3Npbmd1bGFyKHN0cnVjdCBtdXNiX3FoICpxaCkKPiArewo+ICsJcmV0dXJuIGxpc3RfaXNf c2luZ3VsYXIoJnFoLT5oZXAtPnVyYl9saXN0KTsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQgbXVz Yl9xaF91bmxpbmtfaGVwKHN0cnVjdCBtdXNiX3FoICpxaCkKPiAgewo+ICAJaWYgKCFxaC0+aGVw KQo+IEBAIC0zNjIsNiArMzY3LDE5IEBAIHN0YXRpYyB2b2lkIG11c2JfYWR2YW5jZV9zY2hlZHVs ZShzdHJ1Y3QgbXVzYiAqbXVzYiwgc3RydWN0IHVyYiAqdXJiLAo+ICAJCWJyZWFrOwo+ICAJfQo+ ICAKPiArCWlmIChyZWFkeSAmJiAhbXVzYl9xaF9zaW5ndWxhcihxaCkpIHsKPiArCQlzdHJ1Y3Qg dXJiICpuZXh0X3VyYiA9IGxpc3RfbmV4dF9lbnRyeSh1cmIsIHVyYl9saXN0KTsKPiArCj4gKwkJ bXVzYl9kYmcobXVzYiwgIi4uLiBuZXh0IGVwJWQgJWNYIHVyYiAlcCIsIGh3X2VwLT5lcG51bSwg aXNfaW4gPyAnUicgOiAnVCcsIG5leHRfdXJiKTsKPiArCQltdXNiX3N0YXJ0X3VyYihtdXNiLCBp c19pbiwgcWgsIG5leHRfdXJiKTsKPiArCj4gKwkJcWgtPmlzX3JlYWR5ID0gMDsKPiArCQltdXNi X2dpdmViYWNrKG11c2IsIHVyYiwgc3RhdHVzKTsKPiArCQlxaC0+aXNfcmVhZHkgPSByZWFkeTsK PiArCj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiAgCXFoLT5pc19yZWFkeSA9IDA7Cj4gIAltdXNi X2dpdmViYWNrKG11c2IsIHVyYiwgc3RhdHVzKTsKPiAgCXFoLT5pc19yZWFkeSA9IHJlYWR5Owo+ IC0tIAo+IDIuMTYuNAo+Cg==