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: [RFC] usb: hcd: complete URBs in threaded-IRQ context instead of tasklet From: Mauro Carvalho Chehab Message-Id: <20180227143934.2aa847ac@vento.lan> Date: Tue, 27 Feb 2018 14:39:34 -0300 To: Sebastian Andrzej Siewior Cc: Frederic Weisbecker , LKML , Peter Zijlstra , Thomas Gleixner , Alan Stern , linux-usb@vger.kernel.org List-ID: SGkgU2ViYXN0aWFuLAoKRW0gRnJpLCAxNiBGZWIgMjAxOCAxODowNDo1MCArMDEwMApTZWJhc3Rp YW4gQW5kcnplaiBTaWV3aW9yIDxiaWdlYXN5QGxpbnV0cm9uaXguZGU+IGVzY3JldmV1OgoKPiBJ J3ZlIGJlZW4gZ29pbmcgb3ZlciBGcmVkZXJpYydzIHNvZnRpcnEgcGF0Y2hlcyBhbmQgaXQgc2Vl bXMgdGhhdCB0aGVyZQo+IHdlcmUgdHdvIHByb2JsZW1zLiBPbmUgd2FzIG5ldHdvcmsgcmVsYXRl ZCwgdGhlIG90aGVyIHdhcyBNYXVybydzIFVTQgo+IGR2Yi1bc3RjXSBkZXZpY2Ugd2hpY2ggd2Fz IG5vdCBhYmxlIHRvIHN0cmVhbSBwcm9wZXJseSBvdmVyIHRpbWUuCj4gCj4gSGVyZSBpcyBhbiBh dHRlbXB0IHRvIGxldCB0aGUgVVJCIGNvbXBsZXRlIGluIHRoZSB0aHJlYWRlZCBoYW5kbGVyCj4g aW5zdGVhZCBvZiBnb2luZyB0byB0aGUgdGFza2xldC4gSW4gY2FzZSB0aGUgc3lzdGVtIGlzIFNN UCB0aGVuIHRoZQo+IHBhdGNoIFswXSB3b3VsZCBiZSByZXF1aXJlZCBpbiBvcmRlciB0byBoYXZl IHRoZSBJUlEgYW5kIGl0cyB0aHJlYWQgb24KPiB0aGUgc2FtZSBDUFUuCj4gCj4gTWF1cm8sIHdv dWxkIHlvdSBtaW5kIGdpdmluZyBpdCBhIHNob3Q/CgpTb3JyeSBmb3IgdGFraW5nIHNvbWUgdGlt ZSB0byB0ZXN0IGl0LCBoYXMgYmVlbiBidXN5IHRob3NlIGRheXMuLi4KCkFueXdheSwgSSB0ZXN0 ZWQgaXQgdG9kYXkuIERpZG4ndCB3b3JrLiBJdCBrZWVwIGxvc2luZyBkYXRhLgoKUmVnYXJkcywK Cj4gCj4gWzBdIGdlbmlycTogTGV0IGlycSB0aHJlYWQgZm9sbG93IHRoZSBlZmZlY3RpdmUgaGFy ZCBpcnEgYWZmaW5pdHkKPiAgICAgaHR0cHM6Ly9naXQua2VybmVsLm9yZy90aXAvY2JmODY5OTk5 NmE2ZTdmMmY2NzRiM2EyYTRjZWY5ZjY2NmZmNjEzZQo+IAo+IC0tLQo+IAo+IFRoZSB1cmItPmNv bXBsZXRlIGNhbGxiYWNrIHdhcyBpbml0aWFsbHkgaW52b2tlZCBpbiBJUlEgY29udGV4dCBhZnRl cgo+IHRoZSBIQ0QgZHJvcHBlZCBpdHMgbG9jayBiZWNhdXNlIHRoZSBjYWxsYmFjayBjb3VsZCBy ZS1xdWV1ZSB0aGUgVVJCCj4gYWdhaW4uIExhdGVyIHRoaXMgY29tcGxldGlvbiB3YXMgZGVmZXJy ZWQgdG8gdGhlIHRhc2tsZXQgYWxsb3dpbmcgdGhlCj4gSENEIGhvbGQgdGhlIGxvY2suIEFsc28g dGhlIEJIIGhhbmRsZXIgY2FuIGJlIGludGVycnVwdGVkIGJ5IHRoZSBJUlEKPiBoYW5kbGVyIGFk ZGluZyBtb3JlICJjb21wbGV0ZWQiIHJlcXVlc3RzIHRvIGl0cyBxdWV1ZS4KPiBXaGlsZSB0aGlz IGJhdGNoaW5nIGlzIGdvb2QgaW4gZ2VuZXJhbCwgdGhlIHNvZnRpcnEgZGVmZXJzIGl0cyBkb2lu ZyBmb3IKPiBzaG9ydCBwZXJpb2Qgb2YgdGltZSBpZiBpdCBpcyBydW5uaW5nIGNvbnN0YW50bHkg d2l0aG91dCBhIGJyZWFrLiBUaGlzCj4gYnJlYWtzIHNvbWUgdXNlIGNhc2VzIHdoZXJlIGNvbnN0 YW50IFVTQiB0aHJvdWdocHV0IGlzIHJlcXVpcmVkLgo+IEFzIGFuIGFsdGVybmF0aXZlIGFwcHJv YWNoIHRvIHRhc2tsZXQgaGFuZGxpbmcsIEkgZGVmZXIgdGhlIFVSQgo+IGNvbXBsZXRpb24gdG8g dGhlIEhDRCdzIHRocmVhZGVkIGhhbmRsZXIuIFRoZXJlIGFyZSB0d28gbGlzdHMgZm9yCj4gImhp Z2gtcHJpbyIgcHJvY2Nlc3NpbmcgYW5kIGxvd2VyIHByaW9yaXR5ICh0byBtaW1pYyBjdXJyZW50 IGJlaGF2aW91cikuCj4gVGhlIFVSQnMgaW4gdGhlIGhpZ2gtcHJpb3JpdHkgbGlzdCBhcmUgYWx3 YXlzIHByZWZmZXJlZCBvdmVyIHRoZSBVUkJzCj4gaW4gdGhlIGxvdy1wcmlvcml0eSBsaXN0Lgo+ IFRoZSBVUkJzIGZyb20gdGhlIHJvb3QtaHViIG5ldmVyIGNyZWF0ZSBhbiBpbnRlcnJ1cHQgc28g SSBjdXJyZW50bHkKPiBwcm9jZXNzIHRoZW0gaW4gYSB3b3JrcXVldWUgKEknbSBub3Qgc3VyZSBp ZiBhbiBVUkItZW5xdWV1ZSBpbiB0aGUKPiBjb21wbGV0aW9uIGhhbmRsZXIgd291bGQgYnJlYWsg c29tZXRoaW5nKS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBTZWJhc3RpYW4gQW5kcnplaiBTaWV3aW9y IDxiaWdlYXN5QGxpbnV0cm9uaXguZGU+Cj4gLS0tCj4gIGRyaXZlcnMvdXNiL2NvcmUvaGNkLmMg IHwgMTMxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+ ICBpbmNsdWRlL2xpbnV4L3VzYi9oY2QuaCB8ICAxNCArKystLS0KPiAgMiBmaWxlcyBjaGFuZ2Vk LCA5NSBpbnNlcnRpb25zKCspLCA1MCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKPiBpbmRleCBmYzMy MzkxYTM0ZDUuLjhkNmRkNGQzY2JlNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hj ZC5jCj4gKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwo+IEBAIC0xNzc1LDMzICsxNzc1LDc1 IEBAIHN0YXRpYyB2b2lkIF9fdXNiX2hjZF9naXZlYmFja191cmIoc3RydWN0IHVyYiAqdXJiKQo+ ICAJdXNiX3B1dF91cmIodXJiKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgdXNiX2dpdmViYWNr X3VyYl9iaCh1bnNpZ25lZCBsb25nIHBhcmFtKQo+ICtzdGF0aWMgdm9pZCB1c2JfaGNkX3JoX2di X3VyYihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIHsKPiAtCXN0cnVjdCBnaXZlYmFja191 cmJfYmggKmJoID0gKHN0cnVjdCBnaXZlYmFja191cmJfYmggKilwYXJhbTsKPiAtCXN0cnVjdCBs aXN0X2hlYWQgbG9jYWxfbGlzdDsKPiArCXN0cnVjdCBnaXZlYmFja191cmIJKmJoID0gY29udGFp bmVyX29mKHdvcmssIHN0cnVjdCBnaXZlYmFja191cmIsCj4gKwkJCQkJCSAgIHJoX2NvbXBsKTsK PiArCXN0cnVjdCBsaXN0X2hlYWQJdXJiX2xpc3Q7Cj4gIAo+ICAJc3Bpbl9sb2NrX2lycSgmYmgt PmxvY2spOwo+IC0JYmgtPnJ1bm5pbmcgPSB0cnVlOwo+IC0gcmVzdGFydDoKPiAtCWxpc3RfcmVw bGFjZV9pbml0KCZiaC0+aGVhZCwgJmxvY2FsX2xpc3QpOwo+ICsJbGlzdF9yZXBsYWNlX2luaXQo JmJoLT5yaF9oZWFkLCAmdXJiX2xpc3QpOwo+ICAJc3Bpbl91bmxvY2tfaXJxKCZiaC0+bG9jayk7 Cj4gIAo+IC0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZsb2NhbF9saXN0KSkgewo+ICsJd2hpbGUgKCFs aXN0X2VtcHR5KCZ1cmJfbGlzdCkpIHsKPiAgCQlzdHJ1Y3QgdXJiICp1cmI7Cj4gIAo+IC0JCXVy YiA9IGxpc3RfZW50cnkobG9jYWxfbGlzdC5uZXh0LCBzdHJ1Y3QgdXJiLCB1cmJfbGlzdCk7Cj4g KwkJdXJiID0gbGlzdF9maXJzdF9lbnRyeSgmdXJiX2xpc3QsIHN0cnVjdCB1cmIsIHVyYl9saXN0 KTsKPiAgCQlsaXN0X2RlbF9pbml0KCZ1cmItPnVyYl9saXN0KTsKPiAtCQliaC0+Y29tcGxldGlu Z19lcCA9IHVyYi0+ZXA7Cj4gIAkJX191c2JfaGNkX2dpdmViYWNrX3VyYih1cmIpOwo+IC0JCWJo LT5jb21wbGV0aW5nX2VwID0gTlVMTDsKPiArCX0KPiArfQo+ICsKPiArCj4gKyNkZWZpbmUgVVJC X1BSSU9fSElHSAkwCj4gKyNkZWZpbmUgVVJCX1BSSU9fTE9XCTEKPiArCj4gK3N0YXRpYyBpcnFy ZXR1cm5fdCB1c2JfaGNkX2diX3VyYihpbnQgaXJxLCB2b2lkICpfX2hjZCkKPiArewo+ICsJc3Ry dWN0IHVzYl9oY2QJCSpoY2QgPSBfX2hjZDsKPiArCXN0cnVjdCBnaXZlYmFja191cmIJKmJoID0g JmhjZC0+Z2JfdXJiOwo+ICsJc3RydWN0IGxpc3RfaGVhZAl1cmJfbGlzdFsyXTsKPiArCWludAkJ CWk7Cj4gKwo+ICsJSU5JVF9MSVNUX0hFQUQoJnVyYl9saXN0W1VSQl9QUklPX0hJR0hdKTsKPiAr CUlOSVRfTElTVF9IRUFEKCZ1cmJfbGlzdFtVUkJfUFJJT19MT1ddKTsKPiArCj4gKwlzcGluX2xv Y2tfaXJxKCZiaC0+bG9jayk7Cj4gKyByZXN0YXJ0Ogo+ICsJbGlzdF9zcGxpY2VfdGFpbF9pbml0 KCZiaC0+cHJpb19oaV9oZWFkLCAmdXJiX2xpc3RbVVJCX1BSSU9fSElHSF0pOwo+ICsJbGlzdF9z cGxpY2VfdGFpbF9pbml0KCZiaC0+cHJpb19sb19oZWFkLCAmdXJiX2xpc3RbVVJCX1BSSU9fTE9X XSk7Cj4gKwlzcGluX3VubG9ja19pcnEoJmJoLT5sb2NrKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRSh1cmJfbGlzdCk7IGkrKykgewo+ICsJCXdoaWxlICghbGlzdF9lbXB0eSgm dXJiX2xpc3RbaV0pKSB7Cj4gKwkJCXN0cnVjdCB1cmIgKnVyYjsKPiArCj4gKwkJCXVyYiA9IGxp c3RfZmlyc3RfZW50cnkoJnVyYl9saXN0W2ldLAo+ICsJCQkJCSAgICAgICBzdHJ1Y3QgdXJiLCB1 cmJfbGlzdCk7Cj4gKwkJCWxpc3RfZGVsX2luaXQoJnVyYi0+dXJiX2xpc3QpOwo+ICsJCQlpZiAo aSA9PSBVUkJfUFJJT19ISUdIKQo+ICsJCQkJYmgtPmNvbXBsZXRpbmdfZXAgPSB1cmItPmVwOwo+ ICsKPiArCQkJX191c2JfaGNkX2dpdmViYWNrX3VyYih1cmIpOwo+ICsKPiArCQkJaWYgKGkgPT0g VVJCX1BSSU9fSElHSCkKPiArCQkJCWJoLT5jb21wbGV0aW5nX2VwID0gTlVMTDsKPiArCj4gKwkJ CWlmIChpID09IFVSQl9QUklPX0xPVyAmJgo+ICsJCQkgICAgIWxpc3RfZW1wdHlfY2FyZWZ1bCgm dXJiX2xpc3RbVVJCX1BSSU9fSElHSF0pKSB7Cj4gKwkJCQlzcGluX2xvY2tfaXJxKCZiaC0+bG9j ayk7Cj4gKwkJCQlnb3RvIHJlc3RhcnQ7Cj4gKwkJCX0KPiArCQl9Cj4gIAl9Cj4gIAo+ICAJLyog Y2hlY2sgaWYgdGhlcmUgYXJlIG5ldyBVUkJzIHRvIGdpdmViYWNrICovCj4gIAlzcGluX2xvY2tf aXJxKCZiaC0+bG9jayk7Cj4gLQlpZiAoIWxpc3RfZW1wdHkoJmJoLT5oZWFkKSkKPiArCWlmICgh bGlzdF9lbXB0eSgmYmgtPnByaW9faGlfaGVhZCkgfHwKPiArCSAgICAhbGlzdF9lbXB0eSgmYmgt PnByaW9fbG9faGVhZCkpCj4gIAkJZ290byByZXN0YXJ0Owo+IC0JYmgtPnJ1bm5pbmcgPSBmYWxz ZTsKPiAgCXNwaW5fdW5sb2NrX2lycSgmYmgtPmxvY2spOwo+ICsJcmV0dXJuIElSUV9IQU5ETEVE Owo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMTgyMywzNyArMTg2NSwzMiBAQCBzdGF0aWMgdm9pZCB1 c2JfZ2l2ZWJhY2tfdXJiX2JoKHVuc2lnbmVkIGxvbmcgcGFyYW0pCj4gICAqLwo+ICB2b2lkIHVz Yl9oY2RfZ2l2ZWJhY2tfdXJiKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwg aW50IHN0YXR1cykKPiAgewo+IC0Jc3RydWN0IGdpdmViYWNrX3VyYl9iaCAqYmg7Cj4gLQlib29s IHJ1bm5pbmcsIGhpZ2hfcHJpb19iaDsKPiArCXN0cnVjdCBnaXZlYmFja191cmIJKmJoID0gJmhj ZC0+Z2JfdXJiOwo+ICsJc3RydWN0IGxpc3RfaGVhZAkqbGg7Cj4gIAo+ICAJLyogcGFzcyBzdGF0 dXMgdG8gdGFza2xldCB2aWEgdW5saW5rZWQgKi8KPiAgCWlmIChsaWtlbHkoIXVyYi0+dW5saW5r ZWQpKQo+ICAJCXVyYi0+dW5saW5rZWQgPSBzdGF0dXM7Cj4gIAo+IC0JaWYgKCFoY2RfZ2l2ZWJh Y2tfdXJiX2luX2JoKGhjZCkgJiYgIWlzX3Jvb3RfaHViKHVyYi0+ZGV2KSkgewo+ICsJaWYgKGlz X3Jvb3RfaHViKHVyYi0+ZGV2KSkgewo+ICsJCXNwaW5fbG9jaygmYmgtPmxvY2spOwo+ICsJCWxp c3RfYWRkX3RhaWwoJnVyYi0+dXJiX2xpc3QsICZiaC0+cmhfaGVhZCk7Cj4gKwkJc3Bpbl91bmxv Y2soJmJoLT5sb2NrKTsKPiArCQlxdWV1ZV93b3JrKHN5c3RlbV9oaWdocHJpX3dxLCAmYmgtPnJo X2NvbXBsKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwlpZiAoIWhjZF9naXZlYmFja191cmJfaW5f YmgoaGNkKSkgewo+ICAJCV9fdXNiX2hjZF9naXZlYmFja191cmIodXJiKTsKPiAgCQlyZXR1cm47 Cj4gIAl9Cj4gIAo+IC0JaWYgKHVzYl9waXBlaXNvYyh1cmItPnBpcGUpIHx8IHVzYl9waXBlaW50 KHVyYi0+cGlwZSkpIHsKPiAtCQliaCA9ICZoY2QtPmhpZ2hfcHJpb19iaDsKPiAtCQloaWdoX3By aW9fYmggPSB0cnVlOwo+IC0JfSBlbHNlIHsKPiAtCQliaCA9ICZoY2QtPmxvd19wcmlvX2JoOwo+ IC0JCWhpZ2hfcHJpb19iaCA9IGZhbHNlOwo+IC0JfQo+IC0KPiAtCXNwaW5fbG9jaygmYmgtPmxv Y2spOwo+IC0JbGlzdF9hZGRfdGFpbCgmdXJiLT51cmJfbGlzdCwgJmJoLT5oZWFkKTsKPiAtCXJ1 bm5pbmcgPSBiaC0+cnVubmluZzsKPiAtCXNwaW5fdW5sb2NrKCZiaC0+bG9jayk7Cj4gLQo+IC0J aWYgKHJ1bm5pbmcpCj4gLQkJOwo+IC0JZWxzZSBpZiAoaGlnaF9wcmlvX2JoKQo+IC0JCXRhc2ts ZXRfaGlfc2NoZWR1bGUoJmJoLT5iaCk7Cj4gKwlpZiAodXNiX3BpcGVpc29jKHVyYi0+cGlwZSkg fHwgdXNiX3BpcGVpbnQodXJiLT5waXBlKSkKPiArCQlsaCA9ICZiaC0+cHJpb19oaV9oZWFkOwo+ ICAJZWxzZQo+IC0JCXRhc2tsZXRfc2NoZWR1bGUoJmJoLT5iaCk7Cj4gKwkJbGggPSAmYmgtPnBy aW9fbG9faGVhZDsKPiArCXNwaW5fbG9jaygmYmgtPmxvY2spOwo+ICsJbGlzdF9hZGRfdGFpbCgm dXJiLT51cmJfbGlzdCwgbGgpOwo+ICsJc3Bpbl91bmxvY2soJmJoLT5sb2NrKTsKPiAgfQo+ICBF WFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkX2dpdmViYWNrX3VyYik7Cj4gIAo+IEBAIC0yNDM2LDkg KzI0NzMsMTcgQEAgaXJxcmV0dXJuX3QgdXNiX2hjZF9pcnEgKGludCBpcnEsIHZvaWQgKl9faGNk KQo+ICAJCXJjID0gSVJRX05PTkU7Cj4gIAllbHNlIGlmIChoY2QtPmRyaXZlci0+aXJxKGhjZCkg PT0gSVJRX05PTkUpCj4gIAkJcmMgPSBJUlFfTk9ORTsKPiAtCWVsc2UKPiAtCQlyYyA9IElSUV9I QU5ETEVEOwo+ICsJZWxzZSB7Cj4gKwkJc3RydWN0IGdpdmViYWNrX3VyYgkqYmggPSAmaGNkLT5n Yl91cmI7Cj4gIAo+ICsJCXNwaW5fbG9jaygmYmgtPmxvY2spOwo+ICsJCWlmICghbGlzdF9lbXB0 eSgmYmgtPnByaW9faGlfaGVhZCkgfHwKPiArCQkgICAgIWxpc3RfZW1wdHkoJmJoLT5wcmlvX2xv X2hlYWQpKQo+ICsJCQlyYyA9IElSUV9XQUtFX1RIUkVBRDsKPiArCQllbHNlCj4gKwkJCXJjID0g SVJRX0hBTkRMRUQ7Cj4gKwkJc3Bpbl91bmxvY2soJmJoLT5sb2NrKTsKPiArCX0KPiAgCXJldHVy biByYzsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkX2lycSk7Cj4gQEAgLTI0OTIs MTIgKzI1MzcsMTMgQEAgRVhQT1JUX1NZTUJPTF9HUEwgKHVzYl9oY19kaWVkKTsKPiAgCj4gIC8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSovCj4gIAo+IC1zdGF0aWMgdm9pZCBpbml0X2dpdmViYWNrX3VyYl9i aChzdHJ1Y3QgZ2l2ZWJhY2tfdXJiX2JoICpiaCkKPiArc3RhdGljIHZvaWQgaW5pdF9naXZlYmFj a191cmIoc3RydWN0IGdpdmViYWNrX3VyYiAqYmgpCj4gIHsKPiAtCj4gIAlzcGluX2xvY2tfaW5p dCgmYmgtPmxvY2spOwo+IC0JSU5JVF9MSVNUX0hFQUQoJmJoLT5oZWFkKTsKPiAtCXRhc2tsZXRf aW5pdCgmYmgtPmJoLCB1c2JfZ2l2ZWJhY2tfdXJiX2JoLCAodW5zaWduZWQgbG9uZyliaCk7Cj4g KwlJTklUX0xJU1RfSEVBRCgmYmgtPnByaW9fbG9faGVhZCk7Cj4gKwlJTklUX0xJU1RfSEVBRCgm YmgtPnByaW9faGlfaGVhZCk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmYmgtPnJoX2hlYWQpOwo+ICsJ SU5JVF9XT1JLKCZiaC0+cmhfY29tcGwsIHVzYl9oY2RfcmhfZ2JfdXJiKTsKPiAgfQo+ICAKPiAg c3RydWN0IHVzYl9oY2QgKl9fdXNiX2NyZWF0ZV9oY2QoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAq ZHJpdmVyLAo+IEBAIC0yNjcyLDcgKzI3MTgsOCBAQCBzdGF0aWMgaW50IHVzYl9oY2RfcmVxdWVz dF9pcnFzKHN0cnVjdCB1c2JfaGNkICpoY2QsCj4gIAo+ICAJCXNucHJpbnRmKGhjZC0+aXJxX2Rl c2NyLCBzaXplb2YoaGNkLT5pcnFfZGVzY3IpLCAiJXM6dXNiJWQiLAo+ICAJCQkJaGNkLT5kcml2 ZXItPmRlc2NyaXB0aW9uLCBoY2QtPnNlbGYuYnVzbnVtKTsKPiAtCQlyZXR2YWwgPSByZXF1ZXN0 X2lycShpcnFudW0sICZ1c2JfaGNkX2lycSwgaXJxZmxhZ3MsCj4gKwkJcmV0dmFsID0gcmVxdWVz dF90aHJlYWRlZF9pcnEoaXJxbnVtLCB1c2JfaGNkX2lycSwKPiArCQkJCQkgICAgICB1c2JfaGNk X2diX3VyYiwgaXJxZmxhZ3MsCj4gIAkJCQloY2QtPmlycV9kZXNjciwgaGNkKTsKPiAgCQlpZiAo cmV0dmFsICE9IDApIHsKPiAgCQkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwKPiBAQCAt Mjg2Myw5ICsyOTEwLDcgQEAgaW50IHVzYl9hZGRfaGNkKHN0cnVjdCB1c2JfaGNkICpoY2QsCj4g IAkJCSYmIGRldmljZV9jYW5fd2FrZXVwKCZoY2QtPnNlbGYucm9vdF9odWItPmRldikpCj4gIAkJ ZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInN1cHBvcnRzIFVTQiByZW1vdGUgd2FrZXVw XG4iKTsKPiAgCj4gLQkvKiBpbml0aWFsaXplIHRhc2tsZXRzICovCj4gLQlpbml0X2dpdmViYWNr X3VyYl9iaCgmaGNkLT5oaWdoX3ByaW9fYmgpOwo+IC0JaW5pdF9naXZlYmFja191cmJfYmgoJmhj ZC0+bG93X3ByaW9fYmgpOwo+ICsJaW5pdF9naXZlYmFja191cmIoJmhjZC0+Z2JfdXJiKTsKPiAg Cj4gIAkvKiBlbmFibGUgaXJxcyBqdXN0IGJlZm9yZSB3ZSBzdGFydCB0aGUgY29udHJvbGxlciwK PiAgCSAqIGlmIHRoZSBCSU9TIHByb3ZpZGVzIGxlZ2FjeSBQQ0kgaXJxcy4KPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAo+IGlu ZGV4IDE3NjkwMDUyODgyMi4uMTI1NzM1MTVhY2I2IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGlu dXgvdXNiL2hjZC5oCj4gKysrIGIvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKPiBAQCAtNjQsMTEg KzY0LDEyIEBACj4gIAo+ICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo+ICAKPiAtc3RydWN0IGdpdmVi YWNrX3VyYl9iaCB7Cj4gLQlib29sIHJ1bm5pbmc7Cj4gK3N0cnVjdCBnaXZlYmFja191cmIgewo+ ICAJc3BpbmxvY2tfdCBsb2NrOwo+IC0Jc3RydWN0IGxpc3RfaGVhZCAgaGVhZDsKPiAtCXN0cnVj dCB0YXNrbGV0X3N0cnVjdCBiaDsKPiArCXN0cnVjdCBsaXN0X2hlYWQJcHJpb19sb19oZWFkOwo+ ICsJc3RydWN0IGxpc3RfaGVhZAlwcmlvX2hpX2hlYWQ7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkCXJo X2hlYWQ7Cj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcmhfY29tcGw7Cj4gIAlzdHJ1Y3QgdXNiX2hv c3RfZW5kcG9pbnQgKmNvbXBsZXRpbmdfZXA7Cj4gIH07Cj4gIAo+IEBAIC0xNjksOCArMTcwLDcg QEAgc3RydWN0IHVzYl9oY2Qgewo+ICAJcmVzb3VyY2Vfc2l6ZV90CQlyc3JjX2xlbjsJLyogbWVt b3J5L2lvIHJlc291cmNlIGxlbmd0aCAqLwo+ICAJdW5zaWduZWQJCXBvd2VyX2J1ZGdldDsJLyog aW4gbUEsIDAgPSBubyBsaW1pdCAqLwo+ICAKPiAtCXN0cnVjdCBnaXZlYmFja191cmJfYmggIGhp Z2hfcHJpb19iaDsKPiAtCXN0cnVjdCBnaXZlYmFja191cmJfYmggIGxvd19wcmlvX2JoOwo+ICsJ c3RydWN0IGdpdmViYWNrX3VyYglnYl91cmI7Cj4gIAo+ICAJLyogYmFuZHdpZHRoX211dGV4IHNo b3VsZCBiZSB0YWtlbiBiZWZvcmUgYWRkaW5nIG9yIHJlbW92aW5nCj4gIAkgKiBhbnkgbmV3IGJ1 cyBiYW5kd2lkdGggY29uc3RyYWludHM6Cj4gQEAgLTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgaW5s aW5lIGludCBoY2RfZ2l2ZWJhY2tfdXJiX2luX2JoKHN0cnVjdCB1c2JfaGNkICpoY2QpCj4gIHN0 YXRpYyBpbmxpbmUgYm9vbCBoY2RfcGVyaW9kaWNfY29tcGxldGlvbl9pbl9wcm9ncmVzcyhzdHJ1 Y3QgdXNiX2hjZCAqaGNkLAo+ICAJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCj4gIHsK PiAtCXJldHVybiBoY2QtPmhpZ2hfcHJpb19iaC5jb21wbGV0aW5nX2VwID09IGVwOwo+ICsJcmV0 dXJuIGhjZC0+Z2JfdXJiLmNvbXBsZXRpbmdfZXAgPT0gZXA7Cj4gIH0KPiAgCj4gIGV4dGVybiBp bnQgdXNiX2hjZF9saW5rX3VyYl90b19lcChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJi ICp1cmIpOwoKCgpUaGFua3MsCk1hdXJvCi0tLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlz dDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBpbgp0aGUgYm9keSBvZiBh IG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9yZG9tbyBpbmZv IGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK