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: <87bmfs8itp.fsf@linux.intel.com> Date: Tue, 13 Mar 2018 10:45:38 +0200 To: Thinh Nguyen Thinh Nguyen , linux-usb@vger.kernel.org Cc: John Youn List-ID: SGksCgpUaGluaCBOZ3V5ZW4gPFRoaW5oLk5ndXllbkBzeW5vcHN5cy5jb20+IHdyaXRlczoKPiBJ biBEV0NfdXNiMzEgdmVyc2lvbiAxLjcwYS1lYTA2IGFuZCBwcmlvciwgZm9yIGhpZ2hzcGVlZCBh bmQgZnVsbHNwZWVkCj4gaXNvY2hyb25vdXMgSU4sIEJJVFsxNToxNF0gb2YgdGhlIDE2LWJpdCBt aWNyb2ZyYW1lIG51bWJlciByZXBvcnRlZCBieQo+IHRoZSBYZmVyTm90UmVhZHkgZXZlbnQgYXJl IGludmFsaWQuIFRoZSBkcml2ZXIgdXNlcyB0aGlzIG51bWJlciB0bwo+IHNjaGVkdWxlIHRoZSBp c29jaHJvbm91cyB0cmFuc2ZlciBhbmQgcGFzc2VzIGl0IHRvIHRoZSBTVEFSVCBUUkFOU0ZFUgo+ IGNvbW1hbmQuIEJlY2F1c2UgdGhpcyBudW1iZXIgaXMgaW52YWxpZCwgdGhlIGNvbW1hbmQgbWF5 IGZhaWwuIElmCj4gQklUWzE1OjE0XSBtYXRjaGVzIHRoZSBpbnRlcm5hbCAxNi1iaXQgbWljcm9m cmFtZSwgdGhlIFNUQVJUIFRSQU5TRkVSCj4gY29tbWFuZCB3aWxsIHBhc3MgYW5kIHRoZSB0cmFu c2ZlciB3aWxsIHN0YXJ0IGF0IHRoZSBzY2hlZHVsZWQgdGltZSwgaWYKPiBpdCBpcyBvZmYgYnkg MSwgdGhlIGNvbW1hbmQgd2lsbCBzdGlsbCBwYXNzLCBidXQgdGhlIHRyYW5zZmVyIHdpbGwgc3Rh cnQKPiAyIHNlY29uZHMgaW4gdGhlIGZ1dHVyZS4gQWxsIG90aGVyIGNvbmRpdGlvbnMgdGhlIFNU QVJUIFRSQU5TRkVSIGNvbW1hbmQKPiB3aWxsIGZhaWwgd2l0aCBidXMtZXhwaXJ5Lgo+Cj4gSW4g b3JkZXIgdG8gd29ya2Fyb3VuZCB0aGlzIGlzc3VlLCB3ZSBjYW4gaXNzdWUgbXVsdGlwbGUgU1RB UlQgVFJBTlNGRVIKPiBjb21tYW5kcyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgb2YgQklUWzE1OjE0 XTogJ2IwMCwgJ2IwMSwgJ2IxMCwgYW5kICdiMTEKPiBhbmQgZG8gYW4gRU5EIFRSQU5TRkVSIGNv bW1hbmQuIEVhY2ggY29tYmluYXRpb24gaXMgMiBzZWNvbmRzIGFwYXJ0LiA0Cj4gc2Vjb25kcyBp bnRvIHRoZSBmdXR1cmUgd2lsbCBjYXVzZSBhIGJ1cy1leHBpcnkgZmFpbHVyZS4gQXMgdGhlIHJl c3VsdCwKPiB3aXRoaW4gdGhlIDQgcG9zc2libGUgY29tYmluYXRpb25zIGZvciBCSVRbMTU6MTRd LCB0aGVyZSB3aWxsIGJlIDIKPiBzdWNjZXNzZnVsIGFuZCAyIGZhaWx1cmUgU1RBUlQgQ09NTUFO RCBzdGF0dXMuIE9uZSBvZiB0aGUgMiBzdWNjZXNzZnVsCj4gY29tbWFuZCBzdGF0dXMgd2lsbCBy ZXN1bHQgaW4gYSAyLXNlY29uZCBkZWxheS4gVGhlIHNtYWxsZXIgQklUWzE1OjE0XQo+IHZhbHVl IGlzIHRoZSBjb3JyZWN0IG9uZS4KPgo+IFNpbmNlIHRoZXJlIGFyZSBvbmx5IDQgb3V0Y29tZXMg YW5kIHRoZSByZXN1bHRzIGFyZSBvcmRlcmVkLCB3ZSBjYW4KPiBzaW1wbHkgdGVzdCAyIFNUQVJU IFRSQU5TRkVSIGNvbW1hbmRzIHdpdGggQklUWzE1OjE0XSBjb21iaW5hdGlvbnMgJ2IwMAo+IGFu ZCAnYjAxIHRvIGRlZHVjZSB0aGUgc21hbGxlc3Qgc3VjY2Vzc2Z1bCBjb21iaW5hdGlvbi4KPgo+ ICAgICAgICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKwo+ICAgICAgICAgICAgIHwgQklUKDE1 KSB8IEJJVCgxNCkgfAo+ICAgICAgICAgICAgICs9PT09PT09PT0rPT09PT09PT09Kwo+ICAgICAg dGVzdDAgIHwgICAwICAgICB8ICAgIDAgICAgfAo+ICAgICAgICAgICAgICstLS0tLS0tLS0rLS0t LS0tLS0tKwo+ICAgICAgdGVzdDEgIHwgICAwICAgICB8ICAgIDEgICAgfAo+ICAgICAgICAgICAg ICstLS0tLS0tLS0rLS0tLS0tLS0tKwo+Cj4gV2l0aCB0ZXN0MCBhbmQgdGVzdDEgQklUWzE1OjE0 XSBjb21iaW5hdGlvbnMsIGhlcmUgaXMgdGhlIGxvZ2ljOgo+IGlmIHRlc3QwIHBhc3NlcyBhbmQg dGVzdDEgcGFzc2VzLCBCSVRbMTU6MTRdIGlzICdiMDAKPiBpZiB0ZXN0MCBwYXNzZXMgYW5kIHRl c3QxIGZhaWxzLCBCSVRbMTU6MTRdIGlzICdiMTEKPiBpZiB0ZXN0MCBmYWlscyBhbmQgdGVzdDEg ZmFpbHMsIEJJVFsxNToxNF0gaXMgJ2IxMAo+IGlmIHRlc3QwIGZhaWxzIGFuZCB0ZXN0MSBwYXNz ZXMsIEJJVFsxNToxNF0gaXMgJ2IwMQo+Cj4gU3lub3BzeXMgU1RBUiA5MDAxMjAyMDIzOiBXcm9u ZyBtaWNyb2ZyYW1lIG51bWJlciBmb3IgaXNvY2hyb25vdXMgSU4KPiBlbmRwb2ludHMuCj4KPiBT aWduZWQtb2ZmLWJ5OiBUaGluaCBOZ3V5ZW4gPHRoaW5obkBzeW5vcHN5cy5jb20+Cj4gLS0tCj4g IGRyaXZlcnMvdXNiL2R3YzMvY29yZS5jICAgfCAgIDIgKwo+ICBkcml2ZXJzL3VzYi9kd2MzL2Nv cmUuaCAgIHwgIDEzICsrKysKPiAgZHJpdmVycy91c2IvZHdjMy9nYWRnZXQuYyB8IDE4OSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCj4gIDMgZmlsZXMgY2hh bmdlZCwgMTk5IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy91c2IvZHdjMy9jb3JlLmMgYi9kcml2ZXJzL3VzYi9kd2MzL2NvcmUuYwo+IGluZGV4 IGRkY2ZhMmE2MGQ0Yi4uZDI3ZGRmY2MzYjhhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2R3 YzMvY29yZS5jCj4gKysrIGIvZHJpdmVycy91c2IvZHdjMy9jb3JlLmMKPiBAQCAtMTA3Myw2ICsx MDczLDggQEAgc3RhdGljIHZvaWQgZHdjM19nZXRfcHJvcGVydGllcyhzdHJ1Y3QgZHdjMyAqZHdj KQo+ICAJCQkJInNucHMsaXMtdXRtaS1sMS1zdXNwZW5kIik7Cj4gIAlkZXZpY2VfcHJvcGVydHlf cmVhZF91OChkZXYsICJzbnBzLGhpcmQtdGhyZXNob2xkIiwKPiAgCQkJCSZoaXJkX3RocmVzaG9s ZCk7Cj4gKwlkd2MtPmRpc19zdGFydF90cmFuc2Zlcl9xdWlyayA9IGRldmljZV9wcm9wZXJ0eV9y ZWFkX2Jvb2woZGV2LAo+ICsJCQkJInNucHMsZGlzLXN0YXJ0LXRyYW5zZmVyLXF1aXJrIik7Cj4g IAlkd2MtPnVzYjNfbHBtX2NhcGFibGUgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF9ib29sKGRldiwK PiAgCQkJCSJzbnBzLHVzYjNfbHBtX2NhcGFibGUiKTsKPiAgCWRldmljZV9wcm9wZXJ0eV9yZWFk X3U4KGRldiwgInNucHMscngtdGhyLW51bS1wa3QtcHJkIiwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvZHdjMy9jb3JlLmggYi9kcml2ZXJzL3VzYi9kd2MzL2NvcmUuaAo+IGluZGV4IDcxY2Y1 M2EwNmU0OS4uYzA5Y2QwYzYzNTRlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2R3YzMvY29y ZS5oCj4gKysrIGIvZHJpdmVycy91c2IvZHdjMy9jb3JlLmgKPiBAQCAtNTU1LDYgKzU1NSwxMCBA QCBzdHJ1Y3QgZHdjM19ldmVudF9idWZmZXIgewo+ICAgKiBAbmFtZTogYSBodW1hbiByZWFkYWJs ZSBuYW1lIGUuZy4gZXAxb3V0LWJ1bGsKPiAgICogQGRpcmVjdGlvbjogdHJ1ZSBmb3IgVFgsIGZh bHNlIGZvciBSWAo+ICAgKiBAc3RyZWFtX2NhcGFibGU6IHRydWUgd2hlbiBzdHJlYW1zIGFyZSBl bmFibGVkCj4gKyAqIEBmcmFtZV9udW1iZXJfMTVfMTQ6IEJJVFsxNToxNF0gb2YgdGhlIGZyYW1l IG51bWJlciB0byB0ZXN0IGlzb2Nocm9ub3VzCj4gKyAqCQlTVEFSVCBUUkFOU0ZFUiBjb21tYW5k IGZhaWx1cmUgd29ya2Fyb3VuZAo+ICsgKiBAdGVzdDBfc3RhdHVzOiB0aGUgcmVzdWx0IG9mIHRl c3RpbmcgU1RBUlQgVFJBTlNGRVIgY29tbWFuZCB3aXRoCj4gKyAqCQlmcmFtZV9udW1iZXJfMTVf MTQgPSAnYjAwIChub24temVybyBtZWFucyBmYWlsdXJlKQo+ICAgKi8KPiAgc3RydWN0IGR3YzNf ZXAgewo+ICAJc3RydWN0IHVzYl9lcAkJZW5kcG9pbnQ7Cj4gQEAgLTYwOCw2ICs2MTIsMTAgQEAg c3RydWN0IGR3YzNfZXAgewo+ICAKPiAgCXVuc2lnbmVkCQlkaXJlY3Rpb246MTsKPiAgCXVuc2ln bmVkCQlzdHJlYW1fY2FwYWJsZToxOwo+ICsKPiArCS8qIElzb2Nocm9ub3VzIFNUQVJUIFRSQU5T RkVSIHdvcmthcm91bmQgZm9yIFNUQVIgOTAwMTIwMjAyMyAqLwo+ICsJdTgJCQlmcmFtZV9udW1i ZXJfMTVfMTQ7Cj4gKwlpbnQJCQl0ZXN0MF9zdGF0dXM7Cj4gIH07Cj4gIAo+ICBlbnVtIGR3YzNf cGh5IHsKPiBAQCAtODYyLDYgKzg3MCw4IEBAIHN0cnVjdCBkd2MzX3NjcmF0Y2hwYWRfYXJyYXkg ewo+ICAgKiBAcHVsbHVwc19jb25uZWN0ZWQ6IHRydWUgd2hlbiBSdW4vU3RvcCBiaXQgaXMgc2V0 Cj4gICAqIEBzZXR1cF9wYWNrZXRfcGVuZGluZzogdHJ1ZSB3aGVuIHRoZXJlJ3MgYSBTZXR1cCBQ YWNrZXQgaW4gRklGTy4gV29ya2Fyb3VuZAo+ICAgKiBAdGhyZWVfc3RhZ2Vfc2V0dXA6IHNldCBp ZiB3ZSBwZXJmb3JtIGEgdGhyZWUgcGhhc2Ugc2V0dXAKPiArICogQGRpc19zdGFydF90cmFuc2Zl cl9xdWlyazogc2V0IGlmIHN0YXJ0X3RyYW5zZmVyIGZhaWx1cmUgU1cgd29ya2Fyb3VuZCBpcwo+ ICsgKgkJCW5vdCBuZWVkZWQgZm9yIERXQ191c2IzMSB2ZXJzaW9uIDEuNzBhLWVhMDYgYW5kIGJl bG93Cj4gICAqIEB1c2IzX2xwbV9jYXBhYmxlOiBzZXQgaWYgaGFkcndhcmUgc3VwcG9ydHMgTGlu ayBQb3dlciBNYW5hZ2VtZW50Cj4gICAqIEBkaXNhYmxlX3NjcmFtYmxlX3F1aXJrOiBzZXQgaWYg d2UgZW5hYmxlIHRoZSBkaXNhYmxlIHNjcmFtYmxlIHF1aXJrCj4gICAqIEB1MmV4aXRfbGZwc19x dWlyazogc2V0IGlmIHdlIGVuYWJsZSB1MmV4aXQgbGZwcyBxdWlyawo+IEBAIC05ODIsMTAgKzk5 MiwxMiBAQCBzdHJ1Y3QgZHdjMyB7Cj4gICNkZWZpbmUgRFdDM19SRVZJU0lPTl9JU19EV0MzMQkJ MHg4MDAwMDAwMAo+ICAjZGVmaW5lIERXQzNfVVNCMzFfUkVWSVNJT05fMTEwQQkoMHgzMTMxMzAy YSB8IERXQzNfUkVWSVNJT05fSVNfRFdDMzEpCj4gICNkZWZpbmUgRFdDM19VU0IzMV9SRVZJU0lP Tl8xMjBBCSgweDMxMzIzMDJhIHwgRFdDM19SRVZJU0lPTl9JU19EV0MzMSkKPiArI2RlZmluZSBE V0MzX1VTQjMxX1JFVklTSU9OXzE3MEEJKDB4MzEzNzMwMmEgfCBEV0MzX1JFVklTSU9OX0lTX0RX QzMxKQo+ICAKPiAgCXUzMgkJCXZlcl90eXBlOwo+ICAKPiAgI2RlZmluZSBEV0MzMV9WRVJTSU9O VFlQRV9FQTAxCQkweDY1NjEzMDMxCj4gKyNkZWZpbmUgRFdDMzFfVkVSU0lPTlRZUEVfRUEwNgkJ MHg2NTYxMzAzNgo+ICAKPiAgCWVudW0gZHdjM19lcDBfbmV4dAllcDBfbmV4dF9ldmVudDsKPiAg CWVudW0gZHdjM19lcDBfc3RhdGUJZXAwc3RhdGU7Cj4gQEAgLTEwMjksNiArMTA0MSw3IEBAIHN0 cnVjdCBkd2MzIHsKPiAgCXVuc2lnbmVkCQlwdWxsdXBzX2Nvbm5lY3RlZDoxOwo+ICAJdW5zaWdu ZWQJCXNldHVwX3BhY2tldF9wZW5kaW5nOjE7Cj4gIAl1bnNpZ25lZAkJdGhyZWVfc3RhZ2Vfc2V0 dXA6MTsKPiArCXVuc2lnbmVkCQlkaXNfc3RhcnRfdHJhbnNmZXJfcXVpcms6MTsKPiAgCXVuc2ln bmVkCQl1c2IzX2xwbV9jYXBhYmxlOjE7Cj4gIAo+ICAJdW5zaWduZWQJCWRpc2FibGVfc2NyYW1i bGVfcXVpcms6MTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9nYWRnZXQuYyBiL2Ry aXZlcnMvdXNiL2R3YzMvZ2FkZ2V0LmMKPiBpbmRleCAyNGNiZDc5NDgxZTguLmY4NzNlYmI0MGVh OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9kd2MzL2dhZGdldC5jCj4gKysrIGIvZHJpdmVy cy91c2IvZHdjMy9nYWRnZXQuYwo+IEBAIC0xMjQxLDYgKzEyNDEsMTYxIEBAIHN0YXRpYyBpbnQg X19kd2MzX2dhZGdldF9raWNrX3RyYW5zZmVyKHN0cnVjdCBkd2MzX2VwICpkZXApCj4gIAlyZXR1 cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIGludCBfX2R3YzNfY2xlYW51cF9kb25lX3RyYnMoc3Ry dWN0IGR3YzMgKmR3Yywgc3RydWN0IGR3YzNfZXAgKmRlcCwKPiArCQkJCSAgICBzdHJ1Y3QgZHdj M19yZXF1ZXN0ICpyZXEsCj4gKwkJCQkgICAgc3RydWN0IGR3YzNfdHJiICp0cmIsCj4gKwkJCQkg ICAgY29uc3Qgc3RydWN0IGR3YzNfZXZlbnRfZGVwZXZ0ICpldmVudCwKPiArCQkJCSAgICBpbnQg c3RhdHVzLCBpbnQgY2hhaW4pOwo+ICsKPiArLyoqCj4gKyAqIHNldF9pc29jX3N0YXJ0X2ZyYW1l IC0gc2V0IHZhbGlkIHdyYXAtYXJvdW5kIGlzb2Mgc3RhcnQgZnJhbWUgYml0cwoKbmVlZHMgYSBk d2MzXyBwcmVmaXgKCj4gKyAqIEBkd2M6IHBvaW50ZXIgdG8gb3VyIGNvbnRleHQgc3RydWN0dXJl Cgp5b3UgZG9uJ3QgbmVlZCB0byBwYXNzIGR3YyBoZXJlLiBBIHJlZmVyZW5jZSB0byBpdCBpcyBp bnNpZGUgc3RydWN0CmR3YzNfZXAuIEFsc28sIHlvdSBuZXZlciB1c2UgZHdjIGluc2lkZSB0aGUg ZnVuY3Rpb24gYXBhcnQgZnJvbSBhbgp1bm5lY2Vzc2FyeSBkZXZfaW5mbygpCgo+ICsgKiBAZGVw OiBpc29jIGVuZHBvaW50Cj4gKyAqIEBjdXJfdWY6IFRoZSBjdXJyZW50IG1pY3JvZnJhbWUgdGFr ZW4gZnJvbSBYZmVyTm90UmVhZHkgZXZlbnQKPiArICoKPiArICogVGhpcyBmdW5jdGlvbiB0ZXN0 cyBmb3IgdGhlIGNvcnJlY3QgY29tYmluYXRpb24gb2YgQklUWzE1OjE0XSBmcm9tCj4gKyAqIHRo ZSAxNi1iaXQgbWljcm9mcmFtZSBudW1iZXIgcmVwb3J0ZWQgYnkgdGhlIFhmZXJOb3RSZWFkeSBl dmVudCBhbmQKPiArICogc2V0IGl0IHRvIGRlcC0+ZnJhbWVfbnVtYmVyLgo+ICsgKgo+ICsgKiBJ biBEV0NfdXNiMzEgdmVyc2lvbiAxLjcwYS1lYTA2IGFuZCBwcmlvciwgZm9yIGhpZ2hzcGVlZCBh bmQgZnVsbHNwZWVkCj4gKyAqIGlzb2Nocm9ub3VzIElOLCBCSVRbMTU6MTRdIG9mIHRoZSAxNi1i aXQgbWljcm9mcmFtZSBudW1iZXIgcmVwb3J0ZWQgYnkKPiArICogdGhlIFhmZXJOb3RSZWFkeSBl dmVudCBhcmUgaW52YWxpZC4gVGhlIGRyaXZlciB1c2VzIHRoaXMgbnVtYmVyIHRvCj4gKyAqIHNj aGVkdWxlIHRoZSBpc29jaHJvbm91cyB0cmFuc2ZlciBhbmQgcGFzc2VzIGl0IHRvIHRoZSBTVEFS VCBUUkFOU0ZFUgo+ICsgKiBjb21tYW5kLiBCZWNhdXNlIHRoaXMgbnVtYmVyIGlzIGludmFsaWQs IHRoZSBjb21tYW5kIG1heSBmYWlsLiBJZgo+ICsgKiBCSVRbMTU6MTRdIG1hdGNoZXMgdGhlIGlu dGVybmFsIDE2LWJpdCBtaWNyb2ZyYW1lLCB0aGUgU1RBUlQgVFJBTlNGRVIKPiArICogY29tbWFu ZCB3aWxsIHBhc3MgYW5kIHRoZSB0cmFuc2ZlciB3aWxsIHN0YXJ0IGF0IHRoZSBzY2hlZHVsZWQg dGltZSwgaWYKPiArICogaXQgaXMgb2ZmIGJ5IDEsIHRoZSBjb21tYW5kIHdpbGwgc3RpbGwgcGFz cywgYnV0IHRoZSB0cmFuc2ZlciB3aWxsIHN0YXJ0Cj4gKyAqIDIgc2Vjb25kcyBpbiB0aGUgZnV0 dXJlLiBBbGwgb3RoZXIgY29uZGl0aW9ucyB0aGUgU1RBUlQgVFJBTlNGRVIgY29tbWFuZAo+ICsg KiB3aWxsIGZhaWwgd2l0aCBidXMtZXhwaXJ5Lgo+ICsgKgo+ICsgKiBJbiBvcmRlciB0byB3b3Jr YXJvdW5kIHRoaXMgaXNzdWUsIHdlIGNhbiBpc3N1ZSBtdWx0aXBsZSBTVEFSVCBUUkFOU0ZFUgo+ ICsgKiBjb21tYW5kcyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgb2YgQklUWzE1OjE0XTogJ2IwMCwg J2IwMSwgJ2IxMCwgYW5kICdiMTEKPiArICogYW5kIGRvIGFuIEVORCBUUkFOU0ZFUiBjb21tYW5k LiBFYWNoIGNvbWJpbmF0aW9uIGlzIDIgc2Vjb25kcyBhcGFydC4gNAo+ICsgKiBzZWNvbmRzIGlu dG8gdGhlIGZ1dHVyZSB3aWxsIGNhdXNlIGEgYnVzLWV4cGlyeSBmYWlsdXJlLiBBcyB0aGUgcmVz dWx0LAo+ICsgKiB3aXRoaW4gdGhlIDQgcG9zc2libGUgY29tYmluYXRpb25zIGZvciBCSVRbMTU6 MTRdLCB0aGVyZSB3aWxsIGJlIDIKPiArICogc3VjY2Vzc2Z1bCBhbmQgMiBmYWlsdXJlIFNUQVJU IENPTU1BTkQgc3RhdHVzLiBPbmUgb2YgdGhlIDIgc3VjY2Vzc2Z1bAo+ICsgKiBjb21tYW5kIHN0 YXR1cyB3aWxsIHJlc3VsdCBpbiBhIDItc2Vjb25kIGRlbGF5LiBUaGUgc21hbGxlciBCSVRbMTU6 MTRdCj4gKyAqIHZhbHVlIGlzIHRoZSBjb3JyZWN0IG9uZS4KPiArICoKPiArICogU2luY2UgdGhl cmUgYXJlIG9ubHkgNCBvdXRjb21lcyBhbmQgdGhlIHJlc3VsdHMgYXJlIG9yZGVyZWQsIHdlIGNh bgo+ICsgKiBzaW1wbHkgdGVzdCAyIFNUQVJUIFRSQU5TRkVSIGNvbW1hbmRzIHdpdGggQklUWzE1 OjE0XSBjb21iaW5hdGlvbnMgJ2IwMAo+ICsgKiBhbmQgJ2IwMSB0byBkZWR1Y2UgdGhlIHNtYWxs ZXN0IHN1Y2Nlc3NmdWwgY29tYmluYXRpb24uCj4gKyAqCj4gKyAqICAgICAgICAgICAgICstLS0t LS0tLS0rLS0tLS0tLS0tKwo+ICsgKiAgICAgICAgICAgICB8IEJJVCgxNSkgfCBCSVQoMTQpIHwK PiArICogICAgICAgICAgICAgKz09PT09PT09PSs9PT09PT09PT0rCj4gKyAqICAgICAgdGVzdDAg IHwgICAwICAgICB8ICAgIDAgICAgfAo+ICsgKiAgICAgICAgICAgICArLS0tLS0tLS0tKy0tLS0t LS0tLSsKPiArICogICAgICB0ZXN0MSAgfCAgIDAgICAgIHwgICAgMSAgICB8Cj4gKyAqICAgICAg ICAgICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKwo+ICsgKgo+ICsgKiBXaXRoIHRlc3QwIGFuZCB0 ZXN0MSBCSVRbMTU6MTRdIGNvbWJpbmF0aW9ucywgaGVyZSBpcyB0aGUgbG9naWM6Cj4gKyAqIGlm IHRlc3QwIHBhc3NlcyBhbmQgdGVzdDEgcGFzc2VzLCBCSVRbMTU6MTRdIGlzICdiMDAKPiArICog aWYgdGVzdDAgcGFzc2VzIGFuZCB0ZXN0MSBmYWlscywgQklUWzE1OjE0XSBpcyAnYjExCj4gKyAq IGlmIHRlc3QwIGZhaWxzIGFuZCB0ZXN0MSBmYWlscywgQklUWzE1OjE0XSBpcyAnYjEwCj4gKyAq IGlmIHRlc3QwIGZhaWxzIGFuZCB0ZXN0MSBwYXNzZXMsIEJJVFsxNToxNF0gaXMgJ2IwMQo+ICsg Kgo+ICsgKiBTeW5vcHN5cyBTVEFSIDkwMDEyMDIwMjM6IFdyb25nIG1pY3JvZnJhbWUgbnVtYmVy IGZvciBpc29jaHJvbm91cyBJTgo+ICsgKiBlbmRwb2ludHMuCj4gKyAqCj4gKyAqIFJldHVybiAw IGlmIHRoZSBkZXAtPmZyYW1lX251bWJlciBpcyBzZXQsIHJldHVybiAxIGlmIEVORCBUUkFOU0ZF Ugo+ICsgKiBjb21tYW5kIGlzIGV4ZWN1dGVkLCBhbmQgcmV0dXJuIG5lZ2F0aXZlIGVycm5vLgo+ ICsgKi8KPiArc3RhdGljIGludCBzZXRfaXNvY19zdGFydF9mcmFtZShzdHJ1Y3QgZHdjMyAqZHdj LCBzdHJ1Y3QgZHdjM19lcCAqZGVwLAo+ICsJCQkJdTMyIGN1cl91ZikKPiArewo+ICsJc3RydWN0 IGR3YzNfcmVxdWVzdCAqcmVxOwo+ICsJaW50IHJldCA9IDA7Cj4gKwlpbnQgdGVzdDAsIHRlc3Qx OwoKb25lIGRlY2xhcmF0aW9uIHBlciBsaW5lLiBBbHNvLCB0YWJpZnkgdGhlc2UKCj4gKwo+ICsJ LyogU3RvcmUgdGhlIDE0LWJpdCBmcmFtZSBudW1iZXIgb24gdGhlIGZpcnN0IHRlc3QgKi8KPiAr CWlmICghZGVwLT5mcmFtZV9udW1iZXJfMTVfMTQpCj4gKwkJZGVwLT5mcmFtZV9udW1iZXIgPSBj dXJfdWYgJiB+KEJJVCgxNCkgfCBCSVQoMTUpKTsKPiArCj4gKwl3aGlsZSAoZGVwLT5mcmFtZV9u dW1iZXJfMTVfMTQgPCAyKSB7Cgp3aHkgMj8gV2h5IGEgbWFnaWMgY29uc3RhbnQ/Cgo+ICsJCXUz MiBjbWQ7Cj4gKwkJdTMyIGZyYW1lX251bWJlcjsKPiArCQlzdHJ1Y3QgZHdjM19nYWRnZXRfZXBf Y21kX3BhcmFtcyBwYXJhbXM7Cj4gKwkJc3RydWN0IGR3YzNfZXZlbnRfZGVwZXZ0IGV2ZW50OwoK cmV2ZXJzZSB4bWFzIHRyZWUhIQoKPiArCQlldmVudC5lbmRwb2ludF9udW1iZXIgPSBkZXAtPm51 bWJlcjsKPiArCQlldmVudC5lbmRwb2ludF9ldmVudCA9IERXQzNfREVQRVZUX0VQQ01EQ01QTFQ7 Cgp3YWl0LCB5b3UncmUgZmFraW5nIGFuIGV2ZW50PyE/IFNvcnJ5LCBidXQgbm8uIFJlZmFjdG9y Cl9fZHdjM19jbGVhbnVwX2RvbmVfdHJicygpLgoKPiArCQlyZXEgPSBuZXh0X3JlcXVlc3QoJmRl cC0+cGVuZGluZ19saXN0KTsKPiArCQlpZiAoIXJlcSkgewo+ICsJCQlkZXZfaW5mbyhkd2MtPmRl diwgIiVzOiByYW4gb3V0IG9mIHJlcXVlc3RzXG4iLAo+ICsJCQkJIGRlcC0+bmFtZSk7Cgp1bm5l Y2Vzc2FyeSBkZXZfaW5mbygpCgo+ICsJCQlkZXAtPmZsYWdzIHw9IERXQzNfRVBfUEVORElOR19S RVFVRVNUOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJCWZyYW1lX251bWJl ciA9IGRlcC0+ZnJhbWVfbnVtYmVyOwo+ICsJCWZyYW1lX251bWJlciB8PSBkZXAtPmZyYW1lX251 bWJlcl8xNV8xNCA8PCAxNDsKPiArCQlmcmFtZV9udW1iZXIgKz0gbWF4X3QodTMyLCAxNiwgZGVw LT5pbnRlcnZhbCk7Cj4gKwo+ICsJCWR3YzNfcHJlcGFyZV9vbmVfdHJiKGRlcCwgcmVxLCBmYWxz ZSwgMCk7Cj4gKwo+ICsJCXBhcmFtcy5wYXJhbTAgPSB1cHBlcl8zMl9iaXRzKHJlcS0+dHJiX2Rt YSk7Cj4gKwkJcGFyYW1zLnBhcmFtMSA9IGxvd2VyXzMyX2JpdHMocmVxLT50cmJfZG1hKTsKPiAr Cj4gKwkJY21kID0gRFdDM19ERVBDTURfU1RBUlRUUkFOU0ZFUjsKPiArCQljbWQgfD0gRFdDM19E RVBDTURfUEFSQU0oZnJhbWVfbnVtYmVyKTsKPiArCQlyZXQgPSBkd2MzX3NlbmRfZ2FkZ2V0X2Vw X2NtZChkZXAsIGNtZCwgJnBhcmFtcyk7Cj4gKwo+ICsJCWlmIChkZXAtPmZyYW1lX251bWJlcl8x NV8xNCA9PSAwKQo+ICsJCQlkZXAtPnRlc3QwX3N0YXR1cyA9IHJldDsKPiArCj4gKwkJaWYgKCFy ZXQpIHsKPiArCQkJZGVwLT5yZXNvdXJjZV9pbmRleCA9Cj4gKwkJCQlkd2MzX2dhZGdldF9lcF9n ZXRfdHJhbnNmZXJfaW5kZXgoZGVwKTsKPiArCQkJZHdjM19zdG9wX2FjdGl2ZV90cmFuc2Zlcihk ZXAtPmR3YywgZGVwLT5udW1iZXIsIHRydWUpOwo+ICsJCX0KPiArCj4gKwkJX19kd2MzX2NsZWFu dXBfZG9uZV90cmJzKGRlcC0+ZHdjLCBkZXAsIHJlcSwgcmVxLT50cmIsCj4gKwkJCQkJICZldmVu dCwgMCwgZmFsc2UpOwo+ICsJCXJlcS0+dHJiLT5jdHJsICY9IH5EV0MzX1RSQl9DVFJMX0hXTzsK PiArCQlkd2MzX2dhZGdldF9naXZlYmFjayhkZXAsIHJlcSwgMCk7Cj4gKwo+ICsJCWRlcC0+ZnJh bWVfbnVtYmVyXzE1XzE0Kys7Cj4gKwo+ICsJCS8qCj4gKwkJICogUmV0dXJuIGVhcmx5IGFuZCB3 YWl0IGZvciB0aGUgbmV4dCBYZmVyTm90UmVhZHkgZXZlbnQgdG8gY29tZQo+ICsJCSAqIGJlZm9y ZSBzZW5kaW5nIHRoZSBuZXh0IFNUQVJUIFRSQU5TRkVSIGNvbW1hbmQuCj4gKwkJICovCj4gKwkJ aWYgKCFyZXQpCj4gKwkJCXJldHVybiAxOwoKd2h5IDE/Cgo+ICsKPiArCQkvKiBFbmQgdGVzdCBp ZiBub3QgYnVzLWV4cGlyeSBzdGF0dXMgKi8KPiArCQlpZiAocmV0ICE9IC1FQUdBSU4pIHsKPiAr CQkJZGVwLT50ZXN0MF9zdGF0dXMgPSAtRUlOVkFMOwo+ICsJCQlkZXAtPmZyYW1lX251bWJlcl8x NV8xNCA9IDA7Cj4gKwkJCXJldHVybiByZXQ7Cgp0aGlzIGZ1bmN0aW9uIGlzIHF1aXRlIGEgbWVz cy4gSXQgaGFzIHNldmVyYWwgcG9zc2libGUgcmV0dXJuIHZhbHVlcy4gSXQKc2VlbXMgbGlrZSAi MSIgbWVhbnMgImJyZWFrIG91dCBhbmQgc3RvcCIsIDAgbWVhbnMgImdvIGFoZWFkIGFuZCBraWNr CnRyYW5zZmVycyIgYW5kIC1lcnJubyBtZWFucyAiYWxzbyBicmVhayBvdXQgYW5kIHN0b3AiLiBX aGF0IGdpdmVzPyBXaHkKdGhlIG1lc3NlZCB1cCByZXR1cm5zIGxpa2UgdGhhdD8KCj4gKwkJfQo+ ICsJfQo+ICsKPiArCS8qIHRlc3QwIGFuZCB0ZXN0MSBhcmUgYm90aCBjb21wbGV0ZWQgYXQgdGhp cyBwb2ludCAqLwo+ICsJdGVzdDAgPSAoZGVwLT50ZXN0MF9zdGF0dXMgPT0gMCk7Cj4gKwl0ZXN0 MSA9IChyZXQgPT0gMCk7Cj4gKwo+ICsJaWYgKCF0ZXN0MCAmJiB0ZXN0MSkKPiArCQlkZXAtPmZy YW1lX251bWJlcl8xNV8xNCA9IDE7Cj4gKwllbHNlIGlmICghdGVzdDAgJiYgIXRlc3QxKQo+ICsJ CWRlcC0+ZnJhbWVfbnVtYmVyXzE1XzE0ID0gMjsKPiArCWVsc2UgaWYgKHRlc3QwICYmICF0ZXN0 MSkKPiArCQlkZXAtPmZyYW1lX251bWJlcl8xNV8xNCA9IDM7Cj4gKwllbHNlIGlmICh0ZXN0MCAm JiB0ZXN0MSkKPiArCQlkZXAtPmZyYW1lX251bWJlcl8xNV8xNCA9IDA7Cj4gKwo+ICsJZGVwLT5m cmFtZV9udW1iZXIgfD0gZGVwLT5mcmFtZV9udW1iZXJfMTVfMTQgPDwgMTQ7Cj4gKwlkZXAtPmZy YW1lX251bWJlciArPSBtYXhfdCh1MzIsIDE2LCBkZXAtPmludGVydmFsKTsKPiArCj4gKwkvKiBS ZWluaXRpYWxpemUgdGVzdCB2YXJpYWJsZXMgKi8KPiArCWRlcC0+dGVzdDBfc3RhdHVzID0gLUVJ TlZBTDsKPiArCWRlcC0+ZnJhbWVfbnVtYmVyXzE1XzE0ID0gMDsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiAgc3RhdGljIGludCBfX2R3YzNfZ2FkZ2V0X2dldF9mcmFtZShzdHJ1Y3QgZHdj MyAqZHdjKQo+ICB7Cj4gIAl1MzIJCQlyZWc7Cj4gQEAgLTEyNTIsNiArMTQwNyw4IEBAIHN0YXRp YyBpbnQgX19kd2MzX2dhZGdldF9nZXRfZnJhbWUoc3RydWN0IGR3YzMgKmR3YykKPiAgc3RhdGlj IHZvaWQgX19kd2MzX2dhZGdldF9zdGFydF9pc29jKHN0cnVjdCBkd2MzICpkd2MsCj4gIAkJc3Ry dWN0IGR3YzNfZXAgKmRlcCwgdTMyIGN1cl91ZikKPiAgewo+ICsJYm9vbCBuZWVkX2lzb2Nfc3Rh cnRfdHJhbnNmZXJfd29ya2Fyb3VuZCA9IGZhbHNlOwoKZG9lc24ndCBzZWVtIGxpa2UgeW91IG5l ZWQgdGhpcyBhdCBhbGwuLi4KCj4gKwo+ICAJaWYgKGxpc3RfZW1wdHkoJmRlcC0+cGVuZGluZ19s aXN0KSkgewo+ICAJCWRldl9pbmZvKGR3Yy0+ZGV2LCAiJXM6IHJhbiBvdXQgb2YgcmVxdWVzdHNc biIsCj4gIAkJCQlkZXAtPm5hbWUpOwo+IEBAIC0xMjU5LDExICsxNDE2LDMxIEBAIHN0YXRpYyB2 b2lkIF9fZHdjM19nYWRnZXRfc3RhcnRfaXNvYyhzdHJ1Y3QgZHdjMyAqZHdjLAo+ICAJCXJldHVy bjsKPiAgCX0KPiAgCj4gLQkvKgo+IC0JICogU2NoZWR1bGUgdGhlIGZpcnN0IHRyYiBmb3Igb25l IGludGVydmFsIGluIHRoZSBmdXR1cmUgb3IgYXQKPiAtCSAqIGxlYXN0IDQgbWljcm9mcmFtZXMu Cj4gLQkgKi8KPiAtCWRlcC0+ZnJhbWVfbnVtYmVyID0gY3VyX3VmICsgbWF4X3QodTMyLCA0LCBk ZXAtPmludGVydmFsKTsKPiArCWlmIChkd2MzX2lzX3VzYjMxKGR3YykgJiYgZHdjLT5yZXZpc2lv biA8PSBEV0MzX1VTQjMxX1JFVklTSU9OXzE3MEEpIHsKPiArCQluZWVkX2lzb2Nfc3RhcnRfdHJh bnNmZXJfd29ya2Fyb3VuZCA9IHRydWU7Cj4gKwo+ICsJCS8qIGZvciAxLjcwYSBvbmx5IGVhMDEg dG8gZWEwNiBhcmUgYWZmZWN0ZWQgKi8KPiArCQlpZiAoZHdjLT5yZXZpc2lvbiA9PSBEV0MzX1VT QjMxX1JFVklTSU9OXzE3MEEgJiYKPiArCQkgICAgIShkd2MtPnZlcl90eXBlID49IERXQzMxX1ZF UlNJT05UWVBFX0VBMDEgJiYKPiArCQkgICAgICBkd2MtPnZlcl90eXBlIDw9IERXQzMxX1ZFUlNJ T05UWVBFX0VBMDYpKQo+ICsJCQluZWVkX2lzb2Nfc3RhcnRfdHJhbnNmZXJfd29ya2Fyb3VuZCA9 IGZhbHNlOwo+ICsJfQo+ICsKPiArCWlmICghZHdjLT5kaXNfc3RhcnRfdHJhbnNmZXJfcXVpcmsg JiYKPiArCSAgICBuZWVkX2lzb2Nfc3RhcnRfdHJhbnNmZXJfd29ya2Fyb3VuZCAmJgo+ICsJICAg IGRlcC0+ZGlyZWN0aW9uICYmCj4gKwkgICAgKGR3Yy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVF RF9ISUdIIHx8Cj4gKwkgICAgIGR3Yy0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSkg ewoKLi4uIGJlY2F1c2UgYWxsIHRoZXNlIHRlc3RzIGNvdWxkIGJlIGNvbWJpbmVkIGluIGEgc2lt cGxlIHBsYWNlIGFuZAptb3ZlZCBpbnNpZGUgZHdjM19zZXRfaXNvY19zdGFydF9mcmFtZSgpIHNv IHRoYXQgeW91IGNvdWxkCnVuY29uZGl0aW9uYWxseSBjYWxsIGl0IGhlcmUuCgpJJ2xsIGdvIGFo ZWFkIGFuZCBkcm9wIHRoaXMgc2VyaWVzIGZyb20gdGhpcyBtZXJnZSB3aW5kb3csIGl0IGNsZWFy bHkKbmVlZHMgbXVjaCBtb3JlIHdvcmsuCg==