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: [v1,2/3] usb: dwc2: Change ISOC DDMA flow From: "Zengtao \(B\)" Message-Id: <678F3D1BB717D949B966B68EAEB446ED0C881965@DGGEMM506-MBX.china.huawei.com> Date: Tue, 20 Mar 2018 02:01:19 +0000 To: Minas Harutyunyan , John Youn , Felipe Balbi , Greg Kroah-Hartman , "linux-usb@vger.kernel.org" List-ID: SGkgTWluYXM6DQoNCkEgZmV3IG1pbm9yIGNvbW1lbnRzOg0KDQo+LS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj5Gcm9tOiBsaW51eC11c2Itb3duZXJAdmdlci5rZXJuZWwub3JnDQo+W21haWx0 bzpsaW51eC11c2Itb3duZXJAdmdlci5rZXJuZWwub3JnXSBPbiBCZWhhbGYgT2YgTWluYXMgSGFy dXR5dW55YW4NCj5TZW50OiBTYXR1cmRheSwgTWFyY2ggMTcsIDIwMTggNToxMCBQTQ0KPlRvOiBK b2huIFlvdW4gPEpvaG4uWW91bkBzeW5vcHN5cy5jb20+OyBGZWxpcGUgQmFsYmkgPGJhbGJpQGtl cm5lbC5vcmc+Ow0KPkdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5v cmc+OyBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnDQo+Q2M6IE1pbmFzIEhhcnV0eXVueWFuIDxN aW5hcy5IYXJ1dHl1bnlhbkBzeW5vcHN5cy5jb20+DQo+U3ViamVjdDogW1BBVENIIHYxIDIvM10g dXNiOiBkd2MyOiBDaGFuZ2UgSVNPQyBERE1BIGZsb3cNCj4NCj5DaGFuZ2VkIGV4aXN0aW5nIHR3 byBkZXNjcmlwdG9yLWNoYWluIGZsb3cgdG8gb25lIGNoYWluLg0KPg0KPkluIHR3by1jaGFpbiBp bXBsZW1lbnRhdGlvbiBCTkEgaW50ZXJydXB0IHVzZWQgZm9yIHN3aXRjaGluZyBiZXR3ZWVuIHR3 bw0KPmNoYWlucy4gQk5BIGludGVycnVwdCBhc3NlcnRlZCBiZWNhdXNlIG9mIHJldHVybmluZyB0 byBiZWdpbm5pbmcgb2YgdGhlIGNoYWluDQo+YmFzZWQgb24gTC1iaXQgb2YgbGFzdCBkZXNjcmlw dG9yLg0KPg0KPkJlY2F1c2Ugb2YgdGhhdCB3ZSBsb3NlIHBhY2tldHMuIFRoaXMgaXNzdWUgcmVz b2x2ZWQgYnkgdXNpbmcgb25lIGRlc2MtY2hhaW4uDQo+DQo+UmVtb3ZlZCBhbGwgc3RhZmYgcmVs YXRlZCB0byB0d28gZGVzYy1jaGFpbiBmbG93IGZyb20gRERNQSBJU09DIHJlbGF0ZWQNCj5mdW5j dGlvbnMuDQo+DQo+UmVtb3ZlZCByZXF1ZXN0IGxlbmd0aCBjaGVja2luZyBmcm9tIGR3YzJfZ2Fk Z2V0X2ZpbGxfaXNvY19kZXNjKCkgZnVuY3Rpb24uDQo+UmVxdWVzdCBsZW5ndGggY2hlY2tpbmcg YWRkZWQgdG8gZHdjMl9oc290Z19lcF9xdWV1ZSgpIGZ1bmN0aW9uLiBJZiByZXF1ZXN0DQo+bGVu Z3RoIGdyZWF0ZXIgdGhhbiBkZXNjcmlwdG9yIGxpbWl0cyB0aGVuIHJlcXVlc3Qgbm90IGFkZGVk IHRvIHF1ZXVlLg0KPkFkZGl0aW9uYWwgY2hlY2tpbmcgZG9uZSBmb3IgSGlnaCBCYW5kd2lkdGgg SVNPQyBPVVQncyB3aGljaCBub3Qgc3VwcG9ydGVkIGJ5DQo+ZHJpdmVyLiBJbg0KPmR3YzJfZ2Fk Z2V0X2ZpbGxfaXNvY19kZXNjKCkgZnVuY3Rpb24gYWxzbyBjaGVja2VkIGRlc2MtY2hhaW4gc3Rh dHVzIChmdWxsIG9yIG5vdCkNCj50byBhdm9pZCBvZiByZXVzaW5nIG5vdCB5ZXQgcHJvY2Vzc2Vk IGRlc2NyaXB0b3JzLg0KPg0KPkluIGR3YzJfZ2FkZ2V0X3N0YXJ0X2lzb2NfZGRtYSgpIGZ1bmN0 aW9uIGNyZWF0aW9uIG9mIGRlc2MtY2hhaW4gYWx3YXlzDQo+c3RhcnRlZCBmcm9tIGRlc2NyaXB0 b3IgMC4gQmVmb3JlIGZpbGxpbmcgZGVzY3JpcHRvcnMsIHRoZXkgd2VyZSBpbml0aWFsaXplZCBi eQ0KPkhPU1QgQlVTWSBzdGF0dXMuDQo+DQo+SW4gZHdjMl9nYWRnZXRfY29tcGxldGVfaXNvY19y ZXF1ZXN0X2RkbWEoKSBhZGRlZCBjaGVja2luZyBmb3IgZGVzYy1jaGFpbg0KPnJvbGxvdmVyLiBB bHNvIGFkZGVkIGNoZWNraW5nIGNvbXBsZXRpb24gc3RhdHVzLg0KPlJlcXVlc3QgY29tcGxldGVk IHN1Y2Nlc3NmdWxseSBpZiBERVZfRE1BX1NUUyBpcyBERVZfRE1BX1NUU19TVUNDLA0KPm90aGVy d2lzZSBjb21wbGV0ZSB3aXRoIC1FVElNRURPVVQuDQo+DQo+QWN0dWFsbHkgcmVtb3ZlZCBkd2My X2dhZGdldF9zdGFydF9uZXh0X2lzb2NfZGRtYSgpIGZ1bmN0aW9uIGJlY2F1c2Ugbm93DQo+ZHJp dmVyIHVzZSBvbmx5IG9uZSBkZXNjLWNoYWluIGFuZCBpbnN0ZWFkIHRoYXQgZnVuY3Rpb24gYWRk ZWQNCj5kd2MyX2dhZGdldF9oYW5kbGVfaXNvY19ibmEoKSBmdW5jdGlvbiBmb3IgaGFuZGxpbmcg Qk5BIGludGVycnVwdHMuDQo+DQo+SGFuZGxpbmcgQk5BIGludGVycnVwdCBkb25lIGJ5IGZsdXNo aW5nIFR4RklGT3MgZm9yIE9VVCBFUHMsIGNvbXBsZXRpbmcNCj5yZXF1ZXN0IHdpdGggLUVJTyBh bmQgcmVzZXR0aW5nIGRlc2MtY2hhaW4gbnVtYmVyIGFuZCB0YXJnZXQgZnJhbWUgdG8gaW5pdGlh bA0KPnZhbHVlcyBmb3IgcmVzdGFydGluZyB0cmFuc2ZlcnMuDQo+DQo+T24gaGFuZGxpbmcgTkFL IHJlcXVlc3QgY29tcGxldGVkIHdpdGggLUVOT0RBVEEuIEluY3JlbWVudGVkIHRhcmdldCBmcmFt ZQ0KPnRvIGFsbG93IGZpbGwgZGVzYyBjaGFpbiBhbmQgc3RhcnQgdHJhbnNmZXJzLg0KPkluIERE TUEgbW9kZSBhdm9pZGVkIG9mIGZyYW1lIG51bWJlciBpbmNyZW1lbnRpbmcsIGJlY2F1c2UgdHJh Y2tpbmcgb2YNCj5mcmFtZSBudW1iZXIgcGVyZm9ybWVkIGluIGR3YzJfZ2FkZ2V0X2ZpbGxfaXNv Y19kZXNjKCkgZnVuY3Rpb24uDQo+DQo+V2hlbiBjb3JlIGFzc2VydCBYZmVyQ29tcGwgYWxvbmcg d2l0aCBCTkEsIHdlIHNob3VsZCBpZ25vcmUgWGZlckNvbXBsIGluDQo+ZHdjMl9oc290Z19lcGlu dCgpIGZ1bmN0aW9uLg0KPg0KPk9uIEJOQSBpbnRlcnJ1cHQgcmVwbGFjZWQgZHdjMl9nYWRnZXRf c3RhcnRfbmV4dF9pc29jX2RkbWEoKSBieSBhYm92ZQ0KPm1lbnRpb25lZCBCTkEgaGFuZGxlci4N Cj4NCj5JbiBkd2MyX2hzb3RnX2VwX2VuYWJsZSgpIGZ1bmN0aW9uIGFkZGVkIHNhbml0eSBjaGVj ayBvZiBiSW50ZXJ2YWwgZm9yIElTT0MgSU4NCj5pbiBERE1BIG1vZGUsIGJlY2F1c2UgSFcgbm90 IHN1cHBvcnRlZCBFUCdzIHdpdGggYkludGVydmFsIG1vcmUgdGhhbiAxMi4NCj4NCj5TaWduZWQt b2ZmLWJ5OiBNaW5hcyBIYXJ1dHl1bnlhbiA8aG1pbmFzQHN5bm9wc3lzLmNvbT4NCj4tLS0NCj4g ZHJpdmVycy91c2IvZHdjMi9jb3JlLmggICB8ICAgMiAtDQo+IGRyaXZlcnMvdXNiL2R3YzIvZ2Fk Z2V0LmMgfCAyMzUgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KPiAyIGZpbGVzIGNoYW5nZWQsIDExMyBpbnNlcnRpb25zKCspLCAxMjQgZGVsZXRpb25zKC0p DQo+DQo+ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzIvY29yZS5oIGIvZHJpdmVycy91c2Iv ZHdjMi9jb3JlLmggaW5kZXgNCj5kODNiZTU2NTFmODcuLjA5M2QwNzhhZGFmNCAxMDA2NDQNCj4t LS0gYS9kcml2ZXJzL3VzYi9kd2MyL2NvcmUuaA0KPisrKyBiL2RyaXZlcnMvdXNiL2R3YzIvY29y ZS5oDQo+QEAgLTE3OCw3ICsxNzgsNiBAQCBzdHJ1Y3QgZHdjMl9oc290Z19yZXE7DQo+ICAqIEBk ZXNjX2xpc3RfZG1hOiBUaGUgRE1BIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciBjaGFpbiBjdXJyZW50 bHkgaW4gdXNlLg0KPiAgKiBAZGVzY19saXN0OiBQb2ludGVyIHRvIGRlc2NyaXB0b3IgRE1BIGNo YWluIGhlYWQgY3VycmVudGx5IGluIHVzZS4NCj4gICogQGRlc2NfY291bnQ6IENvdW50IG9mIGVu dHJpZXMgd2l0aGluIHRoZSBETUEgZGVzY3JpcHRvciBjaGFpbiBvZiBFUC4NCj4tICogQGlzb2Nf Y2hhaW5fbnVtOiBOdW1iZXIgb2YgSVNPQyBjaGFpbiBjdXJyZW50bHkgaW4gdXNlIC0gZWl0aGVy IDAgb3IgMS4NCj4gICogQG5leHRfZGVzYzogaW5kZXggb2YgbmV4dCBmcmVlIGRlc2NyaXB0b3Ig aW4gdGhlIElTT0MgY2hhaW4gdW5kZXIgU1cNCj5jb250cm9sLg0KPiAgKiBAdG90YWxfZGF0YTog VGhlIHRvdGFsIG51bWJlciBvZiBkYXRhIGJ5dGVzIGRvbmUuDQo+ICAqIEBmaWZvX3NpemU6IFRo ZSBzaXplIG9mIHRoZSBGSUZPIChmb3IgcGVyaW9kaWMgSU4gZW5kcG9pbnRzKSBAQCAtMjMxLDcN Cj4rMjMwLDYgQEAgc3RydWN0IGR3YzJfaHNvdGdfZXAgew0KPiAJc3RydWN0IGR3YzJfZG1hX2Rl c2MJKmRlc2NfbGlzdDsNCj4gCXU4CQkJZGVzY19jb3VudDsNCj4NCj4tCXVuc2lnbmVkIGNoYXIJ CWlzb2NfY2hhaW5fbnVtOw0KPiAJdW5zaWduZWQgaW50CQluZXh0X2Rlc2M7DQo+DQo+IAljaGFy ICAgICAgICAgICAgICAgICAgICBuYW1lWzEwXTsNCj5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Iv ZHdjMi9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL2R3YzIvZ2FkZ2V0LmMgaW5kZXgNCj5jMjMxMzIx NjU2ZjkuLjFiOWM4NGNiNThmYiAxMDA2NDQNCj4tLS0gYS9kcml2ZXJzL3VzYi9kd2MyL2dhZGdl dC5jDQo+KysrIGIvZHJpdmVycy91c2IvZHdjMi9nYWRnZXQuYw0KPkBAIC03OTMsOSArNzkzLDcg QEAgc3RhdGljIHZvaWQNCj5kd2MyX2dhZGdldF9jb25maWdfbm9uaXNvY194ZmVyX2RkbWEoc3Ry dWN0IGR3YzJfaHNvdGdfZXAgKmhzX2VwLA0KPiAgKiBAZG1hX2J1ZmY6IHVzYiByZXF1ZXN0cyBk bWEgYnVmZmVyLg0KPiAgKiBAbGVuOiB1c2IgcmVxdWVzdCB0cmFuc2ZlciBsZW5ndGguDQo+ICAq DQo+LSAqIEZpbmRzIG91dCBpbmRleCBvZiBmaXJzdCBmcmVlIGVudHJ5IGVpdGhlciBpbiB0aGUg Ym90dG9tIG9yIHVwIGhhbGYgb2YNCj4tICogZGVzY3JpcHRvciBjaGFpbiBkZXBlbmQgb24gd2hp Y2ggaXMgdW5kZXIgU1cgY29udHJvbCBhbmQgbm90IHByb2Nlc3NlZA0KPi0gKiBieSBIVy4gVGhl biBmaWxscyB0aGF0IGRlc2NyaXB0b3Igd2l0aCB0aGUgZGF0YSBvZiB0aGUgYXJyaXZlZCB1c2Ig cmVxdWVzdCwNCj4rICogRmlsbHMgbmV4dCBmcmVlIGRlc2NyaXB0b3Igd2l0aCB0aGUgZGF0YSBv ZiB0aGUgYXJyaXZlZCB1c2IgcmVxdWVzdCwNCj4gICogZnJhbWUgaW5mbywgc2V0cyBMYXN0IGFu ZCBJT0MgYml0cyBpbmNyZW1lbnRzIG5leHRfZGVzYy4gSWYgZmlsbGVkDQo+ICAqIGRlc2NyaXB0 b3IgaXMgbm90IHRoZSBmaXJzdCBvbmUsIHJlbW92ZXMgTCBiaXQgZnJvbSB0aGUgcHJldmlvdXMg ZGVzY3JpcHRvcg0KPiAgKiBzdGF0dXMuDQo+QEAgLTgxMCwzNCArODA4LDE3IEBAIHN0YXRpYyBp bnQgZHdjMl9nYWRnZXRfZmlsbF9pc29jX2Rlc2Moc3RydWN0DQo+ZHdjMl9oc290Z19lcCAqaHNf ZXAsDQo+IAl1MzIgbWFzayA9IDA7DQo+DQo+IAltYXhzaXplID0gZHdjMl9nYWRnZXRfZ2V0X2Rl c2NfcGFyYW1zKGhzX2VwLCAmbWFzayk7DQo+LQlpZiAobGVuID4gbWF4c2l6ZSkgew0KPi0JCWRl dl9lcnIoaHNvdGctPmRldiwgIndyb25nIGxlbiAlZFxuIiwgbGVuKTsNCj4tCQlyZXR1cm4gLUVJ TlZBTDsNCj4tCX0NCj4tDQo+LQkvKg0KPi0JICogSWYgU1cgaGFzIGFscmVhZHkgZmlsbGVkIGhh bGYgb2YgY2hhaW4sIHRoZW4gcmV0dXJuIGFuZCB3YWl0IGZvcg0KPi0JICogdGhlIG90aGVyIGNo YWluIHRvIGJlIHByb2Nlc3NlZCBieSBIVy4NCj4tCSAqLw0KPi0JaWYgKGhzX2VwLT5uZXh0X2Rl c2MgPT0gTUFYX0RNQV9ERVNDX05VTV9HRU5FUklDIC8gMikNCj4tCQlyZXR1cm4gLUVCVVNZOw0K Pg0KPi0JLyogSW5jcmVtZW50IGZyYW1lIG51bWJlciBieSBpbnRlcnZhbCBmb3IgSU4gKi8NCj4t CWlmIChoc19lcC0+ZGlyX2luKQ0KPi0JCWR3YzJfZ2FkZ2V0X2luY3JfZnJhbWVfbnVtKGhzX2Vw KTsNCj4tDQo+LQlpbmRleCA9IChNQVhfRE1BX0RFU0NfTlVNX0dFTkVSSUMgLyAyKSAqIGhzX2Vw LT5pc29jX2NoYWluX251bSArDQo+LQkJIGhzX2VwLT5uZXh0X2Rlc2M7DQo+KwlpbmRleCA9IGhz X2VwLT5uZXh0X2Rlc2M7DQo+KwlkZXNjID0gJmhzX2VwLT5kZXNjX2xpc3RbaW5kZXhdOw0KPg0K Pi0JLyogU2FuaXR5IGNoZWNrIG9mIGNhbGN1bGF0ZWQgaW5kZXggKi8NCj4tCWlmICgoaHNfZXAt Pmlzb2NfY2hhaW5fbnVtICYmIGluZGV4ID4gTUFYX0RNQV9ERVNDX05VTV9HRU5FUklDKQ0KPnx8 DQo+LQkgICAgKCFoc19lcC0+aXNvY19jaGFpbl9udW0gJiYgaW5kZXggPg0KPk1BWF9ETUFfREVT Q19OVU1fR0VORVJJQyAvIDIpKSB7DQo+LQkJZGV2X2Vycihoc290Zy0+ZGV2LCAid3JvbmcgaW5k ZXggJWQgZm9yIGlzbyBjaGFpblxuIiwgaW5kZXgpOw0KPi0JCXJldHVybiAtRUlOVkFMOw0KPisJ LyogQ2hlY2sgaWYgZGVzY3JpcHRvciBjaGFpbiBmdWxsICovDQo+KwlpZiAoKGRlc2MtPnN0YXR1 cyA+PiBERVZfRE1BX0JVRkZfU1RTX1NISUZUKSA9PQ0KPisJICAgIERFVl9ETUFfQlVGRl9TVFNf SFJFQURZKSB7DQo+KwkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IGRlc2MgY2hhaW4gZnVsbFxu IiwgX19mdW5jX18pOw0KPisJCXJldHVybiAxOw0KPiAJfQ0KPg0KPi0JZGVzYyA9ICZoc19lcC0+ ZGVzY19saXN0W2luZGV4XTsNCj4tDQo+IAkvKiBDbGVhciBMIGJpdCBvZiBwcmV2aW91cyBkZXNj IGlmIG1vcmUgdGhhbiBvbmUgZW50cmllcyBpbiB0aGUgY2hhaW4gKi8NCj4gCWlmIChoc19lcC0+ bmV4dF9kZXNjKQ0KPiAJCWhzX2VwLT5kZXNjX2xpc3RbaW5kZXggLSAxXS5zdGF0dXMgJj0gfkRF Vl9ETUFfTDsgQEAgLTg2NSw4DQoNCldoZW4gY2hhbmdpbmcgdGhlIHN0YXR1cyBvZiB0aGUgZGVz YywgSG93IHRvIHN5bmMgdGhlIFNXIHdpdGggdGhlIEhXPw0KU2luY2UgdGhlIEhXIGFuZCBTVyBp cyB3b3JraW5nIG9uIHRoZSBzYW1lIGRlc2Mgc3luY2hyb25vdXNseS4NCg0KPis4NDYsMTQgQEAg c3RhdGljIGludCBkd2MyX2dhZGdldF9maWxsX2lzb2NfZGVzYyhzdHJ1Y3QgZHdjMl9oc290Z19l cA0KPipoc19lcCwNCj4gCWRlc2MtPnN0YXR1cyAmPSB+REVWX0RNQV9CVUZGX1NUU19NQVNLOw0K PiAJZGVzYy0+c3RhdHVzIHw9IChERVZfRE1BX0JVRkZfU1RTX0hSRUFEWSA8PA0KPkRFVl9ETUFf QlVGRl9TVFNfU0hJRlQpOw0KPg0KPisJLyogSW5jcmVtZW50IGZyYW1lIG51bWJlciBieSBpbnRl cnZhbCBmb3IgSU4gKi8NCj4rCWlmIChoc19lcC0+ZGlyX2luKQ0KPisJCWR3YzJfZ2FkZ2V0X2lu Y3JfZnJhbWVfbnVtKGhzX2VwKTsNCj4rDQo+IAkvKiBVcGRhdGUgaW5kZXggb2YgbGFzdCBjb25m aWd1cmVkIGVudHJ5IGluIHRoZSBjaGFpbiAqLw0KPiAJaHNfZXAtPm5leHRfZGVzYysrOw0KPisJ aWYgKGhzX2VwLT5uZXh0X2Rlc2MgPj0gTUFYX0RNQV9ERVNDX05VTV9HRU5FUklDKQ0KPisJCWhz X2VwLT5uZXh0X2Rlc2MgPSAwOw0KPg0KPiAJcmV0dXJuIDA7DQo+IH0NCj5AQCAtODc1LDExICs4 NjIsOCBAQCBzdGF0aWMgaW50IGR3YzJfZ2FkZ2V0X2ZpbGxfaXNvY19kZXNjKHN0cnVjdA0KPmR3 YzJfaHNvdGdfZXAgKmhzX2VwLA0KPiAgKiBkd2MyX2dhZGdldF9zdGFydF9pc29jX2RkbWEgLSBz dGFydCBpc29jaHJvbm91cyB0cmFuc2ZlciBpbiBERE1BDQo+ICAqIEBoc19lcDogVGhlIGlzb2No cm9ub3VzIGVuZHBvaW50Lg0KPiAgKg0KPi0gKiBQcmVwYXJlIGZpcnN0IGRlc2NyaXB0b3IgY2hh aW4gZm9yIGlzb2Nocm9ub3VzIGVuZHBvaW50cy4gQWZ0ZXJ3YXJkcw0KPisgKiBQcmVwYXJlIGRl c2NyaXB0b3IgY2hhaW4gZm9yIGlzb2Nocm9ub3VzIGVuZHBvaW50cy4gQWZ0ZXJ3YXJkcw0KPiAg KiB3cml0ZSBETUEgYWRkcmVzcyB0byBIVyBhbmQgZW5hYmxlIHRoZSBlbmRwb2ludC4NCj4tICoN Cj4tICogU3dpdGNoIGJldHdlZW4gZGVzY3JpcHRvciBjaGFpbnMgdmlhIGlzb2NfY2hhaW5fbnVt IHRvIGdpdmUgU1cgb3Bwb3J0dW5pdHkNCj4tICogdG8gcHJlcGFyZSBzZWNvbmQgZGVzY3JpcHRv ciBjaGFpbiB3aGlsZSBmaXJzdCBvbmUgaXMgYmVpbmcgcHJvY2Vzc2VkIGJ5IEhXLg0KPiAgKi8N Cj4gc3RhdGljIHZvaWQgZHdjMl9nYWRnZXRfc3RhcnRfaXNvY19kZG1hKHN0cnVjdCBkd2MyX2hz b3RnX2VwICpoc19lcCkNCj57IEBAIC04OTAsMTkgKzg3NCwyNyBAQCBzdGF0aWMgdm9pZCBkd2My X2dhZGdldF9zdGFydF9pc29jX2RkbWEoc3RydWN0DQo+ZHdjMl9oc290Z19lcCAqaHNfZXApDQo+ IAl1MzIgZG1hX3JlZzsNCj4gCXUzMiBkZXBjdGw7DQo+IAl1MzIgY3RybDsNCj4rCXN0cnVjdCBk d2MyX2RtYV9kZXNjICpkZXNjOw0KPg0KPiAJaWYgKGxpc3RfZW1wdHkoJmhzX2VwLT5xdWV1ZSkp IHsNCj4gCQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogTm8gcmVxdWVzdHMgaW4gcXVldWVcbiIs IF9fZnVuY19fKTsNCj4gCQlyZXR1cm47DQo+IAl9DQo+DQo+KwkvKiBJbml0aWFsaXplIGRlc2Ny aXB0b3IgY2hhaW4gYnkgSG9zdCBCdXN5IHN0YXR1cyAqLw0KPisJZm9yIChyZXQgPSAwOyByZXQg PCBNQVhfRE1BX0RFU0NfTlVNX0dFTkVSSUM7IHJldCsrKSB7DQo+KwkJZGVzYyA9ICZoc19lcC0+ ZGVzY19saXN0W3JldF07DQo+KwkJZGVzYy0+c3RhdHVzID0gMDsNCj4rCQlkZXNjLT5zdGF0dXMg fD0gKERFVl9ETUFfQlVGRl9TVFNfSEJVU1kNCj4rCQkJCSAgICA8PCBERVZfRE1BX0JVRkZfU1RT X1NISUZUKTsNCj4rCX0NCj4rDQoNClJldCBpcyBub3QgYSBnb29kIG5hbWluZyBhcyB0aGUgbG9v cCBjb3VudGVyLg0KDQo+Kwloc19lcC0+bmV4dF9kZXNjID0gMDsNCj4gCWxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShoc19yZXEsIHRyZXEsICZoc19lcC0+cXVldWUsIHF1ZXVlKSB7DQoNCkRvIHdl IHJlYWxseSBuZWVkIHNhZmUgZnVuY3Rpb24gaGVyZT8gV2UgaGF2ZSBhbHJlYWR5IGhhdmUgdGhl IHNwaW5sb2NrLg0KDQo+IAkJcmV0ID0gZHdjMl9nYWRnZXRfZmlsbF9pc29jX2Rlc2MoaHNfZXAs IGhzX3JlcS0+cmVxLmRtYSwNCj4gCQkJCQkJIGhzX3JlcS0+cmVxLmxlbmd0aCk7DQo+LQkJaWYg KHJldCkgew0KPi0JCQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogZGVzYyBjaGFpbiBmdWxsXG4i LCBfX2Z1bmNfXyk7DQo+KwkJaWYgKHJldCkNCj4gCQkJYnJlYWs7DQo+LQkJfQ0KPiAJfQ0KPg0K PiAJZGVwY3RsID0gaHNfZXAtPmRpcl9pbiA/IERJRVBDVEwoaW5kZXgpIDogRE9FUENUTChpbmRl eCk7IEBAIC05MTQsMTANCj4rOTA2LDYgQEAgc3RhdGljIHZvaWQgZHdjMl9nYWRnZXRfc3RhcnRf aXNvY19kZG1hKHN0cnVjdCBkd2MyX2hzb3RnX2VwDQo+KmhzX2VwKQ0KPiAJY3RybCA9IGR3YzJf cmVhZGwoaHNvdGctPnJlZ3MgKyBkZXBjdGwpOw0KPiAJY3RybCB8PSBEWEVQQ1RMX0VQRU5BIHwg RFhFUENUTF9DTkFLOw0KPiAJZHdjMl93cml0ZWwoY3RybCwgaHNvdGctPnJlZ3MgKyBkZXBjdGwp Ow0KPi0NCj4tCS8qIFN3aXRjaCBJU09DIGRlc2NyaXB0b3IgY2hhaW4gbnVtYmVyIGJlaW5nIHBy b2Nlc3NlZCBieSBTVyovDQo+LQloc19lcC0+aXNvY19jaGFpbl9udW0gPSAoaHNfZXAtPmlzb2Nf Y2hhaW5fbnVtIF4gMSkgJiAweDE7DQo+LQloc19lcC0+bmV4dF9kZXNjID0gMDsNCj4gfQ0KPg0K PiAvKioNCj5AQCAtMTI5MSw2ICsxMjc5LDkgQEAgc3RhdGljIGludCBkd2MyX2hzb3RnX2VwX3F1 ZXVlKHN0cnVjdCB1c2JfZXAgKmVwLA0KPnN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxLA0KPiAJc3Ry dWN0IGR3YzJfaHNvdGcgKmhzID0gaHNfZXAtPnBhcmVudDsNCj4gCWJvb2wgZmlyc3Q7DQo+IAlp bnQgcmV0Ow0KPisJdTMyIG1heHNpemUgPSAwOw0KPisJdTMyIG1hc2sgPSAwOw0KPisNCj4NCj4g CWRldl9kYmcoaHMtPmRldiwgIiVzOiByZXEgJXA6ICVkQCVwLCBub2k9JWQsIHplcm89JWQsIHNu b2s9JWRcbiIsDQo+IAkJZXAtPm5hbWUsIHJlcSwgcmVxLT5sZW5ndGgsIHJlcS0+YnVmLCByZXEt Pm5vX2ludGVycnVwdCwgQEAgLTEzMDgsNg0KPisxMjk5LDI0IEBAIHN0YXRpYyBpbnQgZHdjMl9o c290Z19lcF9xdWV1ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0DQo+dXNiX3JlcXVlc3QgKnJl cSwNCj4gCXJlcS0+YWN0dWFsID0gMDsNCj4gCXJlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOw0K Pg0KPisJLyogSW4gRERNQSBtb2RlIGZvciBJU09DJ3MgZG9uJ3QgcXVldWUgcmVxdWVzdCBpZiBs ZW5ndGggZ3JlYXRlcg0KPisJICogdGhhbiBkZXNjcmlwdG9yIGxpbWl0cy4NCj4rCSAqLw0KPisJ aWYgKHVzaW5nX2Rlc2NfZG1hKGhzKSAmJiBoc19lcC0+aXNvY2hyb25vdXMpIHsNCj4rCQltYXhz aXplID0gZHdjMl9nYWRnZXRfZ2V0X2Rlc2NfcGFyYW1zKGhzX2VwLCAmbWFzayk7DQo+KwkJaWYg KGhzX2VwLT5kaXJfaW4gJiYgcmVxLT5sZW5ndGggPiBtYXhzaXplKSB7DQo+KwkJCWRldl9lcnIo aHMtPmRldiwgIndyb25nIGxlbmd0aCAlZCAobWF4c2l6ZT0lZClcbiIsDQo+KwkJCQlyZXEtPmxl bmd0aCwgbWF4c2l6ZSk7DQo+KwkJCXJldHVybiAtRUlOVkFMOw0KPisJCX0NCj4rCQkvKiBJU09D IE9VVCBoaWdoIGJhbmR3aWR0aCBub3Qgc3VwcG9ydGVkICovDQo+KwkJaWYgKCFoc19lcC0+ZGly X2luICYmIHJlcS0+bGVuZ3RoID4gaHNfZXAtPmVwLm1heHBhY2tldCkgew0KPisJCQlkZXZfZXJy KGhzLT5kZXYsICJJU09DIE9VVDogd3JvbmcgbGVuZ3RoICVkIChtcHM9JWQpXG4iLA0KPisJCQkJ cmVxLT5sZW5ndGgsIGhzX2VwLT5lcC5tYXhwYWNrZXQpOw0KPisJCQlyZXR1cm4gLUVJTlZBTDsN Cj4rCQl9DQo+Kwl9DQo+Kw0KPiAJcmV0ID0gZHdjMl9oc290Z19oYW5kbGVfdW5hbGlnbmVkX2J1 Zl9zdGFydChocywgaHNfZXAsIGhzX3JlcSk7DQo+IAlpZiAocmV0KQ0KPiAJCXJldHVybiByZXQ7 DQo+QEAgLTEzMzAsNyArMTMzOSw3IEBAIHN0YXRpYyBpbnQgZHdjMl9oc290Z19lcF9xdWV1ZShz dHJ1Y3QgdXNiX2VwICplcCwNCj5zdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSwNCj4NCj4gCS8qDQo+ IAkgKiBIYW5kbGUgRERNQSBpc29jaHJvbm91cyB0cmFuc2ZlcnMgc2VwYXJhdGVseSAtIGp1c3Qg YWRkIG5ldyBlbnRyeQ0KPi0JICogdG8gdGhlIGhhbGYgb2YgZGVzY3JpcHRvciBjaGFpbiB0aGF0 IGlzIG5vdCBwcm9jZXNzZWQgYnkgSFcuDQo+KwkgKiB0byB0aGUgZGVzY3JpcHRvciBjaGFpbi4N Cj4gCSAqIFRyYW5zZmVyIHdpbGwgYmUgc3RhcnRlZCBvbmNlIFNXIGdldHMgZWl0aGVyIG9uZSBv ZiBOQUsgb3INCj4gCSAqIE91dFRrbkVwRGlzIGludGVycnVwdHMuDQo+IAkgKi8NCj5AQCAtMTMz OCw5ICsxMzQ3LDkgQEAgc3RhdGljIGludCBkd2MyX2hzb3RnX2VwX3F1ZXVlKHN0cnVjdCB1c2Jf ZXAgKmVwLA0KPnN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxLA0KPiAJICAgIGhzX2VwLT50YXJnZXRf ZnJhbWUgIT0gVEFSR0VUX0ZSQU1FX0lOSVRJQUwpIHsNCj4gCQlyZXQgPSBkd2MyX2dhZGdldF9m aWxsX2lzb2NfZGVzYyhoc19lcCwgaHNfcmVxLT5yZXEuZG1hLA0KPiAJCQkJCQkgaHNfcmVxLT5y ZXEubGVuZ3RoKTsNCj4tCQlpZiAocmV0KQ0KPi0JCQlkZXZfZGJnKGhzLT5kZXYsICIlczogSVNP IGRlc2MgY2hhaW4gZnVsbFxuIiwgX19mdW5jX18pOw0KPi0NCj4rCQlpZiAocmV0IDwgMCkNCj4r CQkJZGV2X2RiZyhocy0+ZGV2LCAiJXM6IGZhaWxlZCB0byBmaWxsIGlzb2MgZGVzY1xuIiwNCj4r CQkJCV9fZnVuY19fKTsNCg0KZHdjMl9nYWRnZXRfZmlsbF9pc29jX2Rlc2Mgd2lsbCBuZXZlciBy ZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSwgYW5kIGF0IHRoZSBzYW1lDQp0aW1lIEkgdGhpbmsgdGhl cmUgaXMgbm8gbmVlZCB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBjYW4gd29yayBwcm9w ZXJseSBldmVuDQp0aGUgZGVzYyBjaGFpbiBpcyBmdWxsLg0KDQo+IAkJcmV0dXJuIDA7DQo+IAl9 DQo+DQo+QEAgLTIwMTEsMTAgKzIwMjAsOSBAQCBzdGF0aWMgdm9pZCBkd2MyX2hzb3RnX2NvbXBs ZXRlX3JlcXVlc3Qoc3RydWN0DQo+ZHdjMl9oc290ZyAqaHNvdGcsDQo+ICAqIEBoc19lcDogVGhl IGVuZHBvaW50IHRoZSByZXF1ZXN0IHdhcyBvbi4NCj4gICoNCj4gICogR2V0IGZpcnN0IHJlcXVl c3QgZnJvbSB0aGUgZXAgcXVldWUsIGRldGVybWluZSBkZXNjcmlwdG9yIG9uIHdoaWNoDQo+Y29t cGxldGUNCj4tICogaGFwcGVuZWQuIFNXIGJhc2VkIG9uIGlzb2NfY2hhaW5fbnVtIGRpc2NvdmVy cyB3aGljaCBoYWxmIG9mIHRoZQ0KPmRlc2NyaXB0b3INCj4tICogY2hhaW4gaXMgY3VycmVudGx5 IGluIHVzZSBieSBIVywgYWRqdXN0cyBkbWFfYWRkcmVzcyBhbmQgY2FsY3VsYXRlcyBpbmRleA0K Pi0gKiBvZiBjb21wbGV0ZWQgZGVzY3JpcHRvciBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgREVQRE1B IHJlZ2lzdGVyLiBVcGRhdGUNCj5hY3R1YWwNCj4tICogbGVuZ3RoIG9mIHJlcXVlc3QsIGdpdmVi YWNrIHRvIGdhZGdldC4NCj4rICogaGFwcGVuZWQuIFNXIGRpc2NvdmVycyB3aGljaCBkZXNjcmlw dG9yIGN1cnJlbnRseSBpbiB1c2UgYnkgSFcsDQo+KyBhZGp1c3RzDQo+KyAqIGRtYV9hZGRyZXNz IGFuZCBjYWxjdWxhdGVzIGluZGV4IG9mIGNvbXBsZXRlZCBkZXNjcmlwdG9yIGJhc2VkIG9uDQo+ KyB0aGUgdmFsdWUNCj4rICogb2YgREVQRE1BIHJlZ2lzdGVyLiBVcGRhdGUgYWN0dWFsIGxlbmd0 aCBvZiByZXF1ZXN0LCBnaXZlYmFjayB0byBnYWRnZXQuDQo+ICAqLw0KPiBzdGF0aWMgdm9pZCBk d2MyX2dhZGdldF9jb21wbGV0ZV9pc29jX3JlcXVlc3RfZGRtYShzdHJ1Y3QgZHdjMl9oc290Z19l cA0KPipoc19lcCkgIHsgQEAgLTIwMzcsODIgKzIwNDUsNTUgQEAgc3RhdGljIHZvaWQNCj5kd2My X2dhZGdldF9jb21wbGV0ZV9pc29jX3JlcXVlc3RfZGRtYShzdHJ1Y3QgZHdjMl9oc290Z19lcCAq aHNfZXApDQo+DQo+IAlkbWFfYWRkciA9IGhzX2VwLT5kZXNjX2xpc3RfZG1hOw0KPg0KPi0JLyoN Cj4tCSAqIElmIGxvd2VyIGhhbGYgb2YgIGRlc2NyaXB0b3IgY2hhaW4gaXMgY3VycmVudGx5IHVz ZSBieSBTVywNCj4tCSAqIHRoYXQgbWVhbnMgaGlnaGVyIGhhbGYgaXMgYmVpbmcgcHJvY2Vzc2Vk IGJ5IEhXLCBzbyBzaGlmdA0KPi0JICogRE1BIGFkZHJlc3MgdG8gaGlnaGVyIGhhbGYgb2YgZGVz Y3JpcHRvciBjaGFpbi4NCj4tCSAqLw0KPi0JaWYgKCFoc19lcC0+aXNvY19jaGFpbl9udW0pDQo+ LQkJZG1hX2FkZHIgKz0gc2l6ZW9mKHN0cnVjdCBkd2MyX2RtYV9kZXNjKSAqDQo+LQkJCSAgICAo TUFYX0RNQV9ERVNDX05VTV9HRU5FUklDIC8gMik7DQo+LQ0KPiAJZG1hX3JlZyA9IGhzX2VwLT5k aXJfaW4gPyBESUVQRE1BKGhzX2VwLT5pbmRleCkgOg0KPkRPRVBETUEoaHNfZXAtPmluZGV4KTsN Cj4gCWRlcGRtYSA9IGR3YzJfcmVhZGwoaHNvdGctPnJlZ3MgKyBkbWFfcmVnKTsNCj4NCj4gCWlu ZGV4ID0gKGRlcGRtYSAtIGRtYV9hZGRyKSAvIHNpemVvZihzdHJ1Y3QgZHdjMl9kbWFfZGVzYykg LSAxOw0KPi0JZGVzY19zdHMgPSBoc19lcC0+ZGVzY19saXN0W2luZGV4XS5zdGF0dXM7DQo+Kwkv KiBDaGVjayBkZXNjcmlwdG9yIGNoYWluIHJvbGxvdmVyICovDQo+KwlpZiAoaW5kZXggPCAwKQ0K PisJCWluZGV4ID0gTUFYX0RNQV9ERVNDX05VTV9HRU5FUklDIC0gMTsNCj4NCg0KSSBkb24ndCB1 bmRlcnN0YW5kIGhlcmUsIHdoeSBzZXR0aW5nIHRoZSBpbmRleCB0bw0KIE1BWF9ETUFfREVTQ19O VU1fR0VORVJJQyAtIDEgd2hlbiB0aGUgY2hhaW4gaXMgcm9sbG92ZXI/DQpJZiB0aGUgY2hhaW4g aXMgcm9sbG92ZXIsIHRoZSBpbmRleCBzaG91bGQgcG9pbnQgdG8gdGhlIGxhdGVzdCBmaW5pc2hl ZCBkZXNjLA0KYW5kIGFsbCB0aGUgZmluaXNoZWQgZGVzY3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC4g QW5kIGV2ZW4gdGhlIGNoYWluIGlzIHJvbGxvdmVyLCANCnRoZSBjb3VudCBvZiBkZXNjcyBpbiBj aGFpbiBpcyBtYXliZSBsZXNzIHRoZW4gTUFYX0RNQV9ERVNDX05VTV9HRU5FUklDLg0KDQo+LQlt YXNrID0gaHNfZXAtPmRpcl9pbiA/IERFVl9ETUFfSVNPQ19UWF9OQllURVNfTUFTSyA6DQo+LQkg ICAgICAgREVWX0RNQV9JU09DX1JYX05CWVRFU19NQVNLOw0KPi0JdXJlcS0+YWN0dWFsID0gdXJl cS0+bGVuZ3RoIC0NCj4tCQkgICAgICAgKChkZXNjX3N0cyAmIG1hc2spID4+IERFVl9ETUFfSVNP Q19OQllURVNfU0hJRlQpOw0KPi0NCj4tCS8qIEFkanVzdCBhY3R1YWwgbGVuZ3RoIGZvciBJU09D IE91dCBpZiBsZW5ndGggaXMgbm90IGFsaWduIG9mIDQgKi8NCj4tCWlmICghaHNfZXAtPmRpcl9p biAmJiB1cmVxLT5sZW5ndGggJiAweDMpDQo+LQkJdXJlcS0+YWN0dWFsICs9IDQgLSAodXJlcS0+ bGVuZ3RoICYgMHgzKTsNCj4rCWRlc2Nfc3RzID0gaHNfZXAtPmRlc2NfbGlzdFtpbmRleF0uc3Rh dHVzOw0KPisJLyogQ2hlY2sgY29tcGxldGlvbiBzdGF0dXMgKi8NCj4rCWlmICgoZGVzY19zdHMg JiBERVZfRE1BX1NUU19NQVNLKSA+PiBERVZfRE1BX1NUU19TSElGVCA9PQ0KPisJICAgIERFVl9E TUFfU1RTX1NVQ0MpIHsNCj4rCQltYXNrID0gaHNfZXAtPmRpcl9pbiA/IERFVl9ETUFfSVNPQ19U WF9OQllURVNfTUFTSyA6DQo+KwkJICAgICAgIERFVl9ETUFfSVNPQ19SWF9OQllURVNfTUFTSzsN Cj4rCQl1cmVxLT5hY3R1YWwgPSB1cmVxLT5sZW5ndGggLQ0KPisJCQkgICAgICAgKChkZXNjX3N0 cyAmIG1hc2spID4+DQo+KwkJCQlERVZfRE1BX0lTT0NfTkJZVEVTX1NISUZUKTsNCj4rDQo+KwkJ LyogQWRqdXN0IGFjdHVhbCBsZW4gZm9yIElTT0MgT3V0IGlmIGxlbiBpcyBub3QgYWxpZ24gb2Yg NCAqLw0KPisJCWlmICghaHNfZXAtPmRpcl9pbiAmJiB1cmVxLT5sZW5ndGggJiAweDMpDQo+KwkJ CXVyZXEtPmFjdHVhbCArPSA0IC0gKHVyZXEtPmxlbmd0aCAmIDB4Myk7DQo+DQo+LQlkd2MyX2hz b3RnX2NvbXBsZXRlX3JlcXVlc3QoaHNvdGcsIGhzX2VwLCBoc19yZXEsIDApOw0KPisJCWR3YzJf aHNvdGdfY29tcGxldGVfcmVxdWVzdChoc290ZywgaHNfZXAsIGhzX3JlcSwgMCk7DQo+Kwl9IGVs c2Ugew0KPisJCWR3YzJfaHNvdGdfY29tcGxldGVfcmVxdWVzdChoc290ZywgaHNfZXAsIGhzX3Jl cSwgLUVUSU1FRE9VVCk7DQo+Kwl9DQo+IH0NCj4NCj4gLyoNCj4tICogZHdjMl9nYWRnZXRfc3Rh cnRfbmV4dF9pc29jX2RkbWEgLSBzdGFydCBuZXh0IGlzb2MgcmVxdWVzdCwgaWYgYW55Lg0KPi0g KiBAaHNfZXA6IFRoZSBpc29jaHJvbm91cyBlbmRwb2ludCB0byBiZSByZS1lbmFibGVkLg0KPisg KiBkd2MyX2dhZGdldF9oYW5kbGVfaXNvY19ibmEgLSBoYW5kbGUgQk5BIGludGVycnVwdCBmb3Ig SVNPQy4NCj4rICogQGhzX2VwOiBUaGUgaXNvY2hyb25vdXMgZW5kcG9pbnQuDQo+ICAqDQo+LSAq IElmIGVwIGhhcyBiZWVuIGRpc2FibGVkIGR1ZSB0byBsYXN0IGRlc2NyaXB0b3Igc2VydmljaW5n IChJTiBlbmRwb2ludCkgb3INCj4tICogQk5BIChPVVQgZW5kcG9pbnQpIGNoZWNrIHRoZSBzdGF0 dXMgb2Ygb3RoZXIgaGFsZiBvZiBkZXNjcmlwdG9yIGNoYWluIHRoYXQNCj4tICogd2FzIHVuZGVy IFNXIGNvbnRyb2wgdGlsbCBIVyB3YXMgYnVzeSBhbmQgcmVzdGFydCB0aGUgZW5kcG9pbnQgaWYg bmVlZGVkLg0KPisgKiBDb21wbGV0ZSByZXF1ZXN0IHdpdGggLUVJTy4NCj4rICogSWYgRVAgSVNP QyBPVVQgdGhlbiBuZWVkIHRvIGZsdXNoIFJYIEZJRk8gdG8gcmVtb3ZlIHNvdXJjZSBvZiBCTkEN Cj4rICogaW50ZXJydXB0LiBSZXNldCB0YXJnZXQgZnJhbWUgYW5kIG5leHRfZGVzYyB0byBhbGxv dyB0byBzdGFydA0KPisgKiBJU09DJ3Mgb24gTkFLIGludGVycnVwdCBmb3IgSU4gZGlyZWN0aW9u IG9yIG9uIE9VVFRLTkVQRElTDQo+KyAqIGludGVycnVwdCBmb3IgT1VUIGRpcmVjdGlvbi4NCj4g ICovDQo+LXN0YXRpYyB2b2lkIGR3YzJfZ2FkZ2V0X3N0YXJ0X25leHRfaXNvY19kZG1hKHN0cnVj dCBkd2MyX2hzb3RnX2VwDQo+KmhzX2VwKQ0KPitzdGF0aWMgdm9pZCBkd2MyX2dhZGdldF9oYW5k bGVfaXNvY19ibmEoc3RydWN0IGR3YzJfaHNvdGdfZXAgKmhzX2VwKQ0KPiB7DQo+IAlzdHJ1Y3Qg ZHdjMl9oc290ZyAqaHNvdGcgPSBoc19lcC0+cGFyZW50Ow0KPi0JdTMyIGRlcGN0bDsNCj4tCXUz MiBkbWFfcmVnOw0KPi0JdTMyIGN0cmw7DQo+LQl1MzIgZG1hX2FkZHIgPSBoc19lcC0+ZGVzY19s aXN0X2RtYTsNCj4tCXVuc2lnbmVkIGNoYXIgaW5kZXggPSBoc19lcC0+aW5kZXg7DQo+LQ0KPi0J ZG1hX3JlZyA9IGhzX2VwLT5kaXJfaW4gPyBESUVQRE1BKGluZGV4KSA6IERPRVBETUEoaW5kZXgp Ow0KPi0JZGVwY3RsID0gaHNfZXAtPmRpcl9pbiA/IERJRVBDVEwoaW5kZXgpIDogRE9FUENUTChp bmRleCk7DQo+DQo+LQljdHJsID0gZHdjMl9yZWFkbChoc290Zy0+cmVncyArIGRlcGN0bCk7DQo+ KwlpZiAoIWhzX2VwLT5kaXJfaW4pDQo+KwkJZHdjMl9mbHVzaF9yeF9maWZvKGhzb3RnKTsNCj4r CWR3YzJfaHNvdGdfY29tcGxldGVfcmVxdWVzdChoc290ZywgaHNfZXAsIGdldF9lcF9oZWFkKGhz X2VwKSwNCj4rCQkJCSAgICAtRUlPKTsNCj4NCj4tCS8qDQo+LQkgKiBFUCB3YXMgZGlzYWJsZWQg aWYgSFcgaGFzIHByb2Nlc3NlZCBsYXN0IGRlc2NyaXB0b3Igb3IgQk5BIHdhcyBzZXQuDQo+LQkg KiBTbyByZXN0YXJ0IGVwIGlmIFNXIGhhcyBwcmVwYXJlZCBuZXcgZGVzY3JpcHRvciBjaGFpbiBp biBlcF9xdWV1ZQ0KPi0JICogcm91dGluZSB3aGlsZSBIVyB3YXMgYnVzeS4NCj4tCSAqLw0KPi0J aWYgKCEoY3RybCAmIERYRVBDVExfRVBFTkEpKSB7DQo+LQkJaWYgKCFoc19lcC0+bmV4dF9kZXNj KSB7DQo+LQkJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBObyBtb3JlIElTT0MgcmVxdWVzdHNc biIsDQo+LQkJCQlfX2Z1bmNfXyk7DQo+LQkJCXJldHVybjsNCj4tCQl9DQo+LQ0KPi0JCWRtYV9h ZGRyICs9IHNpemVvZihzdHJ1Y3QgZHdjMl9kbWFfZGVzYykgKg0KPi0JCQkgICAgKE1BWF9ETUFf REVTQ19OVU1fR0VORVJJQyAvIDIpICoNCj4tCQkJICAgIGhzX2VwLT5pc29jX2NoYWluX251bTsN Cj4tCQlkd2MyX3dyaXRlbChkbWFfYWRkciwgaHNvdGctPnJlZ3MgKyBkbWFfcmVnKTsNCj4tDQo+ LQkJY3RybCB8PSBEWEVQQ1RMX0VQRU5BIHwgRFhFUENUTF9DTkFLOw0KPi0JCWR3YzJfd3JpdGVs KGN0cmwsIGhzb3RnLT5yZWdzICsgZGVwY3RsKTsNCj4tDQo+LQkJLyogU3dpdGNoIElTT0MgZGVz Y3JpcHRvciBjaGFpbiBudW1iZXIgYmVpbmcgcHJvY2Vzc2VkIGJ5IFNXKi8NCj4tCQloc19lcC0+ aXNvY19jaGFpbl9udW0gPSAoaHNfZXAtPmlzb2NfY2hhaW5fbnVtIF4gMSkgJiAweDE7DQo+LQkJ aHNfZXAtPm5leHRfZGVzYyA9IDA7DQo+LQ0KPi0JCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBS ZXN0YXJ0ZWQgaXNvY2hyb25vdXMgZW5kcG9pbnRcbiIsDQo+LQkJCV9fZnVuY19fKTsNCj4tCX0N Cj4rCWhzX2VwLT50YXJnZXRfZnJhbWUgPSBUQVJHRVRfRlJBTUVfSU5JVElBTDsNCj4rCWhzX2Vw LT5uZXh0X2Rlc2MgPSAwOw0KPiB9DQo+DQo+IC8qKg0KPkBAIC0yODE2LDE4ICsyNzk3LDI1IEBA IHN0YXRpYyB2b2lkIGR3YzJfZ2FkZ2V0X2hhbmRsZV9uYWsoc3RydWN0DQo+ZHdjMl9oc290Z19l cCAqaHNfZXApICB7DQo+IAlzdHJ1Y3QgZHdjMl9oc290ZyAqaHNvdGcgPSBoc19lcC0+cGFyZW50 Ow0KPiAJaW50IGRpcl9pbiA9IGhzX2VwLT5kaXJfaW47DQo+Kwl1MzIgdG1wOw0KPg0KPiAJaWYg KCFkaXJfaW4gfHwgIWhzX2VwLT5pc29jaHJvbm91cykNCj4gCQlyZXR1cm47DQo+DQo+IAlpZiAo aHNfZXAtPnRhcmdldF9mcmFtZSA9PSBUQVJHRVRfRlJBTUVfSU5JVElBTCkgew0KPi0JCWhzX2Vw LT50YXJnZXRfZnJhbWUgPSBkd2MyX2hzb3RnX3JlYWRfZnJhbWVubyhoc290Zyk7DQo+DQo+KwkJ dG1wID0gZHdjMl9oc290Z19yZWFkX2ZyYW1lbm8oaHNvdGcpOw0KDQpJIHRoaW5rIHRoZXJlIGlz IG5vIG5lZWQgdG8gaW50cm9kdWNlIHRtcCwgYW5kIHRoZSBvcmlnaW5hbCBpcyBhbGwgcmlnaHQu DQoNCj4gCQlpZiAodXNpbmdfZGVzY19kbWEoaHNvdGcpKSB7DQo+KwkJCWR3YzJfaHNvdGdfY29t cGxldGVfcmVxdWVzdChoc290ZywgaHNfZXAsDQo+KwkJCQkJCSAgICBnZXRfZXBfaGVhZChoc19l cCksDQo+KwkJCQkJCSAgICAtRU5PREFUQSk7DQo+KwkJCWhzX2VwLT50YXJnZXRfZnJhbWUgPSB0 bXA7DQo+KwkJCWR3YzJfZ2FkZ2V0X2luY3JfZnJhbWVfbnVtKGhzX2VwKTsNCj4gCQkJZHdjMl9n YWRnZXRfc3RhcnRfaXNvY19kZG1hKGhzX2VwKTsNCj4gCQkJcmV0dXJuOw0KPiAJCX0NCj4NCj4r CQloc19lcC0+dGFyZ2V0X2ZyYW1lID0gdG1wOw0KPiAJCWlmIChoc19lcC0+aW50ZXJ2YWwgPiAx KSB7DQo+IAkJCXUzMiBjdHJsID0gZHdjMl9yZWFkbChoc290Zy0+cmVncyArDQo+IAkJCQkJICAg ICAgRElFUENUTChoc19lcC0+aW5kZXgpKTsNCj5AQCAtMjg0Myw3ICsyODMxLDggQEAgc3RhdGlj IHZvaWQgZHdjMl9nYWRnZXRfaGFuZGxlX25hayhzdHJ1Y3QNCj5kd2MyX2hzb3RnX2VwICpoc19l cCkNCj4gCQkJCQkgICAgZ2V0X2VwX2hlYWQoaHNfZXApLCAwKTsNCj4gCX0NCj4NCj4tCWR3YzJf Z2FkZ2V0X2luY3JfZnJhbWVfbnVtKGhzX2VwKTsNCj4rCWlmICghdXNpbmdfZGVzY19kbWEoaHNv dGcpKQ0KPisJCWR3YzJfZ2FkZ2V0X2luY3JfZnJhbWVfbnVtKGhzX2VwKTsNCj4gfQ0KPg0KPiAv KioNCj5AQCAtMjkwMSw5ICsyODkwLDkgQEAgc3RhdGljIHZvaWQgZHdjMl9oc290Z19lcGludChz dHJ1Y3QgZHdjMl9oc290Zw0KPipoc290ZywgdW5zaWduZWQgaW50IGlkeCwNCj4NCj4gCQkvKiBJ biBERE1BIGhhbmRsZSBpc29jaHJvbm91cyByZXF1ZXN0cyBzZXBhcmF0ZWx5ICovDQo+IAkJaWYg KHVzaW5nX2Rlc2NfZG1hKGhzb3RnKSAmJiBoc19lcC0+aXNvY2hyb25vdXMpIHsNCj4tCQkJZHdj Ml9nYWRnZXRfY29tcGxldGVfaXNvY19yZXF1ZXN0X2RkbWEoaHNfZXApOw0KPi0JCQkvKiBUcnkg dG8gc3RhcnQgbmV4dCBpc29jIHJlcXVlc3QgKi8NCj4tCQkJZHdjMl9nYWRnZXRfc3RhcnRfbmV4 dF9pc29jX2RkbWEoaHNfZXApOw0KPisJCQkvKiBYZmVyQ29tcGwgc2V0IGFsb25nIHdpdGggQk5B ICovDQo+KwkJCWlmICghKGludHMgJiBEWEVQSU5UX0JOQUlOVFIpKQ0KPisJCQkJZHdjMl9nYWRn ZXRfY29tcGxldGVfaXNvY19yZXF1ZXN0X2RkbWEoaHNfZXApOw0KPiAJCX0gZWxzZSBpZiAoZGly X2luKSB7DQo+IAkJCS8qDQo+IAkJCSAqIFdlIGdldCBPdXREb25lIGZyb20gdGhlIEZJRk8sIHNv IHdlIG9ubHkgQEAgLTI5NzgsMTUNCj4rMjk2Nyw4IEBAIHN0YXRpYyB2b2lkIGR3YzJfaHNvdGdf ZXBpbnQoc3RydWN0IGR3YzJfaHNvdGcgKmhzb3RnLCB1bnNpZ25lZA0KPmludCBpZHgsDQo+DQo+ IAlpZiAoaW50cyAmIERYRVBJTlRfQk5BSU5UUikgew0KPiAJCWRldl9kYmcoaHNvdGctPmRldiwg IiVzOiBCTkEgaW50ZXJydXB0XG4iLCBfX2Z1bmNfXyk7DQo+LQ0KPi0JCS8qDQo+LQkJICogVHJ5 IHRvIHN0YXJ0IG5leHQgaXNvYyByZXF1ZXN0LCBpZiBhbnkuDQo+LQkJICogU29tZXRpbWVzIHRo ZSBlbmRwb2ludCByZW1haW5zIGVuYWJsZWQgYWZ0ZXIgQk5BIGludGVycnVwdA0KPi0JCSAqIGFz c2VydGlvbiwgd2hpY2ggaXMgbm90IGV4cGVjdGVkLCBoZW5jZSB3ZSBjYW4gZW50ZXIgaGVyZQ0K Pi0JCSAqIGNvdXBsZSBvZiB0aW1lcy4NCj4tCQkgKi8NCj4gCQlpZiAoaHNfZXAtPmlzb2Nocm9u b3VzKQ0KPi0JCQlkd2MyX2dhZGdldF9zdGFydF9uZXh0X2lzb2NfZGRtYShoc19lcCk7DQo+KwkJ CWR3YzJfZ2FkZ2V0X2hhbmRsZV9pc29jX2JuYShoc19lcCk7DQo+IAl9DQo+DQo+IAlpZiAoZGly X2luICYmICFoc19lcC0+aXNvY2hyb25vdXMpIHsNCj5AQCAtMzc5MSw2ICszNzczLDcgQEAgc3Rh dGljIGludCBkd2MyX2hzb3RnX2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICplcCwNCj4gCXVuc2ln bmVkIGludCBkaXJfaW47DQo+IAl1bnNpZ25lZCBpbnQgaSwgdmFsLCBzaXplOw0KPiAJaW50IHJl dCA9IDA7DQo+Kwl1bnNpZ25lZCBjaGFyIGVwX3R5cGU7DQo+DQo+IAlkZXZfZGJnKGhzb3RnLT5k ZXYsDQo+IAkJIiVzOiBlcCAlczogYSAweCUwMngsIGF0dHIgMHglMDJ4LCBtcHMgMHglMDR4LCBp bnRyICVkXG4iLCBAQA0KPi0zODA5LDYgKzM3OTIsMTUgQEAgc3RhdGljIGludCBkd2MyX2hzb3Rn X2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICplcCwNCj4gCQlyZXR1cm4gLUVJTlZBTDsNCj4gCX0N Cj4NCj4rCWVwX3R5cGUgPSBkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZ UEVfTUFTSzsNCj4rCS8qIElTT0MgRERNQSBzdXBwb3J0ZWQgYkludGVydmFsIHVwIHRvIDEyICov DQo+KwlpZiAodXNpbmdfZGVzY19kbWEoaHNvdGcpICYmIGVwX3R5cGUgPT0gVVNCX0VORFBPSU5U X1hGRVJfSVNPQyAmJg0KPisJICAgIGRpcl9pbiAmJiBkZXNjLT5iSW50ZXJ2YWwgPiAxMikgew0K PisJCWRldl9lcnIoaHNvdGctPmRldiwNCj4rCQkJIiVzOiBJU09DIElOOiBiSW50ZXJ2YWw+MTIg bm90IHN1cHBvcnRlZCFcbiIsIF9fZnVuY19fKTsNCj4rCQlyZXR1cm4gLUVJTlZBTDsNCj4rCX0N Cj4rDQo+IAltcHMgPSB1c2JfZW5kcG9pbnRfbWF4cChkZXNjKTsNCj4gCW1jID0gdXNiX2VuZHBv aW50X21heHBfbXVsdChkZXNjKTsNCj4NCj5AQCAtMzg1MiwxNCArMzg0NCwxMyBAQCBzdGF0aWMg aW50IGR3YzJfaHNvdGdfZXBfZW5hYmxlKHN0cnVjdCB1c2JfZXANCj4qZXAsDQo+IAloc19lcC0+ aGFsdGVkID0gMDsNCj4gCWhzX2VwLT5pbnRlcnZhbCA9IGRlc2MtPmJJbnRlcnZhbDsNCj4NCj4t CXN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0sp IHsNCj4rCXN3aXRjaCAoZXBfdHlwZSkgew0KPiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09D Og0KPiAJCWVwY3RybCB8PSBEWEVQQ1RMX0VQVFlQRV9JU087DQo+IAkJZXBjdHJsIHw9IERYRVBD VExfU0VURVZFTkZSOw0KPiAJCWhzX2VwLT5pc29jaHJvbm91cyA9IDE7DQo+IAkJaHNfZXAtPmlu dGVydmFsID0gMSA8PCAoZGVzYy0+YkludGVydmFsIC0gMSk7DQo+IAkJaHNfZXAtPnRhcmdldF9m cmFtZSA9IFRBUkdFVF9GUkFNRV9JTklUSUFMOw0KPi0JCWhzX2VwLT5pc29jX2NoYWluX251bSA9 IDA7DQo+IAkJaHNfZXAtPm5leHRfZGVzYyA9IDA7DQo+IAkJaWYgKGRpcl9pbikgew0KPiAJCQlo c19lcC0+cGVyaW9kaWMgPSAxOw0KPi0tDQo+Mi4xMS4wDQo+DQo+LS0NCj5UbyB1bnN1YnNjcmli ZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBp biB0aGUgYm9keSBvZg0KPmEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnIE1v cmUgbWFqb3Jkb21vIGluZm8gYXQNCj5odHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1p bmZvLmh0bWwK