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: UAS: fix alignment of scatter/gather segments From: David Laight Message-Id: <734e89837b454acea32b990fa2aff902@AcuMS.aculab.com> Date: Tue, 30 Apr 2019 09:16:21 +0000 To: 'Alan Stern' , Oliver Neukum Cc: "gregKH@linuxfoundation.org" , "linux-usb@vger.kernel.org" List-ID: RnJvbTogQWxhbiBTdGVybgo+IFNlbnQ6IDI5IEFwcmlsIDIwMTkgMTg6NTUKPiBPbiBNb24sIDI5 IEFwciAyMDE5LCBPbGl2ZXIgTmV1a3VtIHdyb3RlOgo+IAo+ID4gT24gTW8sIDIwMTktMDQtMjkg YXQgMTI6MDggLTA0MDAsIEFsYW4gU3Rlcm4gd3JvdGU6Cj4gPiA+IE9uIE1vbiwgMjkgQXByIDIw MTksIE9saXZlciBOZXVrdW0gd3JvdGU6Cj4gPiA+Cj4gPiA+ID4gT24gTW8sIDIwMTktMDQtMjkg YXQgMTU6MDYgKzAwMDAsIERhdmlkIExhaWdodCB3cm90ZToKPiA+ID4KPiA+ID4gPiBCdXQgdGhl IHN0YXRlbWVudCB0aGUgb2xkIGNvbW1lbnQgbWFkZSBhcmUgbm8gbG9uZ2VyIGNvcnJlY3QuCj4g PiA+Cj4gPiA+IFBlcmhhcHMgRGF2aWQgd291bGQgYmUgc2F0aXNmaWVkIGlmIHRoZSBjb21tZW50 IHdlcmUgY2hhbmdlZCB0byBzYXkKPiA+ID4gdGhhdCBfc29tZV8gVVNCIGNvbnRyb2xsZXIgZHJp dmVycyBoYXZlIHRoaXMgdW51c3VhbCBhbGlnbm1lbnQKPiA+ID4gcmVxdWlyZW1lbnQuCj4gPgo+ ID4gSXQgd291bGQgc2VlbSB0byBtZSB0aGF0IGV2ZXJ5IGNvbnRyb2xsZXIgdGhhdCBkb2VzIG5v dCBkbwo+ID4gc2NhdHRlci9nYXRoZXIgaGFzIHRoaXMgcmVxdWlyZW1lbnQuIEluIG90aGVyIHdv cmRzLCB0aGlzIGlzCj4gPiB0aGUgdHJ1ZSByZXF1aXJlbWVudCBvZiBVU0IuIEl0IGRvZXMgbm90 IGNvbWUgZnJvbSB0aGUKPiA+IGNvbnRyb2xsZXIuIEl0IGNvbWVzIGZyb20gdGhlIHByb3RvY29s J3MgbmVlZCB0byBub3QKPiA+IHNlbmQgYSBzaG9ydCBwYWNrYWdlLgoKVGhlIGhhcmR3YXJlIHJl cXVpcmVtZW50IGlzIHRoYXQgcGFja2V0cyB0aGF0IG5lZWQgdG8gYmUgam9pbmVkCnRvZ2V0aGVy IHRvIG1ha2UgYSBsb25nIHJlcXVlc3QgbXVzdCBiZSAnZnVsbCcuCkluIG1hbnkgY2FzZXMgdGhp cyBtZWFucyBhIHplcm8gbGVuZ3RoIHBhY2tldCBtdXN0IGJlIHNlbnQgdG8KY29ycmVjdGx5IHRl cm1pbmF0ZSBhIHJlcXVlc3QgdGhhdCBpcyBhIG11bHRpcGxlIG9mIHRoZSBwYWNrZXQgc2l6ZS4K U2luY2UgdGhlIHNvZnR3YXJlIGhhcyB0byBhZGQgdGhlIHplcm8gbGVuZ3RoIHBhY2tldCB0aGVy ZSBpcwpubyByZWFsIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHNpbmdsZSBzY2F0dGVyLWdhdGhlciB0 cmFuc21pdCBhbmQKbXVsdGlwbGUgc2luZ2xlIHBhY2tldCB0cm5hc21pdHMuCgpGb3IgVVNCMiBi dWxrIHRyYW5zZmVycyB0aGUgcGFja2V0IHNpemUgaXMgNTEyLCBhbmQgZm9yIFVTQjMgMTAyNC4K VGhlIG9sZCBjb21tZW50IHN1Z2dlc3RlZCAyMDQ4IGZvciBzb21lIHVuc3VwcG9ydGVkIGludGVy ZmFjZS4KCj4gQXJlIHlvdSBzdXJlIHRoYXQgeEhDSSBoYXMgdGhpcyByZXF1aXJlbWVudD8gIEkg aGF2ZW4ndCBjaGVja2VkIHRoZQo+IHNwZWMuICBJIGtub3cgdGhhdCBVSENJLCBPSENJLCBhbmQg RUhDSSBkbyBuZWVkIHRoaXMgYWxpZ25tZW50IChhbmQKPiBPSENJIGFuZCBFSENJIGRvIGluIGZh Y3QgaGF2ZSBoYXJkd2FyZSBzdXBwb3J0IGZvciBzY2F0dGVyLWdhdGhlcikuCj4gCj4gTW9yZSBw cmVjaXNlbHksIHdoYXQgbWF0dGVycyBpcyB3aGV0aGVyIHRoZSBjb250cm9sbGVyIGlzIGFibGUg dG8gbWVyZ2UKPiB0d28gZGlmZmVyZW50IERNQSBzZWdtZW50cyBpbnRvIGEgc2luZ2xlIHBhY2tl dC4gIFVIQ0kgY2FuJ3QuICBPSENJIGFuZAo+IEVIQ0kgY2FuLCBidXQgb25seSBpZiB0aGUgZmly c3Qgc2VnbWVudCBlbmRzIGF0IGEgcGFnZSBib3VuZGFyeSBhbmQgdGhlCj4gc2Vjb25kIGJlZ2lu cyBhdCBhIHBhZ2UgYm91bmRhcnkgLS0gaXQncyBlYXNpZXIganVzdCB0byBzYXkgdGhhdCB0aGUK PiBzZWdtZW50cyBoYXZlIHRvIGJlIG1heHBhY2tldC1hbGlnbmVkLgoKWEhDSSAoZm9yIFVTQjIg b3IgVVNCMykgY2FuIGhhbmRsZSBhbG1vc3QgYXJiaXRyYXJ5IGZyYWdtZW50cy4KVGhlcmUgYXJl IGEgY291cGxlIG9mIGFubm95aW5nIHJlc3RyaWN0aW9ucyAoSUlSQyk6Ci0gRnJhZ21lbnRzIGNh bm5vdCBjcm9zcyBhIDY0ayBib3VuZGFyeS4KICAoSG93IG11Y2ggd291bGQgaXQgY29zdCB0aGUg aGFyZHdhcmUgdG8gaGF2ZSBhIDMyYml0IChvciBldmVuIDY0Yml0KQogIGNvdW50ZXIuKQotIFRo ZSAnTGluayBUUkInIGJldHdlZW4gcmluZyBzZWdtZW50cyBtdXN0IGJlIGFsaWduZWQgdG8gYSBw YWNrZXQgYm91bmRhcnkuCkkgYmVsaWV2ZSB0aGUgTGludXggWEhDSSBkcml2ZXIgbm93IGhhbmRs ZXMgYm90aCB0aGVzZSBjYXNlcy4KKEl0IGhhZG4ndCB1c2VkIHRvIC0gd2hpY2ggaXMgd2h5IEkg a25vdyBhbnl0aGluZyBhYm91dCBVU0IzIGFuZCBYSENJLikKCkkgYWxzbyByZWNhbGwgaXNzdWVz IHdpdGggbm9uIHdvcmQgYWxpZ25lZCBidWZmZXJzIGZvciBzb21lIGNvbnRyb2xsZXJzLgoKPiA+ IFRoZSBzZWNvbmQsIG9sZCwgY29tbWVudCBpcyBhYm91dCBjb250cm9sbGVycy4KPiAKPiBXZWxs LCBpZiB0aGUgZHJpdmVycyB3b3VsZCB1c2UgYm91bmNlIGJ1ZmZlcnMgdG8gd29yayBhcm91bmQg dGhlCj4gY29udHJvbGxlcnMnIGlzc3VlcyB0aGVuIHRoZXkgd291bGRuJ3QgaGF2ZSB0aGlzIHNw ZWNpYWwgcmVxdWlyZW1lbnQuCj4gU28gaXQgcmVhbGx5IGlzIGEgY29tYmluYXRpb24gb2Ygd2hh dCB0aGUgaGFyZHdhcmUgY2FuIGRvIGFuZCB3aGF0IHRoZQo+IGRyaXZlciBjYW4gZG8uCgpJbmRl ZWQuClNvIGFueSBjb21tZW50IHNob3VsZCByZWZlciB0byB3aGF0IHRoZSBsaW51eCB1c2IgZHJp dmVycyByZXF1aXJlcwpvZiB0aGVpciAndXNlcicsIG5vdCB3aGF0IGhhcHBlbnMgb24gdGhlIFVT QiB3aXJlLgoKSXQgbWlnaHQgbWUgdGhhdCB5b3UgZG8gZW5kIHVwIGhhdmluZyB0byByZXF1ZXN0 IDFrIGFsaWduZWQKYnVmZmVycyBmb3IgWEhDSSwgYnV0IHRoZSBjb21tZW50IHNob3VsZCBzYXkg dGhhdCB5b3UgYXJlCmFkZGluZyBhIGZhciBzdHJvbmdlciByZXN0cmljdGlvbiB0aGFuIHRoYXQg cmVxdWlyZWQgYnkgdGhlCmRyaXZlciBhbmQgY29udHJvbGxlci4KCkdpdmVuIHRoYXQgWEhDSSBp cyB0aGUgbW9zdCBjb21tb24gaW50ZXJmYWNlIChhdCBsZWFzdCBvbiB4ODYpCmlmIHRoZSAxayBh bGlnbm1lbnQgZm9yY2VzIGV4dHJhIGJvdW5jZSBidWZmZXJzIGluIGFueSBjb2RlCnBhdGhzIGl0 IGNvdWxkIGJlIGEgcGVyZm9ybWFuY2UgaXNzdWUuCgoJRGF2aWQKCi0KUmVnaXN0ZXJlZCBBZGRy ZXNzIExha2VzaWRlLCBCcmFtbGV5IFJvYWQsIE1vdW50IEZhcm0sIE1pbHRvbiBLZXluZXMsIE1L MSAxUFQsIFVLClJlZ2lzdHJhdGlvbiBObzogMTM5NzM4NiAoV2FsZXMpCg== 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=-0.9 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS 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 885DCC43219 for ; Tue, 30 Apr 2019 09:16:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6286620652 for ; Tue, 30 Apr 2019 09:16:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726345AbfD3JQ0 convert rfc822-to-8bit (ORCPT ); Tue, 30 Apr 2019 05:16:26 -0400 Received: from eu-smtp-delivery-151.mimecast.com ([207.82.80.151]:45357 "EHLO eu-smtp-delivery-151.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726165AbfD3JQ0 (ORCPT ); Tue, 30 Apr 2019 05:16:26 -0400 Received: from AcuMS.aculab.com (156.67.243.126 [156.67.243.126]) (Using TLS) by relay.mimecast.com with ESMTP id uk-mta-34-USjcvSGtMuWsnYZLV05f2w-1; Tue, 30 Apr 2019 10:16:22 +0100 Received: from AcuMS.Aculab.com (fd9f:af1c:a25b::d117) by AcuMS.aculab.com (fd9f:af1c:a25b::d117) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Tue, 30 Apr 2019 10:16:21 +0100 Received: from AcuMS.Aculab.com ([fe80::43c:695e:880f:8750]) by AcuMS.aculab.com ([fe80::43c:695e:880f:8750%12]) with mapi id 15.00.1347.000; Tue, 30 Apr 2019 10:16:21 +0100 From: David Laight To: 'Alan Stern' , Oliver Neukum CC: "gregKH@linuxfoundation.org" , "linux-usb@vger.kernel.org" Subject: RE: [PATCH] UAS: fix alignment of scatter/gather segments Thread-Topic: [PATCH] UAS: fix alignment of scatter/gather segments Thread-Index: AQHU/rSuaPqmHe5MjEO6F2S1cXOj3qZUY+mA Date: Tue, 30 Apr 2019 09:16:21 +0000 Message-ID: <734e89837b454acea32b990fa2aff902@AcuMS.aculab.com> References: <1556557130.20085.24.camel@suse.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.202.205.107] MIME-Version: 1.0 X-MC-Unique: USjcvSGtMuWsnYZLV05f2w-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Message-ID: <20190430091621.hsuEkXyQGlGsdVHsRnrN07JN8Qdc1H2sodHbmiwctKk@z> From: Alan Stern > Sent: 29 April 2019 18:55 > On Mon, 29 Apr 2019, Oliver Neukum wrote: > > > On Mo, 2019-04-29 at 12:08 -0400, Alan Stern wrote: > > > On Mon, 29 Apr 2019, Oliver Neukum wrote: > > > > > > > On Mo, 2019-04-29 at 15:06 +0000, David Laight wrote: > > > > > > > But the statement the old comment made are no longer correct. > > > > > > Perhaps David would be satisfied if the comment were changed to say > > > that _some_ USB controller drivers have this unusual alignment > > > requirement. > > > > It would seem to me that every controller that does not do > > scatter/gather has this requirement. In other words, this is > > the true requirement of USB. It does not come from the > > controller. It comes from the protocol's need to not > > send a short package. The hardware requirement is that packets that need to be joined together to make a long request must be 'full'. In many cases this means a zero length packet must be sent to correctly terminate a request that is a multiple of the packet size. Since the software has to add the zero length packet there is no real difference between a single scatter-gather transmit and multiple single packet trnasmits. For USB2 bulk transfers the packet size is 512, and for USB3 1024. The old comment suggested 2048 for some unsupported interface. > Are you sure that xHCI has this requirement? I haven't checked the > spec. I know that UHCI, OHCI, and EHCI do need this alignment (and > OHCI and EHCI do in fact have hardware support for scatter-gather). > > More precisely, what matters is whether the controller is able to merge > two different DMA segments into a single packet. UHCI can't. OHCI and > EHCI can, but only if the first segment ends at a page boundary and the > second begins at a page boundary -- it's easier just to say that the > segments have to be maxpacket-aligned. XHCI (for USB2 or USB3) can handle almost arbitrary fragments. There are a couple of annoying restrictions (IIRC): - Fragments cannot cross a 64k boundary. (How much would it cost the hardware to have a 32bit (or even 64bit) counter.) - The 'Link TRB' between ring segments must be aligned to a packet boundary. I believe the Linux XHCI driver now handles both these cases. (It hadn't used to - which is why I know anything about USB3 and XHCI.) I also recall issues with non word aligned buffers for some controllers. > > The second, old, comment is about controllers. > > Well, if the drivers would use bounce buffers to work around the > controllers' issues then they wouldn't have this special requirement. > So it really is a combination of what the hardware can do and what the > driver can do. Indeed. So any comment should refer to what the linux usb drivers requires of their 'user', not what happens on the USB wire. It might me that you do end up having to request 1k aligned buffers for XHCI, but the comment should say that you are adding a far stronger restriction than that required by the driver and controller. Given that XHCI is the most common interface (at least on x86) if the 1k alignment forces extra bounce buffers in any code paths it could be a performance issue. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)