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: usb: dwc3: gadget: Correct the logic for queuing sgs From: Felipe Balbi Message-Id: <87lgejni7v.fsf@linux.intel.com> Date: Fri, 23 Mar 2018 13:29:08 +0200 To: Anurag Kumar Vulisha , Greg Kroah-Hartman Cc: "v.anuragkumar@gmail.com" , Ajay Yugalkishore Pandey , "linux-usb@vger.kernel.org" , "linux-kernel@vger.kernel.org" List-ID: KHBsZWFzZSBjb25maWd1cmUgeW91ciBlbWFpbCBjbGllbnQgdG8gYnJlYWsgbGluZXMgYXQgODAg Y29sdW1ucyA7LSkKCkhpLAoKQW51cmFnIEt1bWFyIFZ1bGlzaGEgPGFudXJhZ2t1QHhpbGlueC5j b20+IHdyaXRlczoKPiBIaSBGZWxpcGUsCj4KPiBUaGFua3MgZm9yIHJldmlld2luZyB0aGUgcGF0 Y2ggLCBwbGVhc2UgZmluZCBteSBjb21tZW50cyBpbmxpbmUKCm5vIGlzc3VlcyA6LSkKCj4+QW51 cmFnIEt1bWFyIFZ1bGlzaGEgPGFudXJhZy5rdW1hci52dWxpc2hhQHhpbGlueC5jb20+IHdyaXRl czoKPj4+IFRoaXMgcGF0Y2ggZml4ZXMgdHdvIGlzc3Vlcwo+Pj4KPj4+IDEuIFRoZSBjb2RlIGxv Z2ljIGluIGR3YzNfcHJlcGFyZV9vbmVfdHJiKCkgaW5jb3JyZWN0bHkgdXNlcyB0aGUKPj4+IGFk ZHJlc3MgYW5kIGxlbmd0aCBnaXZlbiBpbiByZXEgcGFja2V0IGV2ZW4gZm9yIHNjYXR0ZXJnYXRo ZXIgbGlzdHMuCj4+PiBUaGlzIHBhdGNoIGNvcnJlY3QncyB0aGUgY29kZSB0byB1c2Ugc2ctPmFk ZHJlc3MgYW5kIHNnLT5sZW5ndGggd2hlbgo+Pj4gc2NhdHRlcmdhdGhlciBsaXN0cyBhcmUgcHJl c2VudC4KPj4+Cj4+PiAyLiBUaGUgcHJlc2VudCBjb2RlIGNvcnJlY3RseSBmZXRjaGVzIHRoZSBy ZXEncyB3aGljaCB3ZXJlIG5vdCBxdWV1ZWQKPj4+IGZyb20gdGhlIHN0YXJ0ZWRfbGlzdCBidXQg ZmFpbHMgdG8gc3RhcnQgZnJvbSB0aGUgc2cgd2hlcmUgaXQKPj4+IHByZXZpb3VzbHkgc3RvcHBl ZCBxdWV1aW5nIGJlY2F1c2Ugb2YgdGhlIHVuYXZhaWxhYmxlIFRSQidzLiBUaGlzCj4+PiBwYXRj aCBjb3JyZWN0J3MgdGhlIGNvZGUgdG8gc3RhcnQgcXVldWluZyBmcm9tIHRoZSBjb3JyZWN0IHNn IGluIHNnbGlzdC4KPj4KPj50aGVzZSB0d28gc2hvdWxkIGJlIGluIHNlcGFyYXRlIHBhdGNoZXMs IHRoZW4uCj4+Cj4gV2lsbCBjcmVhdGUgc2VwYXJhdGUgcGF0Y2hlcyBpbiBuZXh0IHZlcnNpb24K CnRoYW5rcywgdGhhdCBoZWxwcyA6LSkKCj4+PiBTaWduZWQtb2ZmLWJ5OiBBbnVyYWcgS3VtYXIg VnVsaXNoYSA8YW51cmFna3VAeGlsaW54LmNvbT4KPj4+IC0tLQo+Pj4gIGRyaXZlcnMvdXNiL2R3 YzMvY29yZS5oICAgfCAgNCArKysrCj4+PiAgZHJpdmVycy91c2IvZHdjMy9nYWRnZXQuYyB8IDQy Cj4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KPj4+ICAyIGZp bGVzIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvY29yZS5oIGIvZHJpdmVycy91c2IvZHdjMy9jb3Jl LmggaW5kZXgKPj4+IDg2MGQyYmMuLjI3NzllNTggMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL3Vz Yi9kd2MzL2NvcmUuaAo+Pj4gKysrIGIvZHJpdmVycy91c2IvZHdjMy9jb3JlLmgKPj4+IEBAIC03 MTgsNyArNzE4LDkgQEAgc3RydWN0IGR3YzNfaHdwYXJhbXMgewo+Pj4gICAqIEBsaXN0OiBhIGxp c3RfaGVhZCB1c2VkIGZvciByZXF1ZXN0IHF1ZXVlaW5nCj4+PiAgICogQGRlcDogc3RydWN0IGR3 YzNfZXAgb3duaW5nIHRoaXMgcmVxdWVzdAo+Pj4gICAqIEBzZzogcG9pbnRlciB0byBmaXJzdCBp bmNvbXBsZXRlIHNnCj4+PiArICogQHNnX3RvX3N0YXJ0OiBwb2ludGVyIHRvIHRoZSBzZyB3aGlj aCBzaG91bGQgYmUgcXVldWVkIG5leHQKPj4+ICAgKiBAbnVtX3BlbmRpbmdfc2dzOiBjb3VudGVy IHRvIHBlbmRpbmcgc2dzCj4+PiArICogQG51bV9xdWV1ZWRfc2dzOiBjb3VudGVyIHRvIHRoZSBu dW1iZXIgb2Ygc2dzIHdoaWNoIGFscmVhZHkgZ290Cj4+PiArIHF1ZXVlZAo+Pgo+PnRoaXMgaXMg dGhlIHNhbWUgYXMgbnVtX3BlbmRpbmdfc2dzLgo+Cj4gbnVtX3BlbmRpbmdfc2dzIGlzIGluaXRp YWxseSBwb2ludGluZyB0byBudW1fbWFwcGVkX3Nncywgd2hpY2ggZ2V0cwo+IGRlY3JlbWVudGVk IGluIGR3YzNfY2xlYW51cF9kb25lX3JlcXMoKS4KPgo+IENvbnNpZGVyIGEgY2FzZSB3aGVyZSB0 aGUgZHJpdmVyIGZhaWxlZCB0byBxdWV1ZSBhbGwgc2dzIGludG8gVFJCcwo+IGJlY2F1c2Ugb2Yg aW5zdWZmaWNpZW50IFRSQiBudW1iZXIuIEZvciBleGFtcGxlLCBsZXRzIGFzc3VtZSByZXEgaGFz IDUKPiBzZ3MgYW5kIG9ubHkgMyBnb3QgcXVldWVkLiBJbiB0aGlzIHNjZW5hcmlvICx3aGVuIHRo ZQo+IGR3YzNfY2xlYW51cF9kb25lX3JlcXMoKSBnZXRzIGNhbGxlZCB0aGUgdmFsdWUgb2YgbnVt X3BlbmRpbmdfc2dzID0KPiA1LiBTaW5jZSB0aGUgdmFsdWUgb2YgbnVtX3BlbmRpbmdfc2dzIGlz IGdyZWF0ZXIgdGhhbiAwLAo+IF9fZHdjM19nYWRnZXRfa2lja190cmFuc2ZlcigpIGdldHMgY2Fs bGVkIHdpdGggbnVtX3BlbmRpbmdfc2dzID0gNS0xID0KPiA0Lgo+Cj4gRXZlbnR1YWxseSBfX2R3 YzNfZ2FkZ2V0X2tpY2tfdHJhbnNmZXIoKSBjYWxscwo+IGR3YzNfcHJlcGFyZV9vbmVfdHJiX3Nn KCkgd2hpY2ggaGFzIGZvcl9lYWNoX3NnKCkgY2FsbCB3aGljaCBsb29wcyBmb3IKPiBudW1fcGVu ZGluZ19zZ3MgdGltZXMgKDQgdGltZXMgaW4gb3VyIGV4YW1wbGUpLiBUaGlzIGlzIGluY29ycmVj dCwKPiBpZGVhbGx5IGl0IHNob3VsZCBiZSBjYWxsZWQgb25seSBmb3IgMiB0aW1lcyBiZWNhdXNl IHdlIGhhdmUgb25seSAyCj4gc2dzIHdoaWNoIHByZXZpb3VzbHkgd2VyZSBub3QgcXVldWVkLgo+ Cj4gU28sIHdlIGFkZGVkIGFuIGV4dHJhIGZsYWcgbnVtX3F1ZXVlZF9zZ3Mgd2hpY2ggY291bnRz IHRoZSBudW1iZXIgb2YKPiBzZ3MgdGhhdCBnb3QgcXVldWVkIHN1Y2Nlc3NmdWxseSBhbmQgbWFr ZSBmb3JfZWFjaF9zZygpIGxvb3AgZm9yCj4gbnVtX21hcHBlZF9zZ3MgLSBudW1fcXVldWVkX3Nn cyB0aW1lcyBvbmx5IC4gSW4gb3VyIGV4YW1wbGUgY2FzZSB3aXRoCj4gdGhlIHVwZGF0ZWQgbG9n aWMsIGl0IHdpbGwgbG9vcCBmb3IgNSAtIDMgPSAyIHRpbWVzIG9ubHkuIEJlY2F1c2Ugb2YKPiB0 aGlzIHJlYXNvbiBhZGRlZCBudW1fcXVldWVkX3NncyBmbGFnLiBQbGVhc2UgY29ycmVjdCBtZSBp ZiBJIGFtCj4gd3JvbmcuCgpUaGF0J3MgdHJ1ZS4gU2VlbXMgbGlrZSB3ZSBkbyBuZWVkIGEgbmV3 IGNvdW50ZXIuCgo+Pj4gc3RhdGljIGludCBkd2MzX2NsZWFudXBfZG9uZV9yZXFzKHN0cnVjdCBk d2MzICpkd2MsIHN0cnVjdCBkd2MzX2VwCj4+PiAqZGVwLAo+Pj4KPj4+ICAgICAgICAgICAgICAg ICByZXEtPnJlcXVlc3QuYWN0dWFsID0gbGVuZ3RoIC0gcmVxLT5yZW1haW5pbmc7Cj4+Pgo+Pj4g LSAgICAgICAgICAgICAgIGlmICgocmVxLT5yZXF1ZXN0LmFjdHVhbCA8IGxlbmd0aCkgJiYgcmVx LT5udW1fcGVuZGluZ19zZ3MpCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19k d2MzX2dhZGdldF9raWNrX3RyYW5zZmVyKGRlcCk7Cj4+PiArICAgICAgICAgICAgICAgaWYgKHJl cS0+cmVxdWVzdC5hY3R1YWwgPCBsZW5ndGggfHwKPj4+ICsgcmVxLT5udW1fcGVuZGluZ19zZ3Mp IHsKPj4KPj53aHkgZG8geW91IHRoaW5rIHRoaXMgbmVlZHMgdG8gYmUgfHwgaW5zdGVhZCBvZiAm Jj8gSWYgYWN0dWFsID09IGxlbmd0aCB3ZSdyZQo+PmRvbmUsIHRoZXJlJ3Mgbm90aGluZyBtb3Jl IGxlZnQgdG8gZG8uIElmIHRoZXJlIGlzIGVpdGhlciBob3N0IHNlbnQgbW9yZSBkYXRhIHRoYW4K Pj5pdCBzaG91bGQsIG9yIHdlIG1pc2NhbGN1bGF0ZWQgbnVtX3BlbmRpbmdfc2dzLCBvciB3ZSBo YWQgdGhlIHdyb25nIGxlbmd0aAo+PnNvbWV3aGVyZSBpbiBzb21lIFRSQnMuIEVpdGhlciBvZiB0 aG9zZSBjYXNlcyBpcyBhbiBlcnJvciBjb25kaXRpb24gd2UgZG9uJ3QKPj53YW50IHRvIGhpZGUu IFdlIHdhbnQgdGhpbmdzIHRvIGZhaWwgaW4gdGhhdCBjYXNlLgo+Pgo+Cj4gQ29uc2lkZXIgdGhl IHNhbWUgZXhhbXBsZSB0aGF0IHdlIGhhZCBwcmV2aW91c2x5IGRpc2N1c3NlZCwgYW1vbmcgdGhl Cj4gNSBzZ3Mgb25seSAzIHNncyBnb3QgcXVldWVkIGFuZCBhbGwgMyBzZ3MgZ290IGNvbXBsZXRl ZAo+IHN1Y2Nlc3NmdWxseS4gVGhlIHJlcS0+cmVtYWluaW5nIGZpZWxkIHJlcHJlc2VudHMgdGhl IHNpemUgb2YgVFJCCj4gd2hpY2ggd2FzIG5vdCB0cmFuc2ZlcnJlZC4gSW4gdGhpcyBleGFtcGxl ICwgYXMgMyBzZ3MgZ290IGNvbXBsZXRlZAo+IHN1Y2Nlc3NmdWxseSB0aGUgcmVxLT4gcmVtYWlu aW5nID0gMC4gU28gLCByZXF1ZXN0LmFjdHVhbCA9IGxlbmd0aCAtIDAKPiAocmVxLT5yZW1haW5p bmcpIHdoaWNoIG1lYW5zIHJlcXVlc3QuYWN0dWFsID09IGxlbmd0aC4gIEJlY2F1c2Ugb2YKPiB0 aGlzICwgdGhlIGNvbmRpdGlvbiBjaGVjayBpZiAoKHJlcS0+cmVxdWVzdC5hY3R1YWwgPCBsZW5n dGgpICYmCj4gcmVxLT5udW1fcGVuZGluZ19zZ3MpICkgZmFpbHMgZXZlbiB0aG91Z2ggd2UgaGF2 ZSByZXEtPm51bV9wZW5kaW5nX3Nncwo+ID4gMC4gIFNvLCBjb3JyZWN0ZWQgdGhlIGxvZ2ljIHRv IGFsd2F5cyBraWNrIHRyYW5zZmVyIGZvciB0d28KPiBjb25kaXRpb25zIDEpIGlmIHJlcS0+bnVt X3BlbmRpbmdfc2dzID4gMCAyKSBpZiAoKHJlcS0+cmVxdWVzdC5hY3R1YWwKPiA8IGxlbmd0aCkg JiYgcmVxLT5udW1fcGVuZGluZ19zZ3MpKSBjb25kaXRpb24gc2F0aXNmaWVzLiBQbGVhc2UKPiBj b3JyZWN0IG1lIElmIG15IHVuZGVyc3RhbmRpbmcgaXMgd3JvbmcuCgpmYWlyIGVub3VnaCwgYnV0 IHRoZW4gd2UgbWlzcyBhbiBpbXBvcnRhbnQgKElNTywgdGhhdCBpcykgZXJyb3IgY2FzZS4gSWYK cmVxLT5udW1fcGVuZGluZ19zZ3MgPiAwICYmIGFjdHVhbCA9PSBsZW5ndGgsIHRoZW4gc29tZXRo aW5nIGlzIHN1cGVyCndyb25nLiBXZSBtYXkganVzdCBhZGQgaXQgYXMgYW4gZXh0cmEgY2hlY2s6 CgoJZGV2X1dBUk5fT05DRSguLi4uIGFjdHVhbCA9PSBsZW4gJiYgbnVtX3BlbmRpbmdfc2dzKTsK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AG47ELtUcSWa9izazXVwEwRXBlIv/bMcHWktGXgheTsbYkE0YMDPa7+RwHI/fvHY94b05YZK0qD9 ARC-Seal: i=1; a=rsa-sha256; t=1521804578; cv=none; d=google.com; s=arc-20160816; b=MUuHgbdvl66iDhcKd4b0sCCEiG5afDAdSL3htNncwMObtsbpaXEhQTxdBk2LDXmBWz EhKYPvJh5+LuCEfIUtTZaVq2ByT2NVds1V+H5dJ2jJ/l5fsHnkp3m2RnXIoVwERG80o/ bIEaeKFQjvubDjzANltyLZY46v16mfWTDZUgAuYKKhaAvIMEulSfNcH3+tOZoeX74z0r spjVeP6dvYiVBPdqPc1yTKgRybuRHxDzpUFdUbalIpl5Blvq3EbzEZyZ2A8wN6/HbV6U hbZg88VPCsMutCTG/8DWsv28zXWD0xl1rgJFAqU9Ep7AgKpZ0T/z6ytbJuAiEn7yB77N 5SrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:message-id:date:references:in-reply-to:subject:cc:to :from:arc-authentication-results; bh=vEZFL3+d0EaRbQJU7MtdOagD1hFWllj5KhtSFHSp+qE=; b=J+aYmWojHKc0jQMcYL/2wPGdbV4P3FrbCnGyXBlJcB03bP6oi4d41J/nzyAt2sUvOk tQ9oqmFYp1JYh4f9+G4dkBhpMr/5vKa8jVq535vCMS/XAxP1BTO2Hg4c/FeWLvTdNr8B sSmMAi6HE3eSo/Edwwnfr17UvC59+U8tj7IJt+esDgjryot4X3ZIiGGkckpUb8OLRSqK f7aJcRi41/kTYFW5pbOr7okzbrYsThpekbXDghQt0sjReshv3HH6H9ELFd+6RV7wA171 LN9hCONy5TC7YMYpwaDtr/ACFBOw9n48j3DQVxrmv+GfupCe5oFlWI1IWcKX7aIxSxZa XJ1A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of felipe.balbi@linux.intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=felipe.balbi@linux.intel.com Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of felipe.balbi@linux.intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=felipe.balbi@linux.intel.com X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,349,1517904000"; d="asc'?scan'208";a="40566852" From: Felipe Balbi To: Anurag Kumar Vulisha , Greg Kroah-Hartman Cc: "v.anuragkumar\@gmail.com" , Ajay Yugalkishore Pandey , "linux-usb\@vger.kernel.org" , "linux-kernel\@vger.kernel.org" Subject: RE: [PATCH] usb: dwc3: gadget: Correct the logic for queuing sgs In-Reply-To: References: <1521442253-15906-1-git-send-email-anuragku@xilinx.com> <87fu4wqwis.fsf@linux.intel.com> Date: Fri, 23 Mar 2018 13:29:08 +0200 Message-ID: <87lgejni7v.fsf@linux.intel.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1595347861307192100?= X-GMAIL-MSGID: =?utf-8?q?1595727757202258062?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable (please configure your email client to break lines at 80 columns ;-) Hi, Anurag Kumar Vulisha writes: > Hi Felipe, > > Thanks for reviewing the patch , please find my comments inline no issues :-) >>Anurag Kumar Vulisha writes: >>> This patch fixes two issues >>> >>> 1. The code logic in dwc3_prepare_one_trb() incorrectly uses the >>> address and length given in req packet even for scattergather lists. >>> This patch correct's the code to use sg->address and sg->length when >>> scattergather lists are present. >>> >>> 2. The present code correctly fetches the req's which were not queued >>> from the started_list but fails to start from the sg where it >>> previously stopped queuing because of the unavailable TRB's. This >>> patch correct's the code to start queuing from the correct sg in sglist. >> >>these two should be in separate patches, then. >> > Will create separate patches in next version thanks, that helps :-) >>> Signed-off-by: Anurag Kumar Vulisha >>> --- >>> drivers/usb/dwc3/core.h | 4 ++++ >>> drivers/usb/dwc3/gadget.c | 42 >>> ++++++++++++++++++++++++++++++++++++------ >>> 2 files changed, 40 insertions(+), 6 deletions(-) >>> >>> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index >>> 860d2bc..2779e58 100644 >>> --- a/drivers/usb/dwc3/core.h >>> +++ b/drivers/usb/dwc3/core.h >>> @@ -718,7 +718,9 @@ struct dwc3_hwparams { >>> * @list: a list_head used for request queueing >>> * @dep: struct dwc3_ep owning this request >>> * @sg: pointer to first incomplete sg >>> + * @sg_to_start: pointer to the sg which should be queued next >>> * @num_pending_sgs: counter to pending sgs >>> + * @num_queued_sgs: counter to the number of sgs which already got >>> + queued >> >>this is the same as num_pending_sgs. > > num_pending_sgs is initially pointing to num_mapped_sgs, which gets > decremented in dwc3_cleanup_done_reqs(). > > Consider a case where the driver failed to queue all sgs into TRBs > because of insufficient TRB number. For example, lets assume req has 5 > sgs and only 3 got queued. In this scenario ,when the > dwc3_cleanup_done_reqs() gets called the value of num_pending_sgs =3D > 5. Since the value of num_pending_sgs is greater than 0, > __dwc3_gadget_kick_transfer() gets called with num_pending_sgs =3D 5-1 =3D > 4. > > Eventually __dwc3_gadget_kick_transfer() calls > dwc3_prepare_one_trb_sg() which has for_each_sg() call which loops for > num_pending_sgs times (4 times in our example). This is incorrect, > ideally it should be called only for 2 times because we have only 2 > sgs which previously were not queued. > > So, we added an extra flag num_queued_sgs which counts the number of > sgs that got queued successfully and make for_each_sg() loop for > num_mapped_sgs - num_queued_sgs times only . In our example case with > the updated logic, it will loop for 5 - 3 =3D 2 times only. Because of > this reason added num_queued_sgs flag. Please correct me if I am > wrong. That's true. Seems like we do need a new counter. >>> static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep >>> *dep, >>> >>> req->request.actual =3D length - req->remaining; >>> >>> - if ((req->request.actual < length) && req->num_pending_= sgs) >>> - return __dwc3_gadget_kick_transfer(dep); >>> + if (req->request.actual < length || >>> + req->num_pending_sgs) { >> >>why do you think this needs to be || instead of &&? If actual =3D=3D leng= th we're >>done, there's nothing more left to do. If there is either host sent more = data than >>it should, or we miscalculated num_pending_sgs, or we had the wrong length >>somewhere in some TRBs. Either of those cases is an error condition we do= n't >>want to hide. We want things to fail in that case. >> > > Consider the same example that we had previously discussed, among the > 5 sgs only 3 sgs got queued and all 3 sgs got completed > successfully. The req->remaining field represents the size of TRB > which was not transferred. In this example , as 3 sgs got completed > successfully the req-> remaining =3D 0. So , request.actual =3D length - 0 > (req->remaining) which means request.actual =3D=3D length. Because of > this , the condition check if ((req->request.actual < length) && > req->num_pending_sgs) ) fails even though we have req->num_pending_sgs > > 0. So, corrected the logic to always kick transfer for two > conditions 1) if req->num_pending_sgs > 0 2) if ((req->request.actual > < length) && req->num_pending_sgs)) condition satisfies. Please > correct me If my understanding is wrong. fair enough, but then we miss an important (IMO, that is) error case. If req->num_pending_sgs > 0 && actual =3D=3D length, then something is super wrong. We may just add it as an extra check: dev_WARN_ONCE(.... actual =3D=3D len && num_pending_sgs); =2D-=20 balbi --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEElLzh7wn96CXwjh2IzL64meEamQYFAlq05QQACgkQzL64meEa mQbM7g/5AQv+Frju8/J533L3swPgo9RWikfNL+rETtyu7X15f+KE7pQ4Za77BIrf PNJrzit1LNSrQ/ruwW3iMBtGxxER6jUWf+hx5yNBllhM2u6y4Tv2qwm3bC+8m4se 8BFcvxSylQH6oT9C9FbrNkvb4aDDCp9xsObNfYpix0GoRcHRGxVSSbz9YlBDAXKK jkRsD7e24pHwkx/EPGc4ShrU3u5/ifpCZZg2uRqnSFtJUxTWMMHjgONbiCRVTbKW al3Qvj2hKazOWbtxSMerK3sBRFuynFh4GA9fSDKLcJykR34zRGpBSLgciSuLU0+v Zqk7E335NKjMxIND/6v7M9h7Vlc8bjSSIB64N9Pa781EiZDGuWLE1X1Rbupx5F7E ST6YMlzCLeCfsBtfkfvuZLVR3hfi7RfDj2WwAEzg8fJfdFQ/+llUk0wOg1PRwH4j 1dCXtLGc4V8TQUr35+qxhrb2KM//5XXSib+amUGMiJDxg85hHOKHxvhPY/G4Mfk6 Qg99bAjFQ/b7INAweJntMO+axc29SQhPtYP9p2w+ZuCYd0NNYSjWfVBYGw1Uo+Eb FJcnmpIFpVfTDldbgOcifIRiD+F4TPqlywvN8fKR8/FbawYzUnLAV5s6A16hHsbm w5kkSHRiL2Uq1hKhlPb1ZJOokr58ySvQ1fQnOSwi0xmQ4KzKaSk= =v/i4 -----END PGP SIGNATURE----- --=-=-=--