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: [v4,13/15] usb: dwc3: Add workaround for isoc start transfer failure From: Felipe Balbi Message-Id: <87r2onrq6x.fsf@linux.intel.com> Date: Wed, 14 Mar 2018 10:56:06 +0200 To: Thinh Nguyen Thinh Nguyen , "linux-usb@vger.kernel.org" Cc: John Youn List-ID: SGksCgpUaGluaCBOZ3V5ZW4gPFRoaW5oLk5ndXllbkBzeW5vcHN5cy5jb20+IHdyaXRlczoKPj4g VGhpbmggTmd1eWVuIDxUaGluaC5OZ3V5ZW5Ac3lub3BzeXMuY29tPiB3cml0ZXM6Cj4+PiBJbiBE V0NfdXNiMzEgdmVyc2lvbiAxLjcwYS1lYTA2IGFuZCBwcmlvciwgZm9yIGhpZ2hzcGVlZCBhbmQg ZnVsbHNwZWVkCj4+PiBpc29jaHJvbm91cyBJTiwgQklUWzE1OjE0XSBvZiB0aGUgMTYtYml0IG1p Y3JvZnJhbWUgbnVtYmVyIHJlcG9ydGVkIGJ5Cj4+PiB0aGUgWGZlck5vdFJlYWR5IGV2ZW50IGFy ZSBpbnZhbGlkLiBUaGUgZHJpdmVyIHVzZXMgdGhpcyBudW1iZXIgdG8KPj4+IHNjaGVkdWxlIHRo ZSBpc29jaHJvbm91cyB0cmFuc2ZlciBhbmQgcGFzc2VzIGl0IHRvIHRoZSBTVEFSVCBUUkFOU0ZF Ugo+Pj4gY29tbWFuZC4gQmVjYXVzZSB0aGlzIG51bWJlciBpcyBpbnZhbGlkLCB0aGUgY29tbWFu ZCBtYXkgZmFpbC4gSWYKPj4+IEJJVFsxNToxNF0gbWF0Y2hlcyB0aGUgaW50ZXJuYWwgMTYtYml0 IG1pY3JvZnJhbWUsIHRoZSBTVEFSVCBUUkFOU0ZFUgo+Pj4gY29tbWFuZCB3aWxsIHBhc3MgYW5k IHRoZSB0cmFuc2ZlciB3aWxsIHN0YXJ0IGF0IHRoZSBzY2hlZHVsZWQgdGltZSwgaWYKPj4+IGl0 IGlzIG9mZiBieSAxLCB0aGUgY29tbWFuZCB3aWxsIHN0aWxsIHBhc3MsIGJ1dCB0aGUgdHJhbnNm ZXIgd2lsbCBzdGFydAo+Pj4gMiBzZWNvbmRzIGluIHRoZSBmdXR1cmUuIEFsbCBvdGhlciBjb25k aXRpb25zIHRoZSBTVEFSVCBUUkFOU0ZFUiBjb21tYW5kCj4+PiB3aWxsIGZhaWwgd2l0aCBidXMt ZXhwaXJ5Lgo+Pj4KPj4+IEluIG9yZGVyIHRvIHdvcmthcm91bmQgdGhpcyBpc3N1ZSwgd2UgY2Fu IGlzc3VlIG11bHRpcGxlIFNUQVJUIFRSQU5TRkVSCj4+PiBjb21tYW5kcyB3aXRoIGRpZmZlcmVu dCB2YWx1ZXMgb2YgQklUWzE1OjE0XTogJ2IwMCwgJ2IwMSwgJ2IxMCwgYW5kICdiMTEKPj4+IGFu ZCBkbyBhbiBFTkQgVFJBTlNGRVIgY29tbWFuZC4gRWFjaCBjb21iaW5hdGlvbiBpcyAyIHNlY29u ZHMgYXBhcnQuIDQKPj4+IHNlY29uZHMgaW50byB0aGUgZnV0dXJlIHdpbGwgY2F1c2UgYSBidXMt ZXhwaXJ5IGZhaWx1cmUuIEFzIHRoZSByZXN1bHQsCj4+PiB3aXRoaW4gdGhlIDQgcG9zc2libGUg Y29tYmluYXRpb25zIGZvciBCSVRbMTU6MTRdLCB0aGVyZSB3aWxsIGJlIDIKPj4+IHN1Y2Nlc3Nm dWwgYW5kIDIgZmFpbHVyZSBTVEFSVCBDT01NQU5EIHN0YXR1cy4gT25lIG9mIHRoZSAyIHN1Y2Nl c3NmdWwKPj4+IGNvbW1hbmQgc3RhdHVzIHdpbGwgcmVzdWx0IGluIGEgMi1zZWNvbmQgZGVsYXku IFRoZSBzbWFsbGVyIEJJVFsxNToxNF0KPj4+IHZhbHVlIGlzIHRoZSBjb3JyZWN0IG9uZS4KPj4+ Cj4+PiBTaW5jZSB0aGVyZSBhcmUgb25seSA0IG91dGNvbWVzIGFuZCB0aGUgcmVzdWx0cyBhcmUg b3JkZXJlZCwgd2UgY2FuCj4+PiBzaW1wbHkgdGVzdCAyIFNUQVJUIFRSQU5TRkVSIGNvbW1hbmRz IHdpdGggQklUWzE1OjE0XSBjb21iaW5hdGlvbnMgJ2IwMAo+Pj4gYW5kICdiMDEgdG8gZGVkdWNl IHRoZSBzbWFsbGVzdCBzdWNjZXNzZnVsIGNvbWJpbmF0aW9uLgo+Pj4KPj4+ICAgICAgICAgICAg ICArLS0tLS0tLS0tKy0tLS0tLS0tLSsKPj4+ICAgICAgICAgICAgICB8IEJJVCgxNSkgfCBCSVQo MTQpIHwKPj4+ICAgICAgICAgICAgICArPT09PT09PT09Kz09PT09PT09PSsKPj4+ICAgICAgIHRl c3QwICB8ICAgMCAgICAgfCAgICAwICAgIHwKPj4+ICAgICAgICAgICAgICArLS0tLS0tLS0tKy0t LS0tLS0tLSsKPj4+ICAgICAgIHRlc3QxICB8ICAgMCAgICAgfCAgICAxICAgIHwKPj4+ICAgICAg ICAgICAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsKPj4+Cj4+PiBXaXRoIHRlc3QwIGFuZCB0ZXN0 MSBCSVRbMTU6MTRdIGNvbWJpbmF0aW9ucywgaGVyZSBpcyB0aGUgbG9naWM6Cj4+PiBpZiB0ZXN0 MCBwYXNzZXMgYW5kIHRlc3QxIHBhc3NlcywgQklUWzE1OjE0XSBpcyAnYjAwCj4+PiBpZiB0ZXN0 MCBwYXNzZXMgYW5kIHRlc3QxIGZhaWxzLCBCSVRbMTU6MTRdIGlzICdiMTEKPj4+IGlmIHRlc3Qw IGZhaWxzIGFuZCB0ZXN0MSBmYWlscywgQklUWzE1OjE0XSBpcyAnYjEwCj4+PiBpZiB0ZXN0MCBm YWlscyBhbmQgdGVzdDEgcGFzc2VzLCBCSVRbMTU6MTRdIGlzICdiMDEKPj4+Cj4+PiBTeW5vcHN5 cyBTVEFSIDkwMDEyMDIwMjM6IFdyb25nIG1pY3JvZnJhbWUgbnVtYmVyIGZvciBpc29jaHJvbm91 cyBJTgo+Pj4gZW5kcG9pbnRzLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IFRoaW5oIE5ndXllbiA8 dGhpbmhuQHN5bm9wc3lzLmNvbT4KPj4+IC0tLQo+Pj4gICBkcml2ZXJzL3VzYi9kd2MzL2NvcmUu YyAgIHwgICAyICsKPj4+ICAgZHJpdmVycy91c2IvZHdjMy9jb3JlLmggICB8ICAxMyArKysrCj4+ PiAgIGRyaXZlcnMvdXNiL2R3YzMvZ2FkZ2V0LmMgfCAxODkgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLQo+Pj4gICAzIGZpbGVzIGNoYW5nZWQsIDE5OSBpbnNl cnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Vz Yi9kd2MzL2NvcmUuYyBiL2RyaXZlcnMvdXNiL2R3YzMvY29yZS5jCj4+PiBpbmRleCBkZGNmYTJh NjBkNGIuLmQyN2RkZmNjM2I4YSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvdXNiL2R3YzMvY29y ZS5jCj4+PiArKysgYi9kcml2ZXJzL3VzYi9kd2MzL2NvcmUuYwo+Pj4gQEAgLTEwNzMsNiArMTA3 Myw4IEBAIHN0YXRpYyB2b2lkIGR3YzNfZ2V0X3Byb3BlcnRpZXMoc3RydWN0IGR3YzMgKmR3YykK Pj4+ICAgCQkJCSJzbnBzLGlzLXV0bWktbDEtc3VzcGVuZCIpOwo+Pj4gICAJZGV2aWNlX3Byb3Bl cnR5X3JlYWRfdTgoZGV2LCAic25wcyxoaXJkLXRocmVzaG9sZCIsCj4+PiAgIAkJCQkmaGlyZF90 aHJlc2hvbGQpOwo+Pj4gKwlkd2MtPmRpc19zdGFydF90cmFuc2Zlcl9xdWlyayA9IGRldmljZV9w cm9wZXJ0eV9yZWFkX2Jvb2woZGV2LAo+Pj4gKwkJCQkic25wcyxkaXMtc3RhcnQtdHJhbnNmZXIt cXVpcmsiKTsKPj4+ICAgCWR3Yy0+dXNiM19scG1fY2FwYWJsZSA9IGRldmljZV9wcm9wZXJ0eV9y ZWFkX2Jvb2woZGV2LAo+Pj4gICAJCQkJInNucHMsdXNiM19scG1fY2FwYWJsZSIpOwo+Pj4gICAJ ZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTgoZGV2LCAic25wcyxyeC10aHItbnVtLXBrdC1wcmQiLAo+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvY29yZS5oIGIvZHJpdmVycy91c2IvZHdj My9jb3JlLmgKPj4+IGluZGV4IDcxY2Y1M2EwNmU0OS4uYzA5Y2QwYzYzNTRlIDEwMDY0NAo+Pj4g LS0tIGEvZHJpdmVycy91c2IvZHdjMy9jb3JlLmgKPj4+ICsrKyBiL2RyaXZlcnMvdXNiL2R3YzMv Y29yZS5oCj4+PiBAQCAtNTU1LDYgKzU1NSwxMCBAQCBzdHJ1Y3QgZHdjM19ldmVudF9idWZmZXIg ewo+Pj4gICAgKiBAbmFtZTogYSBodW1hbiByZWFkYWJsZSBuYW1lIGUuZy4gZXAxb3V0LWJ1bGsK Pj4+ICAgICogQGRpcmVjdGlvbjogdHJ1ZSBmb3IgVFgsIGZhbHNlIGZvciBSWAo+Pj4gICAgKiBA c3RyZWFtX2NhcGFibGU6IHRydWUgd2hlbiBzdHJlYW1zIGFyZSBlbmFibGVkCj4+PiArICogQGZy YW1lX251bWJlcl8xNV8xNDogQklUWzE1OjE0XSBvZiB0aGUgZnJhbWUgbnVtYmVyIHRvIHRlc3Qg aXNvY2hyb25vdXMKPj4+ICsgKgkJU1RBUlQgVFJBTlNGRVIgY29tbWFuZCBmYWlsdXJlIHdvcmth cm91bmQKPj4+ICsgKiBAdGVzdDBfc3RhdHVzOiB0aGUgcmVzdWx0IG9mIHRlc3RpbmcgU1RBUlQg VFJBTlNGRVIgY29tbWFuZCB3aXRoCj4+PiArICoJCWZyYW1lX251bWJlcl8xNV8xNCA9ICdiMDAg KG5vbi16ZXJvIG1lYW5zIGZhaWx1cmUpCj4+PiAgICAqLwo+Pj4gICBzdHJ1Y3QgZHdjM19lcCB7 Cj4+PiAgIAlzdHJ1Y3QgdXNiX2VwCQllbmRwb2ludDsKPj4+IEBAIC02MDgsNiArNjEyLDEwIEBA IHN0cnVjdCBkd2MzX2VwIHsKPj4+ICAgCj4+PiAgIAl1bnNpZ25lZAkJZGlyZWN0aW9uOjE7Cj4+ PiAgIAl1bnNpZ25lZAkJc3RyZWFtX2NhcGFibGU6MTsKPj4+ICsKPj4+ICsJLyogSXNvY2hyb25v dXMgU1RBUlQgVFJBTlNGRVIgd29ya2Fyb3VuZCBmb3IgU1RBUiA5MDAxMjAyMDIzICovCj4+PiAr CXU4CQkJZnJhbWVfbnVtYmVyXzE1XzE0Owo+Pj4gKwlpbnQJCQl0ZXN0MF9zdGF0dXM7Cj4+PiAg IH07Cj4+PiAgIAo+Pj4gICBlbnVtIGR3YzNfcGh5IHsKPj4+IEBAIC04NjIsNiArODcwLDggQEAg c3RydWN0IGR3YzNfc2NyYXRjaHBhZF9hcnJheSB7Cj4+PiAgICAqIEBwdWxsdXBzX2Nvbm5lY3Rl ZDogdHJ1ZSB3aGVuIFJ1bi9TdG9wIGJpdCBpcyBzZXQKPj4+ICAgICogQHNldHVwX3BhY2tldF9w ZW5kaW5nOiB0cnVlIHdoZW4gdGhlcmUncyBhIFNldHVwIFBhY2tldCBpbiBGSUZPLiBXb3JrYXJv dW5kCj4+PiAgICAqIEB0aHJlZV9zdGFnZV9zZXR1cDogc2V0IGlmIHdlIHBlcmZvcm0gYSB0aHJl ZSBwaGFzZSBzZXR1cAo+Pj4gKyAqIEBkaXNfc3RhcnRfdHJhbnNmZXJfcXVpcms6IHNldCBpZiBz dGFydF90cmFuc2ZlciBmYWlsdXJlIFNXIHdvcmthcm91bmQgaXMKPj4+ICsgKgkJCW5vdCBuZWVk ZWQgZm9yIERXQ191c2IzMSB2ZXJzaW9uIDEuNzBhLWVhMDYgYW5kIGJlbG93Cj4+PiAgICAqIEB1 c2IzX2xwbV9jYXBhYmxlOiBzZXQgaWYgaGFkcndhcmUgc3VwcG9ydHMgTGluayBQb3dlciBNYW5h Z2VtZW50Cj4+PiAgICAqIEBkaXNhYmxlX3NjcmFtYmxlX3F1aXJrOiBzZXQgaWYgd2UgZW5hYmxl IHRoZSBkaXNhYmxlIHNjcmFtYmxlIHF1aXJrCj4+PiAgICAqIEB1MmV4aXRfbGZwc19xdWlyazog c2V0IGlmIHdlIGVuYWJsZSB1MmV4aXQgbGZwcyBxdWlyawo+Pj4gQEAgLTk4MiwxMCArOTkyLDEy IEBAIHN0cnVjdCBkd2MzIHsKPj4+ICAgI2RlZmluZSBEV0MzX1JFVklTSU9OX0lTX0RXQzMxCQkw eDgwMDAwMDAwCj4+PiAgICNkZWZpbmUgRFdDM19VU0IzMV9SRVZJU0lPTl8xMTBBCSgweDMxMzEz MDJhIHwgRFdDM19SRVZJU0lPTl9JU19EV0MzMSkKPj4+ICAgI2RlZmluZSBEV0MzX1VTQjMxX1JF VklTSU9OXzEyMEEJKDB4MzEzMjMwMmEgfCBEV0MzX1JFVklTSU9OX0lTX0RXQzMxKQo+Pj4gKyNk ZWZpbmUgRFdDM19VU0IzMV9SRVZJU0lPTl8xNzBBCSgweDMxMzczMDJhIHwgRFdDM19SRVZJU0lP Tl9JU19EV0MzMSkKPj4+ICAgCj4+PiAgIAl1MzIJCQl2ZXJfdHlwZTsKPj4+ICAgCj4+PiAgICNk ZWZpbmUgRFdDMzFfVkVSU0lPTlRZUEVfRUEwMQkJMHg2NTYxMzAzMQo+Pj4gKyNkZWZpbmUgRFdD MzFfVkVSU0lPTlRZUEVfRUEwNgkJMHg2NTYxMzAzNgo+Pj4gICAKPj4+ICAgCWVudW0gZHdjM19l cDBfbmV4dAllcDBfbmV4dF9ldmVudDsKPj4+ICAgCWVudW0gZHdjM19lcDBfc3RhdGUJZXAwc3Rh dGU7Cj4+PiBAQCAtMTAyOSw2ICsxMDQxLDcgQEAgc3RydWN0IGR3YzMgewo+Pj4gICAJdW5zaWdu ZWQJCXB1bGx1cHNfY29ubmVjdGVkOjE7Cj4+PiAgIAl1bnNpZ25lZAkJc2V0dXBfcGFja2V0X3Bl bmRpbmc6MTsKPj4+ICAgCXVuc2lnbmVkCQl0aHJlZV9zdGFnZV9zZXR1cDoxOwo+Pj4gKwl1bnNp Z25lZAkJZGlzX3N0YXJ0X3RyYW5zZmVyX3F1aXJrOjE7Cj4+PiAgIAl1bnNpZ25lZAkJdXNiM19s cG1fY2FwYWJsZToxOwo+Pj4gICAKPj4+ICAgCXVuc2lnbmVkCQlkaXNhYmxlX3NjcmFtYmxlX3F1 aXJrOjE7Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9nYWRnZXQuYyBiL2RyaXZl cnMvdXNiL2R3YzMvZ2FkZ2V0LmMKPj4+IGluZGV4IDI0Y2JkNzk0ODFlOC4uZjg3M2ViYjQwZWE4 IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy91c2IvZHdjMy9nYWRnZXQuYwo+Pj4gKysrIGIvZHJp dmVycy91c2IvZHdjMy9nYWRnZXQuYwo+Pj4gQEAgLTEyNDEsNiArMTI0MSwxNjEgQEAgc3RhdGlj IGludCBfX2R3YzNfZ2FkZ2V0X2tpY2tfdHJhbnNmZXIoc3RydWN0IGR3YzNfZXAgKmRlcCkKPj4+ ICAgCXJldHVybiAwOwo+Pj4gICB9Cj4+PiAgIAo+Pj4gK3N0YXRpYyBpbnQgX19kd2MzX2NsZWFu dXBfZG9uZV90cmJzKHN0cnVjdCBkd2MzICpkd2MsIHN0cnVjdCBkd2MzX2VwICpkZXAsCj4+PiAr CQkJCSAgICBzdHJ1Y3QgZHdjM19yZXF1ZXN0ICpyZXEsCj4+PiArCQkJCSAgICBzdHJ1Y3QgZHdj M190cmIgKnRyYiwKPj4+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBkd2MzX2V2ZW50X2RlcGV2dCAq ZXZlbnQsCj4+PiArCQkJCSAgICBpbnQgc3RhdHVzLCBpbnQgY2hhaW4pOwo+Pj4gKwo+Pj4gKy8q Kgo+Pj4gKyAqIHNldF9pc29jX3N0YXJ0X2ZyYW1lIC0gc2V0IHZhbGlkIHdyYXAtYXJvdW5kIGlz b2Mgc3RhcnQgZnJhbWUgYml0cwo+PiAKPj4gbmVlZHMgYSBkd2MzXyBwcmVmaXgKPj4gCj4+PiAr ICogQGR3YzogcG9pbnRlciB0byBvdXIgY29udGV4dCBzdHJ1Y3R1cmUKPj4gCj4+IHlvdSBkb24n dCBuZWVkIHRvIHBhc3MgZHdjIGhlcmUuIEEgcmVmZXJlbmNlIHRvIGl0IGlzIGluc2lkZSBzdHJ1 Y3QKPj4gZHdjM19lcC4gQWxzbywgeW91IG5ldmVyIHVzZSBkd2MgaW5zaWRlIHRoZSBmdW5jdGlv biBhcGFydCBmcm9tIGFuCj4+IHVubmVjZXNzYXJ5IGRldl9pbmZvKCkKPj4gCj4+PiArICogQGRl cDogaXNvYyBlbmRwb2ludAo+Pj4gKyAqIEBjdXJfdWY6IFRoZSBjdXJyZW50IG1pY3JvZnJhbWUg dGFrZW4gZnJvbSBYZmVyTm90UmVhZHkgZXZlbnQKPj4+ICsgKgo+Pj4gKyAqIFRoaXMgZnVuY3Rp b24gdGVzdHMgZm9yIHRoZSBjb3JyZWN0IGNvbWJpbmF0aW9uIG9mIEJJVFsxNToxNF0gZnJvbQo+ Pj4gKyAqIHRoZSAxNi1iaXQgbWljcm9mcmFtZSBudW1iZXIgcmVwb3J0ZWQgYnkgdGhlIFhmZXJO b3RSZWFkeSBldmVudCBhbmQKPj4+ICsgKiBzZXQgaXQgdG8gZGVwLT5mcmFtZV9udW1iZXIuCj4+ PiArICoKPj4+ICsgKiBJbiBEV0NfdXNiMzEgdmVyc2lvbiAxLjcwYS1lYTA2IGFuZCBwcmlvciwg Zm9yIGhpZ2hzcGVlZCBhbmQgZnVsbHNwZWVkCj4+PiArICogaXNvY2hyb25vdXMgSU4sIEJJVFsx NToxNF0gb2YgdGhlIDE2LWJpdCBtaWNyb2ZyYW1lIG51bWJlciByZXBvcnRlZCBieQo+Pj4gKyAq IHRoZSBYZmVyTm90UmVhZHkgZXZlbnQgYXJlIGludmFsaWQuIFRoZSBkcml2ZXIgdXNlcyB0aGlz IG51bWJlciB0bwo+Pj4gKyAqIHNjaGVkdWxlIHRoZSBpc29jaHJvbm91cyB0cmFuc2ZlciBhbmQg cGFzc2VzIGl0IHRvIHRoZSBTVEFSVCBUUkFOU0ZFUgo+Pj4gKyAqIGNvbW1hbmQuIEJlY2F1c2Ug dGhpcyBudW1iZXIgaXMgaW52YWxpZCwgdGhlIGNvbW1hbmQgbWF5IGZhaWwuIElmCj4+PiArICog QklUWzE1OjE0XSBtYXRjaGVzIHRoZSBpbnRlcm5hbCAxNi1iaXQgbWljcm9mcmFtZSwgdGhlIFNU QVJUIFRSQU5TRkVSCj4+PiArICogY29tbWFuZCB3aWxsIHBhc3MgYW5kIHRoZSB0cmFuc2ZlciB3 aWxsIHN0YXJ0IGF0IHRoZSBzY2hlZHVsZWQgdGltZSwgaWYKPj4+ICsgKiBpdCBpcyBvZmYgYnkg MSwgdGhlIGNvbW1hbmQgd2lsbCBzdGlsbCBwYXNzLCBidXQgdGhlIHRyYW5zZmVyIHdpbGwgc3Rh cnQKPj4+ICsgKiAyIHNlY29uZHMgaW4gdGhlIGZ1dHVyZS4gQWxsIG90aGVyIGNvbmRpdGlvbnMg dGhlIFNUQVJUIFRSQU5TRkVSIGNvbW1hbmQKPj4+ICsgKiB3aWxsIGZhaWwgd2l0aCBidXMtZXhw aXJ5Lgo+Pj4gKyAqCj4+PiArICogSW4gb3JkZXIgdG8gd29ya2Fyb3VuZCB0aGlzIGlzc3VlLCB3 ZSBjYW4gaXNzdWUgbXVsdGlwbGUgU1RBUlQgVFJBTlNGRVIKPj4+ICsgKiBjb21tYW5kcyB3aXRo IGRpZmZlcmVudCB2YWx1ZXMgb2YgQklUWzE1OjE0XTogJ2IwMCwgJ2IwMSwgJ2IxMCwgYW5kICdi MTEKPj4+ICsgKiBhbmQgZG8gYW4gRU5EIFRSQU5TRkVSIGNvbW1hbmQuIEVhY2ggY29tYmluYXRp b24gaXMgMiBzZWNvbmRzIGFwYXJ0LiA0Cj4+PiArICogc2Vjb25kcyBpbnRvIHRoZSBmdXR1cmUg d2lsbCBjYXVzZSBhIGJ1cy1leHBpcnkgZmFpbHVyZS4gQXMgdGhlIHJlc3VsdCwKPj4+ICsgKiB3 aXRoaW4gdGhlIDQgcG9zc2libGUgY29tYmluYXRpb25zIGZvciBCSVRbMTU6MTRdLCB0aGVyZSB3 aWxsIGJlIDIKPj4+ICsgKiBzdWNjZXNzZnVsIGFuZCAyIGZhaWx1cmUgU1RBUlQgQ09NTUFORCBz dGF0dXMuIE9uZSBvZiB0aGUgMiBzdWNjZXNzZnVsCj4+PiArICogY29tbWFuZCBzdGF0dXMgd2ls bCByZXN1bHQgaW4gYSAyLXNlY29uZCBkZWxheS4gVGhlIHNtYWxsZXIgQklUWzE1OjE0XQo+Pj4g KyAqIHZhbHVlIGlzIHRoZSBjb3JyZWN0IG9uZS4KPj4+ICsgKgo+Pj4gKyAqIFNpbmNlIHRoZXJl IGFyZSBvbmx5IDQgb3V0Y29tZXMgYW5kIHRoZSByZXN1bHRzIGFyZSBvcmRlcmVkLCB3ZSBjYW4K Pj4+ICsgKiBzaW1wbHkgdGVzdCAyIFNUQVJUIFRSQU5TRkVSIGNvbW1hbmRzIHdpdGggQklUWzE1 OjE0XSBjb21iaW5hdGlvbnMgJ2IwMAo+Pj4gKyAqIGFuZCAnYjAxIHRvIGRlZHVjZSB0aGUgc21h bGxlc3Qgc3VjY2Vzc2Z1bCBjb21iaW5hdGlvbi4KPj4+ICsgKgo+Pj4gKyAqICAgICAgICAgICAg ICstLS0tLS0tLS0rLS0tLS0tLS0tKwo+Pj4gKyAqICAgICAgICAgICAgIHwgQklUKDE1KSB8IEJJ VCgxNCkgfAo+Pj4gKyAqICAgICAgICAgICAgICs9PT09PT09PT0rPT09PT09PT09Kwo+Pj4gKyAq ICAgICAgdGVzdDAgIHwgICAwICAgICB8ICAgIDAgICAgfAo+Pj4gKyAqICAgICAgICAgICAgICst LS0tLS0tLS0rLS0tLS0tLS0tKwo+Pj4gKyAqICAgICAgdGVzdDEgIHwgICAwICAgICB8ICAgIDEg ICAgfAo+Pj4gKyAqICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKwo+Pj4gKyAqCj4+ PiArICogV2l0aCB0ZXN0MCBhbmQgdGVzdDEgQklUWzE1OjE0XSBjb21iaW5hdGlvbnMsIGhlcmUg aXMgdGhlIGxvZ2ljOgo+Pj4gKyAqIGlmIHRlc3QwIHBhc3NlcyBhbmQgdGVzdDEgcGFzc2VzLCBC SVRbMTU6MTRdIGlzICdiMDAKPj4+ICsgKiBpZiB0ZXN0MCBwYXNzZXMgYW5kIHRlc3QxIGZhaWxz LCBCSVRbMTU6MTRdIGlzICdiMTEKPj4+ICsgKiBpZiB0ZXN0MCBmYWlscyBhbmQgdGVzdDEgZmFp bHMsIEJJVFsxNToxNF0gaXMgJ2IxMAo+Pj4gKyAqIGlmIHRlc3QwIGZhaWxzIGFuZCB0ZXN0MSBw YXNzZXMsIEJJVFsxNToxNF0gaXMgJ2IwMQo+Pj4gKyAqCj4+PiArICogU3lub3BzeXMgU1RBUiA5 MDAxMjAyMDIzOiBXcm9uZyBtaWNyb2ZyYW1lIG51bWJlciBmb3IgaXNvY2hyb25vdXMgSU4KPj4+ ICsgKiBlbmRwb2ludHMuCj4+PiArICoKPj4+ICsgKiBSZXR1cm4gMCBpZiB0aGUgZGVwLT5mcmFt ZV9udW1iZXIgaXMgc2V0LCByZXR1cm4gMSBpZiBFTkQgVFJBTlNGRVIKPj4+ICsgKiBjb21tYW5k IGlzIGV4ZWN1dGVkLCBhbmQgcmV0dXJuIG5lZ2F0aXZlIGVycm5vLgo+Pj4gKyAqLwo+Pj4gK3N0 YXRpYyBpbnQgc2V0X2lzb2Nfc3RhcnRfZnJhbWUoc3RydWN0IGR3YzMgKmR3Yywgc3RydWN0IGR3 YzNfZXAgKmRlcCwKPj4+ICsJCQkJdTMyIGN1cl91ZikKPj4+ICt7Cj4+PiArCXN0cnVjdCBkd2Mz X3JlcXVlc3QgKnJlcTsKPj4+ICsJaW50IHJldCA9IDA7Cj4+PiArCWludCB0ZXN0MCwgdGVzdDE7 Cj4+IAo+PiBvbmUgZGVjbGFyYXRpb24gcGVyIGxpbmUuIEFsc28sIHRhYmlmeSB0aGVzZQo+PiAK Pj4+ICsKPj4+ICsJLyogU3RvcmUgdGhlIDE0LWJpdCBmcmFtZSBudW1iZXIgb24gdGhlIGZpcnN0 IHRlc3QgKi8KPj4+ICsJaWYgKCFkZXAtPmZyYW1lX251bWJlcl8xNV8xNCkKPj4+ICsJCWRlcC0+ ZnJhbWVfbnVtYmVyID0gY3VyX3VmICYgfihCSVQoMTQpIHwgQklUKDE1KSk7Cj4+PiArCj4+PiAr CXdoaWxlIChkZXAtPmZyYW1lX251bWJlcl8xNV8xNCA8IDIpIHsKPj4gCj4+IHdoeSAyPyBXaHkg YSBtYWdpYyBjb25zdGFudD8KPj4gCj4+PiArCQl1MzIgY21kOwo+Pj4gKwkJdTMyIGZyYW1lX251 bWJlcjsKPj4+ICsJCXN0cnVjdCBkd2MzX2dhZGdldF9lcF9jbWRfcGFyYW1zIHBhcmFtczsKPj4+ ICsJCXN0cnVjdCBkd2MzX2V2ZW50X2RlcGV2dCBldmVudDsKPj4gCj4+IHJldmVyc2UgeG1hcyB0 cmVlISEKPj4gCj4+PiArCQlldmVudC5lbmRwb2ludF9udW1iZXIgPSBkZXAtPm51bWJlcjsKPj4+ ICsJCWV2ZW50LmVuZHBvaW50X2V2ZW50ID0gRFdDM19ERVBFVlRfRVBDTURDTVBMVDsKPj4gCj4+ IHdhaXQsIHlvdSdyZSBmYWtpbmcgYW4gZXZlbnQ/IT8gU29ycnksIGJ1dCBuby4gUmVmYWN0b3IK Pj4gX19kd2MzX2NsZWFudXBfZG9uZV90cmJzKCkuCj4+IAo+Pj4gKwkJcmVxID0gbmV4dF9yZXF1 ZXN0KCZkZXAtPnBlbmRpbmdfbGlzdCk7Cj4+PiArCQlpZiAoIXJlcSkgewo+Pj4gKwkJCWRldl9p bmZvKGR3Yy0+ZGV2LCAiJXM6IHJhbiBvdXQgb2YgcmVxdWVzdHNcbiIsCj4+PiArCQkJCSBkZXAt Pm5hbWUpOwo+PiAKPj4gdW5uZWNlc3NhcnkgZGV2X2luZm8oKQo+PiAKPj4+ICsJCQlkZXAtPmZs YWdzIHw9IERXQzNfRVBfUEVORElOR19SRVFVRVNUOwo+Pj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJZnJhbWVfbnVtYmVyID0gZGVwLT5mcmFtZV9udW1iZXI7Cj4+ PiArCQlmcmFtZV9udW1iZXIgfD0gZGVwLT5mcmFtZV9udW1iZXJfMTVfMTQgPDwgMTQ7Cj4+PiAr CQlmcmFtZV9udW1iZXIgKz0gbWF4X3QodTMyLCAxNiwgZGVwLT5pbnRlcnZhbCk7Cj4+PiArCj4+ PiArCQlkd2MzX3ByZXBhcmVfb25lX3RyYihkZXAsIHJlcSwgZmFsc2UsIDApOwo+Pj4gKwo+Pj4g KwkJcGFyYW1zLnBhcmFtMCA9IHVwcGVyXzMyX2JpdHMocmVxLT50cmJfZG1hKTsKPj4+ICsJCXBh cmFtcy5wYXJhbTEgPSBsb3dlcl8zMl9iaXRzKHJlcS0+dHJiX2RtYSk7Cj4+PiArCj4+PiArCQlj bWQgPSBEV0MzX0RFUENNRF9TVEFSVFRSQU5TRkVSOwo+Pj4gKwkJY21kIHw9IERXQzNfREVQQ01E X1BBUkFNKGZyYW1lX251bWJlcik7Cj4+PiArCQlyZXQgPSBkd2MzX3NlbmRfZ2FkZ2V0X2VwX2Nt ZChkZXAsIGNtZCwgJnBhcmFtcyk7Cj4+PiArCj4+PiArCQlpZiAoZGVwLT5mcmFtZV9udW1iZXJf MTVfMTQgPT0gMCkKPj4+ICsJCQlkZXAtPnRlc3QwX3N0YXR1cyA9IHJldDsKPj4+ICsKPj4+ICsJ CWlmICghcmV0KSB7Cj4+PiArCQkJZGVwLT5yZXNvdXJjZV9pbmRleCA9Cj4+PiArCQkJCWR3YzNf Z2FkZ2V0X2VwX2dldF90cmFuc2Zlcl9pbmRleChkZXApOwo+Pj4gKwkJCWR3YzNfc3RvcF9hY3Rp dmVfdHJhbnNmZXIoZGVwLT5kd2MsIGRlcC0+bnVtYmVyLCB0cnVlKTsKPj4+ICsJCX0KPj4+ICsK Pj4+ICsJCV9fZHdjM19jbGVhbnVwX2RvbmVfdHJicyhkZXAtPmR3YywgZGVwLCByZXEsIHJlcS0+ dHJiLAo+Pj4gKwkJCQkJICZldmVudCwgMCwgZmFsc2UpOwo+Pj4gKwkJcmVxLT50cmItPmN0cmwg Jj0gfkRXQzNfVFJCX0NUUkxfSFdPOwo+Pj4gKwkJZHdjM19nYWRnZXRfZ2l2ZWJhY2soZGVwLCBy ZXEsIDApOwo+Pj4gKwo+Pj4gKwkJZGVwLT5mcmFtZV9udW1iZXJfMTVfMTQrKzsKPj4+ICsKPj4+ ICsJCS8qCj4+PiArCQkgKiBSZXR1cm4gZWFybHkgYW5kIHdhaXQgZm9yIHRoZSBuZXh0IFhmZXJO b3RSZWFkeSBldmVudCB0byBjb21lCj4+PiArCQkgKiBiZWZvcmUgc2VuZGluZyB0aGUgbmV4dCBT VEFSVCBUUkFOU0ZFUiBjb21tYW5kLgo+Pj4gKwkJICovCj4+PiArCQlpZiAoIXJldCkKPj4+ICsJ CQlyZXR1cm4gMTsKPj4gCj4+IHdoeSAxPwo+PiAKPj4+ICsKPj4+ICsJCS8qIEVuZCB0ZXN0IGlm IG5vdCBidXMtZXhwaXJ5IHN0YXR1cyAqLwo+Pj4gKwkJaWYgKHJldCAhPSAtRUFHQUlOKSB7Cj4+ PiArCQkJZGVwLT50ZXN0MF9zdGF0dXMgPSAtRUlOVkFMOwo+Pj4gKwkJCWRlcC0+ZnJhbWVfbnVt YmVyXzE1XzE0ID0gMDsKPj4+ICsJCQlyZXR1cm4gcmV0Owo+PiAKPj4gdGhpcyBmdW5jdGlvbiBp cyBxdWl0ZSBhIG1lc3MuIEl0IGhhcyBzZXZlcmFsIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMuIEl0 Cj4+IHNlZW1zIGxpa2UgIjEiIG1lYW5zICJicmVhayBvdXQgYW5kIHN0b3AiLCAwIG1lYW5zICJn byBhaGVhZCBhbmQga2ljawo+PiB0cmFuc2ZlcnMiIGFuZCAtZXJybm8gbWVhbnMgImFsc28gYnJl YWsgb3V0IGFuZCBzdG9wIi4gV2hhdCBnaXZlcz8gV2h5Cj4+IHRoZSBtZXNzZWQgdXAgcmV0dXJu cyBsaWtlIHRoYXQ/Cj4+IAo+Pj4gKwkJfQo+Pj4gKwl9Cj4+PiArCj4+PiArCS8qIHRlc3QwIGFu ZCB0ZXN0MSBhcmUgYm90aCBjb21wbGV0ZWQgYXQgdGhpcyBwb2ludCAqLwo+Pj4gKwl0ZXN0MCA9 IChkZXAtPnRlc3QwX3N0YXR1cyA9PSAwKTsKPj4+ICsJdGVzdDEgPSAocmV0ID09IDApOwo+Pj4g Kwo+Pj4gKwlpZiAoIXRlc3QwICYmIHRlc3QxKQo+Pj4gKwkJZGVwLT5mcmFtZV9udW1iZXJfMTVf MTQgPSAxOwo+Pj4gKwllbHNlIGlmICghdGVzdDAgJiYgIXRlc3QxKQo+Pj4gKwkJZGVwLT5mcmFt ZV9udW1iZXJfMTVfMTQgPSAyOwo+Pj4gKwllbHNlIGlmICh0ZXN0MCAmJiAhdGVzdDEpCj4+PiAr CQlkZXAtPmZyYW1lX251bWJlcl8xNV8xNCA9IDM7Cj4+PiArCWVsc2UgaWYgKHRlc3QwICYmIHRl c3QxKQo+Pj4gKwkJZGVwLT5mcmFtZV9udW1iZXJfMTVfMTQgPSAwOwo+Pj4gKwo+Pj4gKwlkZXAt PmZyYW1lX251bWJlciB8PSBkZXAtPmZyYW1lX251bWJlcl8xNV8xNCA8PCAxNDsKPj4+ICsJZGVw LT5mcmFtZV9udW1iZXIgKz0gbWF4X3QodTMyLCAxNiwgZGVwLT5pbnRlcnZhbCk7Cj4+PiArCj4+ PiArCS8qIFJlaW5pdGlhbGl6ZSB0ZXN0IHZhcmlhYmxlcyAqLwo+Pj4gKwlkZXAtPnRlc3QwX3N0 YXR1cyA9IC1FSU5WQUw7Cj4+PiArCWRlcC0+ZnJhbWVfbnVtYmVyXzE1XzE0ID0gMDsKPj4+ICsK Pj4+ICsJcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gICBzdGF0aWMgaW50IF9fZHdjM19nYWRn ZXRfZ2V0X2ZyYW1lKHN0cnVjdCBkd2MzICpkd2MpCj4+PiAgIHsKPj4+ICAgCXUzMgkJCXJlZzsK Pj4+IEBAIC0xMjUyLDYgKzE0MDcsOCBAQCBzdGF0aWMgaW50IF9fZHdjM19nYWRnZXRfZ2V0X2Zy YW1lKHN0cnVjdCBkd2MzICpkd2MpCj4+PiAgIHN0YXRpYyB2b2lkIF9fZHdjM19nYWRnZXRfc3Rh cnRfaXNvYyhzdHJ1Y3QgZHdjMyAqZHdjLAo+Pj4gICAJCXN0cnVjdCBkd2MzX2VwICpkZXAsIHUz MiBjdXJfdWYpCj4+PiAgIHsKPj4+ICsJYm9vbCBuZWVkX2lzb2Nfc3RhcnRfdHJhbnNmZXJfd29y a2Fyb3VuZCA9IGZhbHNlOwo+PiAKPj4gZG9lc24ndCBzZWVtIGxpa2UgeW91IG5lZWQgdGhpcyBh dCBhbGwuLi4KPj4gCj4+PiArCj4+PiAgIAlpZiAobGlzdF9lbXB0eSgmZGVwLT5wZW5kaW5nX2xp c3QpKSB7Cj4+PiAgIAkJZGV2X2luZm8oZHdjLT5kZXYsICIlczogcmFuIG91dCBvZiByZXF1ZXN0 c1xuIiwKPj4+ICAgCQkJCWRlcC0+bmFtZSk7Cj4+PiBAQCAtMTI1OSwxMSArMTQxNiwzMSBAQCBz dGF0aWMgdm9pZCBfX2R3YzNfZ2FkZ2V0X3N0YXJ0X2lzb2Moc3RydWN0IGR3YzMgKmR3YywKPj4+ ICAgCQlyZXR1cm47Cj4+PiAgIAl9Cj4+PiAgIAo+Pj4gLQkvKgo+Pj4gLQkgKiBTY2hlZHVsZSB0 aGUgZmlyc3QgdHJiIGZvciBvbmUgaW50ZXJ2YWwgaW4gdGhlIGZ1dHVyZSBvciBhdAo+Pj4gLQkg KiBsZWFzdCA0IG1pY3JvZnJhbWVzLgo+Pj4gLQkgKi8KPj4+IC0JZGVwLT5mcmFtZV9udW1iZXIg PSBjdXJfdWYgKyBtYXhfdCh1MzIsIDQsIGRlcC0+aW50ZXJ2YWwpOwo+Pj4gKwlpZiAoZHdjM19p c191c2IzMShkd2MpICYmIGR3Yy0+cmV2aXNpb24gPD0gRFdDM19VU0IzMV9SRVZJU0lPTl8xNzBB KSB7Cj4+PiArCQluZWVkX2lzb2Nfc3RhcnRfdHJhbnNmZXJfd29ya2Fyb3VuZCA9IHRydWU7Cj4+ PiArCj4+PiArCQkvKiBmb3IgMS43MGEgb25seSBlYTAxIHRvIGVhMDYgYXJlIGFmZmVjdGVkICov Cj4+PiArCQlpZiAoZHdjLT5yZXZpc2lvbiA9PSBEV0MzX1VTQjMxX1JFVklTSU9OXzE3MEEgJiYK Pj4+ICsJCSAgICAhKGR3Yy0+dmVyX3R5cGUgPj0gRFdDMzFfVkVSU0lPTlRZUEVfRUEwMSAmJgo+ Pj4gKwkJICAgICAgZHdjLT52ZXJfdHlwZSA8PSBEV0MzMV9WRVJTSU9OVFlQRV9FQTA2KSkKPj4+ ICsJCQluZWVkX2lzb2Nfc3RhcnRfdHJhbnNmZXJfd29ya2Fyb3VuZCA9IGZhbHNlOwo+Pj4gKwl9 Cj4+PiArCj4+PiArCWlmICghZHdjLT5kaXNfc3RhcnRfdHJhbnNmZXJfcXVpcmsgJiYKPj4+ICsJ ICAgIG5lZWRfaXNvY19zdGFydF90cmFuc2Zlcl93b3JrYXJvdW5kICYmCj4+PiArCSAgICBkZXAt PmRpcmVjdGlvbiAmJgo+Pj4gKwkgICAgKGR3Yy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9I SUdIIHx8Cj4+PiArCSAgICAgZHdjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpKSB7 Cj4+IAo+PiAuLi4gYmVjYXVzZSBhbGwgdGhlc2UgdGVzdHMgY291bGQgYmUgY29tYmluZWQgaW4g YSBzaW1wbGUgcGxhY2UgYW5kCj4+IG1vdmVkIGluc2lkZSBkd2MzX3NldF9pc29jX3N0YXJ0X2Zy YW1lKCkgc28gdGhhdCB5b3UgY291bGQKPj4gdW5jb25kaXRpb25hbGx5IGNhbGwgaXQgaGVyZS4K Pj4gCj4+IEknbGwgZ28gYWhlYWQgYW5kIGRyb3AgdGhpcyBzZXJpZXMgZnJvbSB0aGlzIG1lcmdl IHdpbmRvdywgaXQgY2xlYXJseQo+PiBuZWVkcyBtdWNoIG1vcmUgd29yay4KPj4gCj4KPiBUaGFu ayB5b3UgZm9yIHJldmlld2luZyB0aGUgcGF0Y2hlcy4gSSdsbCBtYWtlIHRoZSBjaGFuZ2UgdG8g dGhpcyBwYXRjaCAKPiBmb3IgdGhlIG5leHQgbWVyZ2Ugd2luZG93LiBIb3dldmVyLCBjYW4geW91 IGNoZXJyeS1waWNrIHRoZSBvdGhlciAKPiBwYXRjaGVzIGluIHRoaXMgc2VyaWVzIGZvciB0aGlz IG1lcmdlIHdpbmRvdz8gSWYgdGhleSBhbHNvIG5lZWQgbW9yZSAKPiB3b3JrLCBwbGVhc2UgbGV0 IG1lIGtub3cuCgpJIGRvbid0IHRoaW5rIGl0IG1ha2VzIHNlbnNlIHRvIHBpY2sgdGhlIG90aGVy cyB3aXRob3V0IHRoaXMsIHNwZWNpYWxseQpzaW5jZSB5b3UncmUgdG91Y2hpbmcgdXNiIGNvcmUg b24gcGF0Y2ggMiBhbmQgSSBjYW4ndCBhcHBseSB0aGF0LiBJIGRpZCwKaG93ZXZlciwgdGFrZSBN YXNzIFN0b3JhZ2UgcGF0Y2ggc2V0dGluZyBpdHMgbWF4IHNwZWVkIHRvIFNTUC4K