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 A0D8AC43387 for ; Fri, 14 Dec 2018 15:36:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B835F206C0 for ; Fri, 14 Dec 2018 15:36:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727380AbeLNPf7 (ORCPT ); Fri, 14 Dec 2018 10:35:59 -0500 Received: from iolanthe.rowland.org ([192.131.102.54]:59568 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1726494AbeLNPf7 (ORCPT ); Fri, 14 Dec 2018 10:35:59 -0500 Received: (qmail 3050 invoked by uid 2102); 14 Dec 2018 10:35:58 -0500 Received: from localhost (sendmail-bs@127.0.0.1) by localhost with SMTP; 14 Dec 2018 10:35:58 -0500 Date: Fri, 14 Dec 2018 10:35:58 -0500 (EST) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: Paul Elder cc: Felipe Balbi , Laurent Pinchart , Bin Liu , , , , , Subject: Re: [PATCH 4/6] usb: gadget: add functions to signal udc driver to delay status stage In-Reply-To: <20181214034754.GB7477@garnet.amanokami.net> 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 Thu, 13 Dec 2018, Paul Elder wrote: > > Suppose we have a core library routine like this: > > > > void usb_gadget_control_complete(struct usb_gadget *gadget, > > unsigned int no_implicit_status, int status) > > { > > struct usb_request *req; > > > > if (no_implicit_status || status != 0) > > return; > > > > /* Send an implicit status-stage request for ep0 */ > > req = usb_ep_alloc_request(gadget->ep0, GFP_ATOMIC); > > if (req) { > > req->length = 0; > > req->no_implicit_status = 1; > > req->complete = /* req's deallocation routine */ > > usb_ep_queue(gadget->ep0, req, GFP_ATOMIC); > > } > > } > > > > Then all a UDC driver would need to do is call > > usb_gadget_control_complete() after invoking a control request's > > completion handler. The no_implicit_status and status arguments would > > be taken from the request that was just completed. > > > > With this one call added to each UDC, all the existing function drivers > > would work correctly. Even though they don't explicitly queue > > status-stage requests, the new routine will do so for them, > > transparently. Function drivers that want to handle their own > > status-stage requests explicitly will merely have to set the > > req->no_implicit_status bit. > > I think this is a good idea. We still get the benefits of explicit > status stage without being overly intrusive in the conversion, and we > maintain the queue-based API. > > Would it be fine for me to proceed in this direction for a v2? It is as far as I'm concerned (Felipe might not agree). Knock yourself out. :-) Alan Stern > > (We might or might not need to watch out for 0-length control-OUT > > transfers. Function drivers _do_ queue status-stage requests for > > those.) > > Thanks, > > Paul Elder 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: [4/6] usb: gadget: add functions to signal udc driver to delay status stage From: Alan Stern Message-Id: Date: Fri, 14 Dec 2018 10:35:58 -0500 (EST) To: Paul Elder Cc: Felipe Balbi , Laurent Pinchart , Bin Liu , kieran.bingham@ideasonboard.com, gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, rogerq@ti.com List-ID: T24gVGh1LCAxMyBEZWMgMjAxOCwgUGF1bCBFbGRlciB3cm90ZToKCj4gPiBTdXBwb3NlIHdlIGhh dmUgYSBjb3JlIGxpYnJhcnkgcm91dGluZSBsaWtlIHRoaXM6Cj4gPiAKPiA+IHZvaWQgdXNiX2dh ZGdldF9jb250cm9sX2NvbXBsZXRlKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsCj4gPiAJCXVu c2lnbmVkIGludCBub19pbXBsaWNpdF9zdGF0dXMsIGludCBzdGF0dXMpCj4gPiB7Cj4gPiAJc3Ry dWN0IHVzYl9yZXF1ZXN0ICpyZXE7Cj4gPiAKPiA+IAlpZiAobm9faW1wbGljaXRfc3RhdHVzIHx8 IHN0YXR1cyAhPSAwKQo+ID4gCQlyZXR1cm47Cj4gPiAKPiA+IAkvKiBTZW5kIGFuIGltcGxpY2l0 IHN0YXR1cy1zdGFnZSByZXF1ZXN0IGZvciBlcDAgKi8KPiA+IAlyZXEgPSB1c2JfZXBfYWxsb2Nf cmVxdWVzdChnYWRnZXQtPmVwMCwgR0ZQX0FUT01JQyk7Cj4gPiAJaWYgKHJlcSkgewo+ID4gCQly ZXEtPmxlbmd0aCA9IDA7Cj4gPiAJCXJlcS0+bm9faW1wbGljaXRfc3RhdHVzID0gMTsKPiA+IAkJ cmVxLT5jb21wbGV0ZSA9IC8qIHJlcSdzIGRlYWxsb2NhdGlvbiByb3V0aW5lICovCj4gPiAJCXVz Yl9lcF9xdWV1ZShnYWRnZXQtPmVwMCwgcmVxLCBHRlBfQVRPTUlDKTsKPiA+IAl9Cj4gPiB9Cj4g PiAKPiA+IFRoZW4gYWxsIGEgVURDIGRyaXZlciB3b3VsZCBuZWVkIHRvIGRvIGlzIGNhbGwgCj4g PiB1c2JfZ2FkZ2V0X2NvbnRyb2xfY29tcGxldGUoKSBhZnRlciBpbnZva2luZyBhIGNvbnRyb2wg cmVxdWVzdCdzIAo+ID4gY29tcGxldGlvbiBoYW5kbGVyLiAgVGhlIG5vX2ltcGxpY2l0X3N0YXR1 cyBhbmQgc3RhdHVzIGFyZ3VtZW50cyB3b3VsZCAKPiA+IGJlIHRha2VuIGZyb20gdGhlIHJlcXVl c3QgdGhhdCB3YXMganVzdCBjb21wbGV0ZWQuCj4gPiAKPiA+IFdpdGggdGhpcyBvbmUgY2FsbCBh ZGRlZCB0byBlYWNoIFVEQywgYWxsIHRoZSBleGlzdGluZyBmdW5jdGlvbiBkcml2ZXJzCj4gPiB3 b3VsZCB3b3JrIGNvcnJlY3RseS4gIEV2ZW4gdGhvdWdoIHRoZXkgZG9uJ3QgZXhwbGljaXRseSBx dWV1ZQo+ID4gc3RhdHVzLXN0YWdlIHJlcXVlc3RzLCB0aGUgbmV3IHJvdXRpbmUgd2lsbCBkbyBz byBmb3IgdGhlbSwKPiA+IHRyYW5zcGFyZW50bHkuICBGdW5jdGlvbiBkcml2ZXJzIHRoYXQgd2Fu dCB0byBoYW5kbGUgdGhlaXIgb3duCj4gPiBzdGF0dXMtc3RhZ2UgcmVxdWVzdHMgZXhwbGljaXRs eSB3aWxsIG1lcmVseSBoYXZlIHRvIHNldCB0aGUKPiA+IHJlcS0+bm9faW1wbGljaXRfc3RhdHVz IGJpdC4KPiAKPiBJIHRoaW5rIHRoaXMgaXMgYSBnb29kIGlkZWEuIFdlIHN0aWxsIGdldCB0aGUg YmVuZWZpdHMgb2YgZXhwbGljaXQKPiBzdGF0dXMgc3RhZ2Ugd2l0aG91dCBiZWluZyBvdmVybHkg aW50cnVzaXZlIGluIHRoZSBjb252ZXJzaW9uLCBhbmQgd2UKPiBtYWludGFpbiB0aGUgcXVldWUt YmFzZWQgQVBJLgo+IAo+IFdvdWxkIGl0IGJlIGZpbmUgZm9yIG1lIHRvIHByb2NlZWQgaW4gdGhp cyBkaXJlY3Rpb24gZm9yIGEgdjI/CgpJdCBpcyBhcyBmYXIgYXMgSSdtIGNvbmNlcm5lZCAoRmVs aXBlIG1pZ2h0IG5vdCBhZ3JlZSkuICBLbm9jayB5b3Vyc2VsZgpvdXQuICA6LSkKCkFsYW4gU3Rl cm4KCj4gPiAoV2UgbWlnaHQgb3IgbWlnaHQgbm90IG5lZWQgdG8gd2F0Y2ggb3V0IGZvciAwLWxl bmd0aCBjb250cm9sLU9VVCAKPiA+IHRyYW5zZmVycy4gIEZ1bmN0aW9uIGRyaXZlcnMgX2RvXyBx dWV1ZSBzdGF0dXMtc3RhZ2UgcmVxdWVzdHMgZm9yIAo+ID4gdGhvc2UuKQo+IAo+IFRoYW5rcywK PiAKPiBQYXVsIEVsZGVyCg==