From mboxrd@z Thu Jan 1 00:00:00 1970 From: "=?utf-8?B?6ZmI5Y2O5omN?=" Subject: Re: [PATCH V9 1/4] dma-mapping: Rework dma_get_cache_alignment() Date: Fri, 3 Nov 2017 12:48:31 +0800 Message-ID: References: <1508742767-28366-1-git-send-email-chenhc@lemote.com> <0f34e021-a559-3e3c-4586-48450e87d5c8@samsung.com> <7ac87ae6-32e5-bd14-32a1-abdcf8aa8221@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtpbguseast2.qq.com ([54.204.34.130]:45744 "EHLO smtpbguseast2.qq.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751008AbdKCEsi (ORCPT ); Fri, 3 Nov 2017 00:48:38 -0400 In-Reply-To: Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: =?utf-8?B?TWFyZWsgU3p5cHJvd3NraQ==?= , =?utf-8?B?Q2hyaXN0b3BoIEhlbGx3aWc=?= Cc: =?utf-8?B?Um9iaW4gTXVycGh5?= , =?utf-8?B?QW5kcmV3IE1vcnRvbg==?= , =?utf-8?B?RnV4aW4gWmhhbmc=?= , =?utf-8?B?bGludXgta2VybmVs?= , =?utf-8?B?UmFsZiBCYWVjaGxl?= , =?utf-8?B?SmFtZXNIb2dhbg==?= , =?utf-8?B?bGludXgtbWlwcw==?= , =?utf-8?B?SmFtZXMgRSAuIEogLkJvdHRvbWxleQ==?= , =?utf-8?B?TWFydGluIEsgLiBQZXRlcnNlbg==?= , =?utf-8?B?bGludXgtc2NzaQ==?= , =?utf-8?B?c3RhYmxl?= , =?utf-8?B?TWljaGFlbCBTIC4gVHNpcmtpbg==?= , =?utf-8?B?UGF3ZWwgT3NjaWFr?= V2h5IHRoaXMgaXMgc3RpbGwgdW4tbWVyZ2VkPyBTaG91bGQgSSByZW1vdmUgdGhlIGNjLXN0 YWJsZSBhbmQgcmVzZW5kIHRoaXMgc2VyaWVzPw0KDQpIdWFjYWkNCiANCiANCi0tLS0tLS0t LS0tLS0tLS0tLSBPcmlnaW5hbCAtLS0tLS0tLS0tLS0tLS0tLS0NCkZyb206ICAi6ZmI5Y2O 5omNIjxjaGVuaGNAbGVtb3RlLmNvbT47DQpEYXRlOiAgVGh1LCBPY3QgMjYsIDIwMTcgMDI6 MzMgUE0NClRvOiAgIk1hcmVrIFN6eXByb3dza2kiPG0uc3p5cHJvd3NraUBzYW1zdW5nLmNv bT47ICJDaHJpc3RvcGggSGVsbHdpZyI8aGNoQGxzdC5kZT47IA0KQ2M6ICAiUm9iaW4gTXVy cGh5Ijxyb2Jpbi5tdXJwaHlAYXJtLmNvbT47ICJBbmRyZXcgTW9ydG9uIjxha3BtQGxpbnV4 LWZvdW5kYXRpb24ub3JnPjsgIkZ1eGluIFpoYW5nIjx6aGFuZ2Z4QGxlbW90ZS5jb20+OyAi bGludXgta2VybmVsIjxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPjsgIlJhbGYgQmFl Y2hsZSI8cmFsZkBsaW51eC1taXBzLm9yZz47ICJKYW1lc0hvZ2FuIjxqYW1lcy5ob2dhbkBp bWd0ZWMuY29tPjsgImxpbnV4LW1pcHMiPGxpbnV4LW1pcHNAbGludXgtbWlwcy5vcmc+OyAi SmFtZXMgRSAuIEogLkJvdHRvbWxleSI8amVqYkBsaW51eC52bmV0LmlibS5jb20+OyAiTWFy dGluIEsgLiBQZXRlcnNlbiI8bWFydGluLnBldGVyc2VuQG9yYWNsZS5jb20+OyAibGludXgt c2NzaSI8bGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmc+OyAic3RhYmxlIjxzdGFibGVAdmdl ci5rZXJuZWwub3JnPjsgIk1pY2hhZWwgUyAuIFRzaXJraW4iPG1zdEByZWRoYXQuY29tPjsg IlBhd2VsIE9zY2lhayI8cGF3ZWxAb3NjaWFrLmNvbT47ICJLeXVuZ21pbiBQYXJrIjxreXVu Z21pbi5wYXJrQHNhbXN1bmcuY29tPjsgIk1pY2hhZWwgQ2hhbiI8bWljaGFlbC5jaGFuQGJy b2FkY29tLmNvbT47ICJCZW5qYW1pbiBIZXJyZW5zY2htaWR0IjxiZW5oQGtlcm5lbC5jcmFz aGluZy5vcmc+OyAiSXZhbiBNaWtoYXlsb3YiPGl2YW5AcnUuaWJtLmNvbT47ICJUYXJpcSBU b3VrYW4iPHRhcmlxdEBtZWxsYW5veC5jb20+OyAiQW5keSBHcm9zcyI8YWdyb3NzQGNvZGVh dXJvcmEub3JnPjsgIk1hcmsgQSAuIEdyZWVyIjxtZ3JlZXJAYW5pbWFsY3JlZWsuY29tPjsg IlJvYmVydEJhbGR5Z2EiPHIuYmFsZHlnYUBoYWNrZXJpb24uY29tPjsgDQpTdWJqZWN0OiAg UmU6IFtQQVRDSCBWOSAxLzRdIGRtYS1tYXBwaW5nOiBSZXdvcmsgZG1hX2dldF9jYWNoZV9h bGlnbm1lbnQoKQ0KDQogDQpNYXliZSBteSBmaXJzdCB2ZXJzaW9uIGlzIHN1aXRhYmxlIGZv ciBzdGFibGUuDQoNCkh1YWNhaQ0KIA0KIA0KLS0tLS0tLS0tLS0tLS0tLS0tIE9yaWdpbmFs IC0tLS0tLS0tLS0tLS0tLS0tLQ0KRnJvbTogICJNYXJlayBTenlwcm93c2tpIjxtLnN6eXBy b3dza2lAc2Ftc3VuZy5jb20+Ow0KRGF0ZTogIFdlZCwgT2N0IDI1LCAyMDE3IDAzOjIxIFBN DQpUbzogICLpmYjljY7miY0iPGNoZW5oY0BsZW1vdGUuY29tPjsgIkNocmlzdG9waCBIZWxs d2lnIjxoY2hAbHN0LmRlPjsgDQpDYzogICJSb2JpbiBNdXJwaHkiPHJvYmluLm11cnBoeUBh cm0uY29tPjsgIkFuZHJldyBNb3J0b24iPGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+OyAi RnV4aW4gWmhhbmciPHpoYW5nZnhAbGVtb3RlLmNvbT47ICJsaW51eC1rZXJuZWwiPGxpbnV4 LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+OyAiUmFsZiBCYWVjaGxlIjxyYWxmQGxpbnV4LW1p cHMub3JnPjsgIkphbWVzSG9nYW4iPGphbWVzLmhvZ2FuQGltZ3RlYy5jb20+OyAibGludXgt bWlwcyI8bGludXgtbWlwc0BsaW51eC1taXBzLm9yZz47ICJKYW1lcyBFIC4gSiAuQm90dG9t bGV5IjxqZWpiQGxpbnV4LnZuZXQuaWJtLmNvbT47ICJNYXJ0aW4gSyAuIFBldGVyc2VuIjxt YXJ0aW4ucGV0ZXJzZW5Ab3JhY2xlLmNvbT47ICJsaW51eC1zY3NpIjxsaW51eC1zY3NpQHZn ZXIua2VybmVsLm9yZz47ICJzdGFibGUiPHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmc+OyAiTWlj aGFlbCBTIC4gVHNpcmtpbiI8bXN0QHJlZGhhdC5jb20+OyAiUGF3ZWwgT3NjaWFrIjxwYXdl bEBvc2NpYWsuY29tPjsgIkt5dW5nbWluIFBhcmsiPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5j b20+OyAiTWljaGFlbCBDaGFuIjxtaWNoYWVsLmNoYW5AYnJvYWRjb20uY29tPjsgIkJlbmph bWluIEhlcnJlbnNjaG1pZHQiPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz47ICJJdmFuIE1p a2hheWxvdiI8aXZhbkBydS5pYm0uY29tPjsgIlRhcmlxIFRvdWthbiI8dGFyaXF0QG1lbGxh bm94LmNvbT47ICJBbmR5IEdyb3NzIjxhZ3Jvc3NAY29kZWF1cm9yYS5vcmc+OyAiTWFyayBB IC4gR3JlZXIiPG1ncmVlckBhbmltYWxjcmVlay5jb20+OyAiUm9iZXJ0QmFsZHlnYSI8ci5i YWxkeWdhQGhhY2tlcmlvbi5jb20+OyANClN1YmplY3Q6ICBSZTogW1BBVENIIFY5IDEvNF0g ZG1hLW1hcHBpbmc6IFJld29yayBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpDQoNCiANCkhp IEh1YWNhaSwNCg0KT24gMjAxNy0xMC0yNSAwMzoyMiwg6ZmI5Y2O5omNIHdyb3RlOg0KPiBI aSwgTWFyZWsNCj4NCj4gUGF0Y2gzIGlzIG5lZWRlZCBmb3Igc3RhYmxlLCBidXQgUGF0Y2gz IGRlcGVuZCBvbiBQYXRjaDEgYW5kIFBhdGNoMi4NCg0KVGhlbiBwYXRjaCAjMyBoYXMgdG8g YmUgcmV3b3JrZWQuIEZpcnN0IGNoYW5nZSBzY3NpIHRvIGFsaWduIHRoZSBibG9jayANCnF1 ZXVlIHRvIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkuIFRoaXMgd2lsbCBiZSBzYWZlIGlu IGFsbCBjYXNlcyBhbmQgDQppdCB3aWxsIG5vdCBodXJ0IG1lbW9yeSB1c2FnZSB0aGF0IG11 Y2guIFN1Y2ggdmVyc2lvbiBjYW4gYmUgYXBwbGllZCANCmZpcnN0IGFuZCBzZW50IHRvIHN0 YWJsZSB3aXRob3V0IGFueSBkZXBlbmRlbmNpZXMuIFBsZWFzZSBhbHNvIGRlc2NyaWJlIA0K ZGVlcGx5IHdoeSBzdWNoIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHdoYXQgaXNzdWVzIGNhbiBi ZSBvYnNlcnZlZCB3aXRob3V0IA0KaXQsIG9uIHdoaWNoIHN5c3RlbXMuDQoNClRoZW4gYXMg YW4gb3B0aW1pemF0aW9uIGFkZCBzdXBwb3J0IGZvciBwZXItZGV2aWNlIGNhY2hlX2FsaWdu bWVudCANCihwYXRjaGVzICMxIGFuZCAjMikuIEknbSBzdGlsbCBub3QgY29udmluY2VkIHRo YXQgaXQgbWFrZXMgc2Vuc2UgdG8gDQphbGlnbiBETUEgc3RydWN0dXJlcyB0byB2YWx1ZXMg bGVzcyB0aGFuIEwxIGNhY2hlIGxpbmUgc2l6ZS4gSXQgbWlnaHQgDQpodXJ0IHBlcmZvcm1h bmNlLCBiZWNhdXNlIGNhY2hlIGNvaGVyZW5jeSBoYXMgaXRzIGNvc3QgYW5kIGl0IGlzIGFs c28gDQpyZWxldmFudCB0byBtdWx0aS1jb3JlL3NtcCBhY2Nlc3MgdG8gYW55IG9iamVjdHMg dGhhdCBhcmUgaW4gdGhlIHNhbWUgbDEgDQpjYWNoZSBsaW5lLiBNZW1vcnkgc2F2aW5ncyB0 aGF0IG1pZ2h0IGJlIHRoZSByZXN1bHRzIG9mIHN1Y2ggbG93ZXIgDQphbGlnbm1lbnQgYXJl IHByb2JhYmx5IG5lZ2xpZ2libGUuDQoNCj4NCj4gSHVhY2FpDQo+ICAgDQo+ICAgDQo+IC0t LS0tLS0tLS0tLS0tLS0tLSBPcmlnaW5hbCAtLS0tLS0tLS0tLS0tLS0tLS0NCj4gRnJvbTog ICJNYXJlayBTenlwcm93c2tpIjxtLnN6eXByb3dza2lAc2Ftc3VuZy5jb20+Ow0KPiBEYXRl OiAgVHVlLCBPY3QgMjQsIDIwMTcgMDk6MzAgUE0NCj4gVG86ICAiSHVhY2FpIENoZW4iPGNo ZW5oY0BsZW1vdGUuY29tPjsgIkNocmlzdG9waCBIZWxsd2lnIjxoY2hAbHN0LmRlPjsNCj4g Q2M6ICAiUm9iaW4gTXVycGh5Ijxyb2Jpbi5tdXJwaHlAYXJtLmNvbT47ICJBbmRyZXcgTW9y dG9uIjxha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPjsgIkZ1eGluIFpoYW5nIjx6aGFuZ2Z4 QGxlbW90ZS5jb20+OyAibGludXgta2VybmVsIjxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwu b3JnPjsgIlJhbGYgQmFlY2hsZSI8cmFsZkBsaW51eC1taXBzLm9yZz47ICJKYW1lc0hvZ2Fu IjxqYW1lcy5ob2dhbkBpbWd0ZWMuY29tPjsgImxpbnV4LW1pcHMiPGxpbnV4LW1pcHNAbGlu dXgtbWlwcy5vcmc+OyAiSmFtZXMgRSAuIEogLkJvdHRvbWxleSI8amVqYkBsaW51eC52bmV0 LmlibS5jb20+OyAiTWFydGluIEsgLiBQZXRlcnNlbiI8bWFydGluLnBldGVyc2VuQG9yYWNs ZS5jb20+OyAibGludXgtc2NzaSI8bGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmc+OyAic3Rh YmxlIjxzdGFibGVAdmdlci5rZXJuZWwub3JnPjsgIk1pY2hhZWwgUyAuIFRzaXJraW4iPG1z dEByZWRoYXQuY29tPjsgIlBhd2VsIE9zY2lhayI8cGF3ZWxAb3NjaWFrLmNvbT47ICJLeXVu Z21pbiBQYXJrIjxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPjsgIk1pY2hhZWwgQ2hhbiI8 bWljaGFlbC5jaGFuQGJyb2FkY29tLmNvbT47ICJCZW5qYW1pbiBIZXJyZW5zY2htaWR0Ijxi ZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+OyAiSXZhbiBNaWtoYXlsb3YiPGl2YW5AcnUuaWJt LmNvbT47ICJUYXJpcSBUb3VrYW4iPHRhcmlxdEBtZWxsYW5veC5jb20+OyAiQW5keSBHcm9z cyI8YWdyb3NzQGNvZGVhdXJvcmEub3JnPjsgIk1hcmsgQSAuIEdyZWVyIjxtZ3JlZXJAYW5p bWFsY3JlZWsuY29tPjsgIlJvYmVydCBCYWxkeWdhIjxyLmJhbGR5Z2FAaGFja2VyaW9uLmNv bT47DQo+IFN1YmplY3Q6ICBSZTogW1BBVENIIFY5IDEvNF0gZG1hLW1hcHBpbmc6IFJld29y ayBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpDQo+DQo+ICAgDQo+IEhpIEh1YWNhaSwNCj4N Cj4gT24gMjAxNy0xMC0yMyAwOToxMiwgSHVhY2FpIENoZW4gd3JvdGU6DQo+PiBNYWtlIGRt YV9nZXRfY2FjaGVfYWxpZ25tZW50KCkgdG8gYWNjZXB0IGEgJ2RldicgYXJndW1lbnQuIEFz IGEgcmVzdWx0LA0KPj4gaXQgY2FuIHJldHVybiBkaWZmZXJlbnQgYWxpZ25tZW50cyBkdWUg dG8gZGlmZmVyZW50IGRldmljZXMnIEkvTyBjYWNoZQ0KPj4gY29oZXJlbmN5Lg0KPj4NCj4+ IEN1cnJlbnRseSwgQVJNL0FSTTY0IGFuZCBNSVBTIHN1cHBvcnQgY29oZXJlbnQgJiBub25j b2hlcmVudCBkZXZpY2VzDQo+PiBjby1leGlzdC4gVGhpcyBtYXkgYmUgZXh0ZW5kZWQgaW4g dGhlIGZ1dHVyZSwgc28gYWRkIGEgbmV3IGZ1bmN0aW9uDQo+PiBwb2ludGVyIChpLmUsIGdl dF9jYWNoZV9hbGlnbm1lbnQpIGluICdzdHJ1Y3QgZG1hX21hcF9vcHMnIGFzIGEgZ2VuZXJp Yw0KPj4gc29sdXRpb24uDQo+Pg0KPj4gQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcNCj4g SSBkb24ndCB0aGluayB0aGlzIGNoYW5nZSBzaG91bGQgZ28gdG8gc3RhYmxlLg0KPg0KPj4g Q2M6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+DQo+PiBDYzogUGF3ZWwg T3NjaWFrIDxwYXdlbEBvc2NpYWsuY29tPg0KPj4gQ2M6IE1hcmVrIFN6eXByb3dza2kgPG0u c3p5cHJvd3NraUBzYW1zdW5nLmNvbT4NCj4+IENjOiBLeXVuZ21pbiBQYXJrIDxreXVuZ21p bi5wYXJrQHNhbXN1bmcuY29tPg0KPj4gQ2M6IE1pY2hhZWwgQ2hhbiA8bWljaGFlbC5jaGFu QGJyb2FkY29tLmNvbT4NCj4+IENjOiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5oQGtl cm5lbC5jcmFzaGluZy5vcmc+DQo+PiBDYzogSXZhbiBNaWtoYXlsb3YgPGl2YW5AcnUuaWJt LmNvbT4NCj4+IENjOiBUYXJpcSBUb3VrYW4gPHRhcmlxdEBtZWxsYW5veC5jb20+DQo+PiBD YzogQW5keSBHcm9zcyA8YWdyb3NzQGNvZGVhdXJvcmEub3JnPg0KPj4gQ2M6IE1hcmsgQS4g R3JlZXIgPG1ncmVlckBhbmltYWxjcmVlay5jb20+DQo+PiBDYzogUm9iZXJ0IEJhbGR5Z2Eg PHIuYmFsZHlnYUBoYWNrZXJpb24uY29tPg0KPj4gQ2M6IE1hcmVrIFN6eXByb3dza2kgPG0u c3p5cHJvd3NraUBzYW1zdW5nLmNvbT4NCj4+IFNpZ25lZC1vZmYtYnk6IEh1YWNhaSBDaGVu IDxjaGVuaGNAbGVtb3RlLmNvbT4NCj4+IC0tLQ0KPj4gICAgZHJpdmVycy9pbmZpbmliYW5k L2h3L210aGNhL210aGNhX21haW4uYyAgICAgICB8ICAgMiArLQ0KPj4gICAgZHJpdmVycy9t ZWRpYS92NGwyLWNvcmUvdmlkZW9idWYyLWRtYS1jb250aWcuYyB8ICAgMiArLQ0KPj4gICAg ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMgICAgICAgICAgICB8ICAgOCAr LQ0KPj4gICAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jICAgICAgICAg ICB8ICAzMiArKystLQ0KPj4gICAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29y ZS5oICAgICAgICAgICB8ICAxNCArLQ0KPj4gICAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVs bGFub3gvbWx4NC9tYWluLmMgICAgICB8ICAgMiArLQ0KPj4gICAgZHJpdmVycy9zcGkvc3Bp LXF1cC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQ0KPj4gICAgZHJpdmVy cy90dHkvc2VyaWFsL21wc2MuYyAgICAgICAgICAgICAgICAgICAgICB8IDE3OSArKysrKysr KysrKysrLS0tLS0tLS0tLS0tDQo+PiAgICBkcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5j ICAgICAgICAgICAgICAgICAgIHwgIDE0ICstDQo+PiAgICBpbmNsdWRlL2xpbnV4L2RtYS1t YXBwaW5nLmggICAgICAgICAgICAgICAgICAgIHwgIDE3ICsrLQ0KPiBGb3IgdmlkZW9idWYy LWRtYS1jb250aWcsIHNlcmlhbC9zYW1zdW5nIGFuZCBkbWEtbWFwcGluZy5oOg0KPg0KPiBB Y2tlZC1ieTogTWFyZWsgU3p5cHJvd3NraSA8bS5zenlwcm93c2tpQHNhbXN1bmcuY29tPg0K Pg0KPg0KPj4gICAgMTAgZmlsZXMgY2hhbmdlZCwgMTUwIGluc2VydGlvbnMoKyksIDEyNCBk ZWxldGlvbnMoLSkNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3 L210aGNhL210aGNhX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhj YV9tYWluLmMNCj4+IGluZGV4IGUzNmE5YmMuLjA3OGZlOGQgMTAwNjQ0DQo+PiAtLS0gYS9k cml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jDQo+PiArKysgYi9kcml2 ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jDQo+PiBAQCAtNDE2LDcgKzQx Niw3IEBAIHN0YXRpYyBpbnQgbXRoY2FfaW5pdF9pY20oc3RydWN0IG10aGNhX2RldiAqbWRl diwNCj4+ICAgIA0KPj4gICAgCS8qIENQVSB3cml0ZXMgdG8gbm9uLXJlc2VydmVkIE1UVHMs IHdoaWxlIEhDQSBtaWdodCBETUEgdG8gcmVzZXJ2ZWQgbXR0cyAqLw0KPj4gICAgCW1kZXYt PmxpbWl0cy5yZXNlcnZlZF9tdHRzID0gQUxJR04obWRldi0+bGltaXRzLnJlc2VydmVkX210 dHMgKiBtZGV2LT5saW1pdHMubXR0X3NlZ19zaXplLA0KPj4gLQkJCQkJICAgZG1hX2dldF9j YWNoZV9hbGlnbm1lbnQoKSkgLyBtZGV2LT5saW1pdHMubXR0X3NlZ19zaXplOw0KPj4gKwkJ CQkJICAgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoJm1kZXYtPnBkZXYtPmRldikpIC8gbWRl di0+bGltaXRzLm10dF9zZWdfc2l6ZTsNCj4+ICAgIA0KPj4gICAgCW1kZXYtPm1yX3RhYmxl Lm10dF90YWJsZSA9IG10aGNhX2FsbG9jX2ljbV90YWJsZShtZGV2LCBpbml0X2hjYS0+bXR0 X2Jhc2UsDQo+PiAgICAJCQkJCQkJIG1kZXYtPmxpbWl0cy5tdHRfc2VnX3NpemUsDQo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdmlkZW9idWYyLWRtYS1jb250 aWcuYyBiL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1kbWEtY29udGlnLmMN Cj4+IGluZGV4IDlmMzg5ZjMuLjFmNmE5YjcgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL21l ZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItZG1hLWNvbnRpZy5jDQo+PiArKysgYi9kcml2ZXJz L21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItZG1hLWNvbnRpZy5jDQo+PiBAQCAtNDg0LDcg KzQ4NCw3IEBAIHN0YXRpYyB2b2lkICp2YjJfZGNfZ2V0X3VzZXJwdHIoc3RydWN0IGRldmlj ZSAqZGV2LCB1bnNpZ25lZCBsb25nIHZhZGRyLA0KPj4gICAgCWludCByZXQgPSAwOw0KPj4g ICAgCXN0cnVjdCBzZ190YWJsZSAqc2d0Ow0KPj4gICAgCXVuc2lnbmVkIGxvbmcgY29udGln X3NpemU7DQo+PiAtCXVuc2lnbmVkIGxvbmcgZG1hX2FsaWduID0gZG1hX2dldF9jYWNoZV9h bGlnbm1lbnQoKTsNCj4+ICsJdW5zaWduZWQgbG9uZyBkbWFfYWxpZ24gPSBkbWFfZ2V0X2Nh Y2hlX2FsaWdubWVudChkZXYpOw0KPj4gICAgDQo+PiAgICAJLyogT25seSBjYWNoZSBhbGln bmVkIERNQSB0cmFuc2ZlcnMgYXJlIHJlbGlhYmxlICovDQo+PiAgICAJaWYgKCFJU19BTElH TkVEKHZhZGRyIHwgc2l6ZSwgZG1hX2FsaWduKSkgew0KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQv YnJvYWRjb20vYjQ0LmMNCj4+IGluZGV4IGExMTI1ZDEuLjJmNmZmZTUgMTAwNjQ0DQo+PiAt LS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYw0KPj4gKysrIGIvZHJp dmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMNCj4+IEBAIC0yMzQ0LDYgKzIzNDQs MTAgQEAgc3RhdGljIGludCBiNDRfaW5pdF9vbmUoc3RydWN0IHNzYl9kZXZpY2UgKnNkZXYs DQo+PiAgICAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsNCj4+ICAgIAlzdHJ1Y3QgYjQ0ICpi cDsNCj4+ICAgIAlpbnQgZXJyOw0KPj4gKwl1bnNpZ25lZCBpbnQgZG1hX2Rlc2NfYWxpZ25f c2l6ZSA9IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHNkZXYtPmRtYV9kZXYpOw0KPj4gKw0K Pj4gKwkvKiBTZXR1cCBwYXJhbWF0ZXJzIGZvciBzeW5jaW5nIFJYL1RYIERNQSBkZXNjcmlw dG9ycyAqLw0KPj4gKwlkbWFfZGVzY19zeW5jX3NpemUgPSBtYXhfdCh1bnNpZ25lZCBpbnQs IGRtYV9kZXNjX2FsaWduX3NpemUsIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpKTsNCj4+ICAg IA0KPj4gICAgCWluc3RhbmNlKys7DQo+PiAgICANCj4+IEBAIC0yNTg3LDEyICsyNTkxLDgg QEAgc3RhdGljIGlubGluZSB2b2lkIGI0NF9wY2lfZXhpdCh2b2lkKQ0KPj4gICAgDQo+PiAg ICBzdGF0aWMgaW50IF9faW5pdCBiNDRfaW5pdCh2b2lkKQ0KPj4gICAgew0KPj4gLQl1bnNp Z25lZCBpbnQgZG1hX2Rlc2NfYWxpZ25fc2l6ZSA9IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50 KCk7DQo+PiAgICAJaW50IGVycjsNCj4+ICAgIA0KPj4gLQkvKiBTZXR1cCBwYXJhbWF0ZXJz IGZvciBzeW5jaW5nIFJYL1RYIERNQSBkZXNjcmlwdG9ycyAqLw0KPj4gLQlkbWFfZGVzY19z eW5jX3NpemUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGRtYV9kZXNjX2FsaWduX3NpemUsIHNp emVvZihzdHJ1Y3QgZG1hX2Rlc2MpKTsNCj4+IC0NCj4+ICAgIAllcnIgPSBiNDRfcGNpX2lu aXQoKTsNCj4+ICAgIAlpZiAoZXJyKQ0KPj4gICAgCQlyZXR1cm4gZXJyOw0KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYyBiL2RyaXZlcnMv bmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYw0KPj4gaW5kZXggN2ZlZmYyNC4uOGRjZWJi MiAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUu Yw0KPj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jDQo+PiBA QCAtMTAzMCw4ICsxMDMwLDkgQEAgc3RhdGljIGludCBlbWFjX3NldF9tYWNfYWRkcmVzcyhz dHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqc2EpDQo+PiAgICANCj4+ICAgIHN0YXRp YyBpbnQgZW1hY19yZXNpemVfcnhfcmluZyhzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2LCBp bnQgbmV3X210dSkNCj4+ICAgIHsNCj4+IC0JaW50IHJ4X3N5bmNfc2l6ZSA9IGVtYWNfcnhf c3luY19zaXplKG5ld19tdHUpOw0KPj4gLQlpbnQgcnhfc2tiX3NpemUgPSBlbWFjX3J4X3Nr Yl9zaXplKG5ld19tdHUpOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gJmRldi0+ b2ZkZXYtPmRldjsNCj4+ICsJaW50IHJ4X3NrYl9zaXplID0gZW1hY19yeF9za2Jfc2l6ZShk bWFfZGV2LCBuZXdfbXR1KTsNCj4+ICsJaW50IHJ4X3N5bmNfc2l6ZSA9IGVtYWNfcnhfc3lu Y19zaXplKGRtYV9kZXYsIG5ld19tdHUpOw0KPj4gICAgCWludCBpLCByZXQgPSAwOw0KPj4g ICAgCWludCBtcjFfanVtYm9fYml0X2NoYW5nZSA9IDA7DQo+PiAgICANCj4+IEBAIC0xMDc0 LDcgKzEwNzUsNyBAQCBzdGF0aWMgaW50IGVtYWNfcmVzaXplX3J4X3Jpbmcoc3RydWN0IGVt YWNfaW5zdGFuY2UgKmRldiwgaW50IG5ld19tdHUpDQo+PiAgICAJCUJVR19PTighZGV2LT5y eF9za2JbaV0pOw0KPj4gICAgCQlkZXZfa2ZyZWVfc2tiKGRldi0+cnhfc2tiW2ldKTsNCj4+ ICAgIA0KPj4gLQkJc2tiX3Jlc2VydmUoc2tiLCBFTUFDX1JYX1NLQl9IRUFEUk9PTSArIDIp Ow0KPj4gKwkJc2tiX3Jlc2VydmUoc2tiLCBFTUFDX1JYX1NLQl9IRUFEUk9PTShkbWFfZGV2 KSArIDIpOw0KPj4gICAgCQlkZXYtPnJ4X2Rlc2NbaV0uZGF0YV9wdHIgPQ0KPj4gICAgCQkg ICAgZG1hX21hcF9zaW5nbGUoJmRldi0+b2ZkZXYtPmRldiwgc2tiLT5kYXRhIC0gMiwgcnhf c3luY19zaXplLA0KPj4gICAgCQkJCSAgIERNQV9GUk9NX0RFVklDRSkgKyAyOw0KPj4gQEAg LTExMTUsMjAgKzExMTYsMjEgQEAgc3RhdGljIGludCBlbWFjX3Jlc2l6ZV9yeF9yaW5nKHN0 cnVjdCBlbWFjX2luc3RhbmNlICpkZXYsIGludCBuZXdfbXR1KQ0KPj4gICAgc3RhdGljIGlu dCBlbWFjX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBuZXdfbXR1 KQ0KPj4gICAgew0KPj4gICAgCXN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYgPSBuZXRkZXZf cHJpdihuZGV2KTsNCj4+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9ICZkZXYtPm9mZGV2 LT5kZXY7DQo+PiAgICAJaW50IHJldCA9IDA7DQo+PiAgICANCj4+ICAgIAlEQkcoZGV2LCAi Y2hhbmdlX210dSglZCkiIE5MLCBuZXdfbXR1KTsNCj4+ICAgIA0KPj4gICAgCWlmIChuZXRp Zl9ydW5uaW5nKG5kZXYpKSB7DQo+PiAgICAJCS8qIENoZWNrIGlmIHdlIHJlYWxseSBuZWVk IHRvIHJlaW5pdGlhbGl6ZSBSWCByaW5nICovDQo+PiAtCQlpZiAoZW1hY19yeF9za2Jfc2l6 ZShuZGV2LT5tdHUpICE9IGVtYWNfcnhfc2tiX3NpemUobmV3X210dSkpDQo+PiArCQlpZiAo ZW1hY19yeF9za2Jfc2l6ZShkbWFfZGV2LCBuZGV2LT5tdHUpICE9IGVtYWNfcnhfc2tiX3Np emUoZG1hX2RldiwgbmV3X210dSkpDQo+PiAgICAJCQlyZXQgPSBlbWFjX3Jlc2l6ZV9yeF9y aW5nKGRldiwgbmV3X210dSk7DQo+PiAgICAJfQ0KPj4gICAgDQo+PiAgICAJaWYgKCFyZXQp IHsNCj4+ICAgIAkJbmRldi0+bXR1ID0gbmV3X210dTsNCj4+IC0JCWRldi0+cnhfc2tiX3Np emUgPSBlbWFjX3J4X3NrYl9zaXplKG5ld19tdHUpOw0KPj4gLQkJZGV2LT5yeF9zeW5jX3Np emUgPSBlbWFjX3J4X3N5bmNfc2l6ZShuZXdfbXR1KTsNCj4+ICsJCWRldi0+cnhfc2tiX3Np emUgPSBlbWFjX3J4X3NrYl9zaXplKGRtYV9kZXYsIG5ld19tdHUpOw0KPj4gKwkJZGV2LT5y eF9zeW5jX3NpemUgPSBlbWFjX3J4X3N5bmNfc2l6ZShkbWFfZGV2LCBuZXdfbXR1KTsNCj4+ ICAgIAl9DQo+PiAgICANCj4+ICAgIAlyZXR1cm4gcmV0Ow0KPj4gQEAgLTExNzEsNiArMTE3 Myw3IEBAIHN0YXRpYyB2b2lkIGVtYWNfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgZW1hY19pbnN0 YW5jZSAqZGV2KQ0KPj4gICAgc3RhdGljIGlubGluZSBpbnQgZW1hY19hbGxvY19yeF9za2Io c3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldiwgaW50IHNsb3QsDQo+PiAgICAJCQkJICAgIGdm cF90IGZsYWdzKQ0KPj4gICAgew0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gJmRl di0+b2ZkZXYtPmRldjsNCj4+ICAgIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2ti KGRldi0+cnhfc2tiX3NpemUsIGZsYWdzKTsNCj4+ICAgIAlpZiAodW5saWtlbHkoIXNrYikp DQo+PiAgICAJCXJldHVybiAtRU5PTUVNOw0KPj4gQEAgLTExNzgsNyArMTE4MSw3IEBAIHN0 YXRpYyBpbmxpbmUgaW50IGVtYWNfYWxsb2Nfcnhfc2tiKHN0cnVjdCBlbWFjX2luc3RhbmNl ICpkZXYsIGludCBzbG90LA0KPj4gICAgCWRldi0+cnhfc2tiW3Nsb3RdID0gc2tiOw0KPj4g ICAgCWRldi0+cnhfZGVzY1tzbG90XS5kYXRhX2xlbiA9IDA7DQo+PiAgICANCj4+IC0Jc2ti X3Jlc2VydmUoc2tiLCBFTUFDX1JYX1NLQl9IRUFEUk9PTSArIDIpOw0KPj4gKwlza2JfcmVz ZXJ2ZShza2IsIEVNQUNfUlhfU0tCX0hFQURST09NKGRtYV9kZXYpICsgMik7DQo+PiAgICAJ ZGV2LT5yeF9kZXNjW3Nsb3RdLmRhdGFfcHRyID0NCj4+ICAgIAkgICAgZG1hX21hcF9zaW5n bGUoJmRldi0+b2ZkZXYtPmRldiwgc2tiLT5kYXRhIC0gMiwgZGV2LT5yeF9zeW5jX3NpemUs DQo+PiAgICAJCQkgICBETUFfRlJPTV9ERVZJQ0UpICsgMjsNCj4+IEBAIC0xNjQ5LDEyICsx NjUyLDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbWFjX3JlY3ljbGVfcnhfc2tiKHN0cnVj dCBlbWFjX2luc3RhbmNlICpkZXYsIGludCBzbG90LA0KPj4gICAgCQkJCSAgICAgICBpbnQg bGVuKQ0KPj4gICAgew0KPj4gICAgCXN0cnVjdCBza19idWZmICpza2IgPSBkZXYtPnJ4X3Nr YltzbG90XTsNCj4+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9ICZkZXYtPm9mZGV2LT5k ZXY7DQo+PiAgICANCj4+ICAgIAlEQkcyKGRldiwgInJlY3ljbGUgJWQgJWQiIE5MLCBzbG90 LCBsZW4pOw0KPj4gICAgDQo+PiAgICAJaWYgKGxlbikNCj4+IC0JCWRtYV9tYXBfc2luZ2xl KCZkZXYtPm9mZGV2LT5kZXYsIHNrYi0+ZGF0YSAtIDIsDQo+PiAtCQkJICAgICAgIEVNQUNf RE1BX0FMSUdOKGxlbiArIDIpLCBETUFfRlJPTV9ERVZJQ0UpOw0KPj4gKwkJZG1hX21hcF9z aW5nbGUoZG1hX2Rldiwgc2tiLT5kYXRhIC0gMiwNCj4+ICsJCQkgICAgICAgRU1BQ19ETUFf QUxJR04oZG1hX2RldiwgbGVuICsgMiksIERNQV9GUk9NX0RFVklDRSk7DQo+PiAgICANCj4+ ICAgIAlkZXYtPnJ4X2Rlc2Nbc2xvdF0uZGF0YV9sZW4gPSAwOw0KPj4gICAgCXdtYigpOw0K Pj4gQEAgLTE3MjcsNiArMTczMSw3IEBAIHN0YXRpYyBpbnQgZW1hY19wb2xsX3J4KHZvaWQg KnBhcmFtLCBpbnQgYnVkZ2V0KQ0KPj4gICAgew0KPj4gICAgCXN0cnVjdCBlbWFjX2luc3Rh bmNlICpkZXYgPSBwYXJhbTsNCj4+ICAgIAlpbnQgc2xvdCA9IGRldi0+cnhfc2xvdCwgcmVj ZWl2ZWQgPSAwOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gJmRldi0+b2ZkZXYt PmRldjsNCj4+ICAgIA0KPj4gICAgCURCRzIoZGV2LCAicG9sbF9yeCglZCkiIE5MLCBidWRn ZXQpOw0KPj4gICAgDQo+PiBAQCAtMTc2MywxMSArMTc2OCwxMSBAQCBzdGF0aWMgaW50IGVt YWNfcG9sbF9yeCh2b2lkICpwYXJhbSwgaW50IGJ1ZGdldCkNCj4+ICAgIA0KPj4gICAgCQlp ZiAobGVuICYmIGxlbiA8IEVNQUNfUlhfQ09QWV9USFJFU0gpIHsNCj4+ICAgIAkJCXN0cnVj dCBza19idWZmICpjb3B5X3NrYiA9DQo+PiAtCQkJICAgIGFsbG9jX3NrYihsZW4gKyBFTUFD X1JYX1NLQl9IRUFEUk9PTSArIDIsIEdGUF9BVE9NSUMpOw0KPj4gKwkJCSAgICBhbGxvY19z a2IobGVuICsgRU1BQ19SWF9TS0JfSEVBRFJPT00oZG1hX2RldikgKyAyLCBHRlBfQVRPTUlD KTsNCj4+ICAgIAkJCWlmICh1bmxpa2VseSghY29weV9za2IpKQ0KPj4gICAgCQkJCWdvdG8g b29tOw0KPj4gICAgDQo+PiAtCQkJc2tiX3Jlc2VydmUoY29weV9za2IsIEVNQUNfUlhfU0tC X0hFQURST09NICsgMik7DQo+PiArCQkJc2tiX3Jlc2VydmUoY29weV9za2IsIEVNQUNfUlhf U0tCX0hFQURST09NKGRtYV9kZXYpICsgMik7DQo+PiAgICAJCQltZW1jcHkoY29weV9za2It PmRhdGEgLSAyLCBza2ItPmRhdGEgLSAyLCBsZW4gKyAyKTsNCj4+ICAgIAkJCWVtYWNfcmVj eWNsZV9yeF9za2IoZGV2LCBzbG90LCBsZW4pOw0KPj4gICAgCQkJc2tiID0gY29weV9za2I7 DQo+PiBAQCAtMjk5OCw2ICszMDAzLDcgQEAgc3RhdGljIGludCBlbWFjX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQ0KPj4gICAgCXN0cnVjdCBlbWFjX2luc3RhbmNl ICpkZXY7DQo+PiAgICAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5kZXYub2Zf bm9kZTsNCj4+ICAgIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKipibGlzdCA9IE5VTEw7DQo+PiAr CXN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSAmb2ZkZXYtPmRldjsNCj4+ICAgIAlpbnQgZXJy LCBpOw0KPj4gICAgDQo+PiAgICAJLyogU2tpcCB1bnVzZWQvdW53aXJlZCBFTUFDUy4gIFdl IGxlYXZlIHRoZSBjaGVjayBmb3IgYW4gdW51c2VkDQo+PiBAQCAtMzA3Nyw4ICszMDgzLDgg QEAgc3RhdGljIGludCBlbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2 KQ0KPj4gICAgCQkgICAgICAgbnAsIGRldi0+bWFsX2Rldi0+ZGV2Lm9mX25vZGUpOw0KPj4g ICAgCQlnb3RvIGVycl9yZWxfZGVwczsNCj4+ICAgIAl9DQo+PiAtCWRldi0+cnhfc2tiX3Np emUgPSBlbWFjX3J4X3NrYl9zaXplKG5kZXYtPm10dSk7DQo+PiAtCWRldi0+cnhfc3luY19z aXplID0gZW1hY19yeF9zeW5jX3NpemUobmRldi0+bXR1KTsNCj4+ICsJZGV2LT5yeF9za2Jf c2l6ZSA9IGVtYWNfcnhfc2tiX3NpemUoZG1hX2RldiwgbmRldi0+bXR1KTsNCj4+ICsJZGV2 LT5yeF9zeW5jX3NpemUgPSBlbWFjX3J4X3N5bmNfc2l6ZShkbWFfZGV2LCBuZGV2LT5tdHUp Ow0KPj4gICAgDQo+PiAgICAJLyogR2V0IHBvaW50ZXJzIHRvIEJEIHJpbmdzICovDQo+PiAg ICAJZGV2LT50eF9kZXNjID0NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5l dC9pYm0vZW1hYy9jb3JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3Jl LmgNCj4+IGluZGV4IDM2OWRlMmMuLjgxMDdjMzIgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJz L25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmgNCj4+ICsrKyBiL2RyaXZlcnMvbmV0L2V0 aGVybmV0L2libS9lbWFjL2NvcmUuaA0KPj4gQEAgLTY4LDIyICs2OCwyMiBAQCBzdGF0aWMg aW5saW5lIGludCBlbWFjX3J4X3NpemUoaW50IG10dSkNCj4+ICAgIAkJcmV0dXJuIG1hbF9y eF9zaXplKEVUSF9EQVRBX0xFTiArIEVNQUNfTVRVX09WRVJIRUFEKTsNCj4+ICAgIH0NCj4+ ICAgIA0KPj4gLSNkZWZpbmUgRU1BQ19ETUFfQUxJR04oeCkJCUFMSUdOKCh4KSwgZG1hX2dl dF9jYWNoZV9hbGlnbm1lbnQoKSkNCj4+ICsjZGVmaW5lIEVNQUNfRE1BX0FMSUdOKGQsIHgp CQlBTElHTigoeCksIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KGQpKQ0KPj4gICAgDQo+PiAt I2RlZmluZSBFTUFDX1JYX1NLQl9IRUFEUk9PTQkJXA0KPj4gLQlFTUFDX0RNQV9BTElHTihD T05GSUdfSUJNX0VNQUNfUlhfU0tCX0hFQURST09NKQ0KPj4gKyNkZWZpbmUgRU1BQ19SWF9T S0JfSEVBRFJPT00oZCkJCVwNCj4+ICsJRU1BQ19ETUFfQUxJR04oZCwgQ09ORklHX0lCTV9F TUFDX1JYX1NLQl9IRUFEUk9PTSkNCj4+ICAgIA0KPj4gICAgLyogU2l6ZSBvZiBSWCBza2Ig Zm9yIHRoZSBnaXZlbiBNVFUgKi8NCj4+IC1zdGF0aWMgaW5saW5lIGludCBlbWFjX3J4X3Nr Yl9zaXplKGludCBtdHUpDQo+PiArc3RhdGljIGlubGluZSBpbnQgZW1hY19yeF9za2Jfc2l6 ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtdHUpDQo+PiAgICB7DQo+PiAgICAJaW50IHNp emUgPSBtYXgobXR1ICsgRU1BQ19NVFVfT1ZFUkhFQUQsIGVtYWNfcnhfc2l6ZShtdHUpKTsN Cj4+IC0JcmV0dXJuIEVNQUNfRE1BX0FMSUdOKHNpemUgKyAyKSArIEVNQUNfUlhfU0tCX0hF QURST09NOw0KPj4gKwlyZXR1cm4gRU1BQ19ETUFfQUxJR04oZGV2LCBzaXplICsgMikgKyBF TUFDX1JYX1NLQl9IRUFEUk9PTTsNCj4+ICAgIH0NCj4+ICAgIA0KPj4gICAgLyogUlggRE1B IHN5bmMgc2l6ZSAqLw0KPj4gLXN0YXRpYyBpbmxpbmUgaW50IGVtYWNfcnhfc3luY19zaXpl KGludCBtdHUpDQo+PiArc3RhdGljIGlubGluZSBpbnQgZW1hY19yeF9zeW5jX3NpemUoc3Ry dWN0IGRldmljZSAqZGV2LCBpbnQgbXR1KQ0KPj4gICAgew0KPj4gLQlyZXR1cm4gRU1BQ19E TUFfQUxJR04oZW1hY19yeF9zaXplKG10dSkgKyAyKTsNCj4+ICsJcmV0dXJuIEVNQUNfRE1B X0FMSUdOKGRldiwgZW1hY19yeF9zaXplKG10dSkgKyAyKTsNCj4+ICAgIH0NCj4+ICAgIA0K Pj4gICAgLyogRHJpdmVyIHN0YXRpc3RjcyBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0cyB0byBt YWtlIGl0IG1vcmUgY2FjaGUgZnJpZW5kbHk6DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5l dC9tZWxsYW5veC9tbHg0L21haW4uYw0KPj4gaW5kZXggZTYxYzk5ZS4uYmMxNDZkZCAxMDA2 NDQNCj4+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5j DQo+PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYw0K Pj4gQEAgLTE2NjAsNyArMTY2MCw3IEBAIHN0YXRpYyBpbnQgbWx4NF9pbml0X2ljbShzdHJ1 Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfZGV2X2NhcCAqZGV2X2NhcCwNCj4+ICAg IAkgKi8NCj4+ICAgIAlkZXYtPmNhcHMucmVzZXJ2ZWRfbXR0cyA9DQo+PiAgICAJCUFMSUdO KGRldi0+Y2Fwcy5yZXNlcnZlZF9tdHRzICogZGV2LT5jYXBzLm10dF9lbnRyeV9zeiwNCj4+ IC0JCSAgICAgIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkpIC8gZGV2LT5jYXBzLm10dF9l bnRyeV9zejsNCj4+ICsJCSAgICAgIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCZkZXYtPnBl cnNpc3QtPnBkZXYtPmRldikpIC8gZGV2LT5jYXBzLm10dF9lbnRyeV9zejsNCj4+ICAgIA0K Pj4gICAgCWVyciA9IG1seDRfaW5pdF9pY21fdGFibGUoZGV2LCAmcHJpdi0+bXJfdGFibGUu bXR0X3RhYmxlLA0KPj4gICAgCQkJCSAgaW5pdF9oY2EtPm10dF9iYXNlLA0KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1xdXAuYyBiL2RyaXZlcnMvc3BpL3NwaS1xdXAuYw0K Pj4gaW5kZXggOTc0YThjZS4uZTZkYTY2ZSAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvc3Bp L3NwaS1xdXAuYw0KPj4gKysrIGIvZHJpdmVycy9zcGkvc3BpLXF1cC5jDQo+PiBAQCAtODYy LDcgKzg2Miw3IEBAIHN0YXRpYyBib29sIHNwaV9xdXBfY2FuX2RtYShzdHJ1Y3Qgc3BpX21h c3RlciAqbWFzdGVyLCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLA0KPj4gICAgCQkJICAgIHN0 cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIpDQo+PiAgICB7DQo+PiAgICAJc3RydWN0IHNwaV9x dXAgKnF1cCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsNCj4+IC0Jc2l6ZV90 IGRtYV9hbGlnbiA9IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCk7DQo+PiArCXNpemVfdCBk bWFfYWxpZ24gPSBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudChxdXAtPmRldik7DQo+PiAgICAJ aW50IG5fd29yZHM7DQo+PiAgICANCj4+ICAgIAlpZiAoeGZlci0+cnhfYnVmKSB7DQo+PiBA QCAtMTAzOCw3ICsxMDM4LDcgQEAgc3RhdGljIGludCBzcGlfcXVwX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+PiAgICAJbWFzdGVyLT50cmFuc2Zlcl9vbmUgPSBz cGlfcXVwX3RyYW5zZmVyX29uZTsNCj4+ICAgIAltYXN0ZXItPmRldi5vZl9ub2RlID0gcGRl di0+ZGV2Lm9mX25vZGU7DQo+PiAgICAJbWFzdGVyLT5hdXRvX3J1bnRpbWVfcG0gPSB0cnVl Ow0KPj4gLQltYXN0ZXItPmRtYV9hbGlnbm1lbnQgPSBkbWFfZ2V0X2NhY2hlX2FsaWdubWVu dCgpOw0KPj4gKwltYXN0ZXItPmRtYV9hbGlnbm1lbnQgPSBkbWFfZ2V0X2NhY2hlX2FsaWdu bWVudChkZXYpOw0KPj4gICAgCW1hc3Rlci0+bWF4X2RtYV9sZW4gPSBTUElfTUFYX1hGRVI7 DQo+PiAgICANCj4+ICAgIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYXN0ZXIpOw0K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tcHNjLmMgYi9kcml2ZXJzL3R0 eS9zZXJpYWwvbXBzYy5jDQo+PiBpbmRleCA2N2ZmZWNjLi44YjVkMGRlIDEwMDY0NA0KPj4g LS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL21wc2MuYw0KPj4gKysrIGIvZHJpdmVycy90dHkv c2VyaWFsL21wc2MuYw0KPj4gQEAgLTgxLDE5ICs4MSwxOSBAQA0KPj4gICAgICogTnVtYmVy IG9mIFR4ICYgUnggZGVzY3JpcHRvcnMgbXVzdCBiZSBwb3dlcnMgb2YgMi4NCj4+ICAgICAq Lw0KPj4gICAgI2RlZmluZQlNUFNDX1JYUl9FTlRSSUVTCTMyDQo+PiAtI2RlZmluZQlNUFND X1JYUkVfU0laRQkJZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKQ0KPj4gLSNkZWZpbmUJTVBT Q19SWFJfU0laRQkJKE1QU0NfUlhSX0VOVFJJRVMgKiBNUFNDX1JYUkVfU0laRSkNCj4+IC0j ZGVmaW5lCU1QU0NfUlhCRV9TSVpFCQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpDQo+PiAt I2RlZmluZQlNUFNDX1JYQl9TSVpFCQkoTVBTQ19SWFJfRU5UUklFUyAqIE1QU0NfUlhCRV9T SVpFKQ0KPj4gKyNkZWZpbmUJTVBTQ19SWFJFX1NJWkUoZCkJZG1hX2dldF9jYWNoZV9hbGln bm1lbnQoZCkNCj4+ICsjZGVmaW5lCU1QU0NfUlhSX1NJWkUoZCkJKE1QU0NfUlhSX0VOVFJJ RVMgKiBNUFNDX1JYUkVfU0laRShkKSkNCj4+ICsjZGVmaW5lCU1QU0NfUlhCRV9TSVpFKGQp CWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KGQpDQo+PiArI2RlZmluZQlNUFNDX1JYQl9TSVpF KGQpCShNUFNDX1JYUl9FTlRSSUVTICogTVBTQ19SWEJFX1NJWkUoZCkpDQo+PiAgICANCj4+ ICAgICNkZWZpbmUJTVBTQ19UWFJfRU5UUklFUwkzMg0KPj4gLSNkZWZpbmUJTVBTQ19UWFJF X1NJWkUJCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkNCj4+IC0jZGVmaW5lCU1QU0NfVFhS X1NJWkUJCShNUFNDX1RYUl9FTlRSSUVTICogTVBTQ19UWFJFX1NJWkUpDQo+PiAtI2RlZmlu ZQlNUFNDX1RYQkVfU0laRQkJZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKQ0KPj4gLSNkZWZp bmUJTVBTQ19UWEJfU0laRQkJKE1QU0NfVFhSX0VOVFJJRVMgKiBNUFNDX1RYQkVfU0laRSkN Cj4+ICsjZGVmaW5lCU1QU0NfVFhSRV9TSVpFKGQpCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50 KGQpDQo+PiArI2RlZmluZQlNUFNDX1RYUl9TSVpFKGQpCShNUFNDX1RYUl9FTlRSSUVTICog TVBTQ19UWFJFX1NJWkUoZCkpDQo+PiArI2RlZmluZQlNUFNDX1RYQkVfU0laRShkKQlkbWFf Z2V0X2NhY2hlX2FsaWdubWVudChkKQ0KPj4gKyNkZWZpbmUJTVBTQ19UWEJfU0laRShkKQko TVBTQ19UWFJfRU5UUklFUyAqIE1QU0NfVFhCRV9TSVpFKGQpKQ0KPj4gICAgDQo+PiAtI2Rl ZmluZQlNUFNDX0RNQV9BTExPQ19TSVpFCShNUFNDX1JYUl9TSVpFICsgTVBTQ19SWEJfU0la RSArIE1QU0NfVFhSX1NJWkUgXA0KPj4gLQkJKyBNUFNDX1RYQl9TSVpFICsgZG1hX2dldF9j YWNoZV9hbGlnbm1lbnQoKSAvKiBmb3IgYWxpZ25tZW50ICovKQ0KPj4gKyNkZWZpbmUJTVBT Q19ETUFfQUxMT0NfU0laRShkKQkoTVBTQ19SWFJfU0laRShkKSArIE1QU0NfUlhCX1NJWkUo ZCkgKyBNUFNDX1RYUl9TSVpFKGQpIFwNCj4+ICsJCSsgTVBTQ19UWEJfU0laRShkKSArIGRt YV9nZXRfY2FjaGVfYWxpZ25tZW50KGQpIC8qIGZvciBhbGlnbm1lbnQgKi8pDQo+PiAgICAN Cj4+ICAgIC8qIFJ4IGFuZCBUeCBSaW5nIGVudHJ5IGRlc2NyaXB0b3JzIC0tIGFzc3VtZSBl bnRyeSBzaXplIGlzIDw9IGNhY2hlbGluZSBzaXplICovDQo+PiAgICBzdHJ1Y3QgbXBzY19y eF9kZXNjIHsNCj4+IEBAIC01MjAsMjIgKzUyMCwyMyBAQCBzdGF0aWMgdWludCBtcHNjX3Nk bWFfdHhfYWN0aXZlKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpDQo+PiAgICBzdGF0aWMg dm9pZCBtcHNjX3NkbWFfc3RhcnRfdHgoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4+ ICAgIHsNCj4+ICAgIAlzdHJ1Y3QgbXBzY190eF9kZXNjICp0eHJlLCAqdHhyZV9wOw0KPj4g KwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBvcnQuZGV2Ow0KPj4gICAgDQo+PiAg ICAJLyogSWYgdHggaXNuJ3QgcnVubmluZyAmIHRoZXJlJ3MgYSBkZXNjIHJlYWR5IHRvIGdv LCBzdGFydCBpdCAqLw0KPj4gICAgCWlmICghbXBzY19zZG1hX3R4X2FjdGl2ZShwaSkpIHsN Cj4+ICAgIAkJdHhyZSA9IChzdHJ1Y3QgbXBzY190eF9kZXNjICopKHBpLT50eHINCj4+IC0J CQkJKyAocGktPnR4cl90YWlsICogTVBTQ19UWFJFX1NJWkUpKTsNCj4+IC0JCWRtYV9jYWNo ZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKil0eHJlLCBNUFNDX1RYUkVfU0laRSwNCj4+ ICsJCQkJKyAocGktPnR4cl90YWlsICogTVBTQ19UWFJFX1NJWkUoZG1hX2RldikpKTsNCj4+ ICsJCWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKil0eHJlLCBNUFNDX1RY UkVfU0laRShkbWFfZGV2KSwNCj4+ICAgIAkJCQlETUFfRlJPTV9ERVZJQ0UpOw0KPj4gICAg I2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVS RU5UX0NBQ0hFKQ0KPj4gICAgCQlpZiAocGktPmNhY2hlX21nbXQpIC8qIEdUNjQyWzQ2XTAg UmVzICNDT01NLTIgKi8NCj4+ICAgIAkJCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bG9u Zyl0eHJlLA0KPj4gLQkJCQkJKHVsb25nKXR4cmUgKyBNUFNDX1RYUkVfU0laRSk7DQo+PiAr CQkJCQkodWxvbmcpdHhyZSArIE1QU0NfVFhSRV9TSVpFKGRtYV9kZXYpKTsNCj4+ICAgICNl bmRpZg0KPj4gICAgDQo+PiAgICAJCWlmIChiZTMyX3RvX2NwdSh0eHJlLT5jbWRzdGF0KSAm IFNETUFfREVTQ19DTURTVEFUX08pIHsNCj4+ICAgIAkJCXR4cmVfcCA9IChzdHJ1Y3QgbXBz Y190eF9kZXNjICopDQo+PiAtCQkJCShwaS0+dHhyX3AgKyAocGktPnR4cl90YWlsICogTVBT Q19UWFJFX1NJWkUpKTsNCj4+ICsJCQkJKHBpLT50eHJfcCArIChwaS0+dHhyX3RhaWwgKiBN UFNDX1RYUkVfU0laRShkbWFfZGV2KSkpOw0KPj4gICAgDQo+PiAgICAJCQltcHNjX3NkbWFf c2V0X3R4X3JpbmcocGksIHR4cmVfcCk7DQo+PiAgICAJCQltcHNjX3NkbWFfY21kKHBpLCBT RE1BX1NEQ01fU1REIHwgU0RNQV9TRENNX1RYRCk7DQo+PiBAQCAtNzM4LDcgKzczOSw3IEBA IHN0YXRpYyB2b2lkIG1wc2NfaW5pdF9odyhzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0K Pj4gICAgDQo+PiAgICAJbXBzY19icmdfaW5pdChwaSwgcGktPmJyZ19jbGtfc3JjKTsNCj4+ ICAgIAltcHNjX2JyZ19lbmFibGUocGkpOw0KPj4gLQltcHNjX3NkbWFfaW5pdChwaSwgZG1h X2dldF9jYWNoZV9hbGlnbm1lbnQoKSk7CS8qIGJ1cnN0IGEgY2FjaGVsaW5lICovDQo+PiAr CW1wc2Nfc2RtYV9pbml0KHBpLCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudChwaS0+cG9ydC5k ZXYpKTsJLyogYnVyc3QgYSBjYWNoZWxpbmUgKi8NCj4+ICAgIAltcHNjX3NkbWFfc3RvcChw aSk7DQo+PiAgICAJbXBzY19od19pbml0KHBpKTsNCj4+ICAgIH0NCj4+IEBAIC03NDYsNiAr NzQ3LDcgQEAgc3RhdGljIHZvaWQgbXBzY19pbml0X2h3KHN0cnVjdCBtcHNjX3BvcnRfaW5m byAqcGkpDQo+PiAgICBzdGF0aWMgaW50IG1wc2NfYWxsb2NfcmluZ19tZW0oc3RydWN0IG1w c2NfcG9ydF9pbmZvICpwaSkNCj4+ICAgIHsNCj4+ICAgIAlpbnQgcmMgPSAwOw0KPj4gKwlz dHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBvcnQuZGV2Ow0KPj4gICAgDQo+PiAgICAJ cHJfZGVidWcoIm1wc2NfYWxsb2NfcmluZ19tZW1bJWRdOiBBbGxvY2F0aW5nIHJpbmcgbWVt XG4iLA0KPj4gICAgCQlwaS0+cG9ydC5saW5lKTsNCj4+IEBAIC03NTUsNyArNzU3LDcgQEAg c3RhdGljIGludCBtcHNjX2FsbG9jX3JpbmdfbWVtKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAq cGkpDQo+PiAgICAJCQlwcmludGsoS0VSTl9FUlIgIk1QU0M6IEluYWRlcXVhdGUgRE1BIHN1 cHBvcnRcbiIpOw0KPj4gICAgCQkJcmMgPSAtRU5YSU87DQo+PiAgICAJCX0gZWxzZSBpZiAo KHBpLT5kbWFfcmVnaW9uID0gZG1hX2FsbG9jX2F0dHJzKHBpLT5wb3J0LmRldiwNCj4+IC0J CQkJCQlNUFNDX0RNQV9BTExPQ19TSVpFLA0KPj4gKwkJCQkJCU1QU0NfRE1BX0FMTE9DX1NJ WkUoZG1hX2RldiksDQo+PiAgICAJCQkJCQkmcGktPmRtYV9yZWdpb25fcCwgR0ZQX0tFUk5F TCwNCj4+ICAgIAkJCQkJCURNQV9BVFRSX05PTl9DT05TSVNURU5UKSkNCj4+ICAgIAkJCQk9 PSBOVUxMKSB7DQo+PiBAQCAtNzY5LDEwICs3NzEsMTIgQEAgc3RhdGljIGludCBtcHNjX2Fs bG9jX3JpbmdfbWVtKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpDQo+PiAgICANCj4+ICAg IHN0YXRpYyB2b2lkIG1wc2NfZnJlZV9yaW5nX21lbShzdHJ1Y3QgbXBzY19wb3J0X2luZm8g KnBpKQ0KPj4gICAgew0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBvcnQu ZGV2Ow0KPj4gKw0KPj4gICAgCXByX2RlYnVnKCJtcHNjX2ZyZWVfcmluZ19tZW1bJWRdOiBG cmVlaW5nIHJpbmcgbWVtXG4iLCBwaS0+cG9ydC5saW5lKTsNCj4+ICAgIA0KPj4gICAgCWlm IChwaS0+ZG1hX3JlZ2lvbikgew0KPj4gLQkJZG1hX2ZyZWVfYXR0cnMocGktPnBvcnQuZGV2 LCBNUFNDX0RNQV9BTExPQ19TSVpFLA0KPj4gKwkJZG1hX2ZyZWVfYXR0cnMocGktPnBvcnQu ZGV2LCBNUFNDX0RNQV9BTExPQ19TSVpFKGRtYV9kZXYpLA0KPj4gICAgCQkJCXBpLT5kbWFf cmVnaW9uLCBwaS0+ZG1hX3JlZ2lvbl9wLA0KPj4gICAgCQkJCURNQV9BVFRSX05PTl9DT05T SVNURU5UKTsNCj4+ICAgIAkJcGktPmRtYV9yZWdpb24gPSBOVUxMOw0KPj4gQEAgLTc4NCw2 ICs3ODgsNyBAQCBzdGF0aWMgdm9pZCBtcHNjX2luaXRfcmluZ3Moc3RydWN0IG1wc2NfcG9y dF9pbmZvICpwaSkNCj4+ICAgIHsNCj4+ICAgIAlzdHJ1Y3QgbXBzY19yeF9kZXNjICpyeHJl Ow0KPj4gICAgCXN0cnVjdCBtcHNjX3R4X2Rlc2MgKnR4cmU7DQo+PiArCXN0cnVjdCBkZXZp Y2UgKmRtYV9kZXYgPSBwaS0+cG9ydC5kZXY7DQo+PiAgICAJZG1hX2FkZHJfdCBkcCwgZHBf cDsNCj4+ICAgIAl1OCAqYnAsICpicF9wOw0KPj4gICAgCWludCBpOw0KPj4gQEAgLTc5Miwx NCArNzk3LDE0IEBAIHN0YXRpYyB2b2lkIG1wc2NfaW5pdF9yaW5ncyhzdHJ1Y3QgbXBzY19w b3J0X2luZm8gKnBpKQ0KPj4gICAgDQo+PiAgICAJQlVHX09OKHBpLT5kbWFfcmVnaW9uID09 IE5VTEwpOw0KPj4gICAgDQo+PiAtCW1lbXNldChwaS0+ZG1hX3JlZ2lvbiwgMCwgTVBTQ19E TUFfQUxMT0NfU0laRSk7DQo+PiArCW1lbXNldChwaS0+ZG1hX3JlZ2lvbiwgMCwgTVBTQ19E TUFfQUxMT0NfU0laRShkbWFfZGV2KSk7DQo+PiAgICANCj4+ICAgIAkvKg0KPj4gICAgCSAq IERlc2NyaXB0b3JzICYgYnVmZmVycyBhcmUgbXVsdGlwbGVzIG9mIGNhY2hlbGluZSBzaXpl IGFuZCBtdXN0IGJlDQo+PiAgICAJICogY2FjaGVsaW5lIGFsaWduZWQuDQo+PiAgICAJICov DQo+PiAtCWRwID0gQUxJR04oKHUzMilwaS0+ZG1hX3JlZ2lvbiwgZG1hX2dldF9jYWNoZV9h bGlnbm1lbnQoKSk7DQo+PiAtCWRwX3AgPSBBTElHTigodTMyKXBpLT5kbWFfcmVnaW9uX3As IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkpOw0KPj4gKwlkcCA9IEFMSUdOKCh1MzIpcGkt PmRtYV9yZWdpb24sIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KGRtYV9kZXYpKTsNCj4+ICsJ ZHBfcCA9IEFMSUdOKCh1MzIpcGktPmRtYV9yZWdpb25fcCwgZG1hX2dldF9jYWNoZV9hbGln bm1lbnQoZG1hX2RldikpOw0KPj4gICAgDQo+PiAgICAJLyoNCj4+ICAgIAkgKiBQYXJ0aXRp b24gZG1hIHJlZ2lvbiBpbnRvIHJ4IHJpbmcgZGVzY3JpcHRvciwgcnggYnVmZmVycywNCj4+ IEBAIC04MDcsMjAgKzgxMiwyMCBAQCBzdGF0aWMgdm9pZCBtcHNjX2luaXRfcmluZ3Moc3Ry dWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4+ICAgIAkgKi8NCj4+ICAgIAlwaS0+cnhyID0g ZHA7DQo+PiAgICAJcGktPnJ4cl9wID0gZHBfcDsNCj4+IC0JZHAgKz0gTVBTQ19SWFJfU0la RTsNCj4+IC0JZHBfcCArPSBNUFNDX1JYUl9TSVpFOw0KPj4gKwlkcCArPSBNUFNDX1JYUl9T SVpFKGRtYV9kZXYpOw0KPj4gKwlkcF9wICs9IE1QU0NfUlhSX1NJWkUoZG1hX2Rldik7DQo+ PiAgICANCj4+ICAgIAlwaS0+cnhiID0gKHU4ICopZHA7DQo+PiAgICAJcGktPnJ4Yl9wID0g KHU4ICopZHBfcDsNCj4+IC0JZHAgKz0gTVBTQ19SWEJfU0laRTsNCj4+IC0JZHBfcCArPSBN UFNDX1JYQl9TSVpFOw0KPj4gKwlkcCArPSBNUFNDX1JYQl9TSVpFKGRtYV9kZXYpOw0KPj4g KwlkcF9wICs9IE1QU0NfUlhCX1NJWkUoZG1hX2Rldik7DQo+PiAgICANCj4+ICAgIAlwaS0+ cnhyX3Bvc24gPSAwOw0KPj4gICAgDQo+PiAgICAJcGktPnR4ciA9IGRwOw0KPj4gICAgCXBp LT50eHJfcCA9IGRwX3A7DQo+PiAtCWRwICs9IE1QU0NfVFhSX1NJWkU7DQo+PiAtCWRwX3Ag Kz0gTVBTQ19UWFJfU0laRTsNCj4+ICsJZHAgKz0gTVBTQ19UWFJfU0laRShkbWFfZGV2KTsN Cj4+ICsJZHBfcCArPSBNUFNDX1RYUl9TSVpFKGRtYV9kZXYpOw0KPj4gICAgDQo+PiAgICAJ cGktPnR4YiA9ICh1OCAqKWRwOw0KPj4gICAgCXBpLT50eGJfcCA9ICh1OCAqKWRwX3A7DQo+ PiBAQCAtODM3LDE4ICs4NDIsMTggQEAgc3RhdGljIHZvaWQgbXBzY19pbml0X3JpbmdzKHN0 cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpDQo+PiAgICAJZm9yIChpID0gMDsgaSA8IE1QU0Nf UlhSX0VOVFJJRVM7IGkrKykgew0KPj4gICAgCQlyeHJlID0gKHN0cnVjdCBtcHNjX3J4X2Rl c2MgKilkcDsNCj4+ICAgIA0KPj4gLQkJcnhyZS0+YnVmc2l6ZSA9IGNwdV90b19iZTE2KE1Q U0NfUlhCRV9TSVpFKTsNCj4+ICsJCXJ4cmUtPmJ1ZnNpemUgPSBjcHVfdG9fYmUxNihNUFND X1JYQkVfU0laRShkbWFfZGV2KSk7DQo+PiAgICAJCXJ4cmUtPmJ5dGVjbnQgPSBjcHVfdG9f YmUxNigwKTsNCj4+ICAgIAkJcnhyZS0+Y21kc3RhdCA9IGNwdV90b19iZTMyKFNETUFfREVT Q19DTURTVEFUX08NCj4+ICAgIAkJCQl8IFNETUFfREVTQ19DTURTVEFUX0VJIHwgU0RNQV9E RVNDX0NNRFNUQVRfRg0KPj4gICAgCQkJCXwgU0RNQV9ERVNDX0NNRFNUQVRfTCk7DQo+PiAt CQlyeHJlLT5saW5rID0gY3B1X3RvX2JlMzIoZHBfcCArIE1QU0NfUlhSRV9TSVpFKTsNCj4+ ICsJCXJ4cmUtPmxpbmsgPSBjcHVfdG9fYmUzMihkcF9wICsgTVBTQ19SWFJFX1NJWkUoZG1h X2RldikpOw0KPj4gICAgCQlyeHJlLT5idWZfcHRyID0gY3B1X3RvX2JlMzIoYnBfcCk7DQo+ PiAgICANCj4+IC0JCWRwICs9IE1QU0NfUlhSRV9TSVpFOw0KPj4gLQkJZHBfcCArPSBNUFND X1JYUkVfU0laRTsNCj4+IC0JCWJwICs9IE1QU0NfUlhCRV9TSVpFOw0KPj4gLQkJYnBfcCAr PSBNUFNDX1JYQkVfU0laRTsNCj4+ICsJCWRwICs9IE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYp Ow0KPj4gKwkJZHBfcCArPSBNUFNDX1JYUkVfU0laRShkbWFfZGV2KTsNCj4+ICsJCWJwICs9 IE1QU0NfUlhCRV9TSVpFKGRtYV9kZXYpOw0KPj4gKwkJYnBfcCArPSBNUFNDX1JYQkVfU0la RShkbWFfZGV2KTsNCj4+ICAgIAl9DQo+PiAgICAJcnhyZS0+bGluayA9IGNwdV90b19iZTMy KHBpLT5yeHJfcCk7CS8qIFdyYXAgbGFzdCBiYWNrIHRvIGZpcnN0ICovDQo+PiAgICANCj4+ IEBAIC04NjEsMjMgKzg2NiwyMyBAQCBzdGF0aWMgdm9pZCBtcHNjX2luaXRfcmluZ3Moc3Ry dWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4+ICAgIAlmb3IgKGkgPSAwOyBpIDwgTVBTQ19U WFJfRU5UUklFUzsgaSsrKSB7DQo+PiAgICAJCXR4cmUgPSAoc3RydWN0IG1wc2NfdHhfZGVz YyAqKWRwOw0KPj4gICAgDQo+PiAtCQl0eHJlLT5saW5rID0gY3B1X3RvX2JlMzIoZHBfcCAr IE1QU0NfVFhSRV9TSVpFKTsNCj4+ICsJCXR4cmUtPmxpbmsgPSBjcHVfdG9fYmUzMihkcF9w ICsgTVBTQ19UWFJFX1NJWkUoZG1hX2RldikpOw0KPj4gICAgCQl0eHJlLT5idWZfcHRyID0g Y3B1X3RvX2JlMzIoYnBfcCk7DQo+PiAgICANCj4+IC0JCWRwICs9IE1QU0NfVFhSRV9TSVpF Ow0KPj4gLQkJZHBfcCArPSBNUFNDX1RYUkVfU0laRTsNCj4+IC0JCWJwICs9IE1QU0NfVFhC RV9TSVpFOw0KPj4gLQkJYnBfcCArPSBNUFNDX1RYQkVfU0laRTsNCj4+ICsJCWRwICs9IE1Q U0NfVFhSRV9TSVpFKGRtYV9kZXYpOw0KPj4gKwkJZHBfcCArPSBNUFNDX1RYUkVfU0laRShk bWFfZGV2KTsNCj4+ICsJCWJwICs9IE1QU0NfVFhCRV9TSVpFKGRtYV9kZXYpOw0KPj4gKwkJ YnBfcCArPSBNUFNDX1RYQkVfU0laRShkbWFfZGV2KTsNCj4+ICAgIAl9DQo+PiAgICAJdHhy ZS0+bGluayA9IGNwdV90b19iZTMyKHBpLT50eHJfcCk7CS8qIFdyYXAgbGFzdCBiYWNrIHRv IGZpcnN0ICovDQo+PiAgICANCj4+ICAgIAlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYs ICh2b2lkICopcGktPmRtYV9yZWdpb24sDQo+PiAtCQkJTVBTQ19ETUFfQUxMT0NfU0laRSwg RE1BX0JJRElSRUNUSU9OQUwpOw0KPj4gKwkJCU1QU0NfRE1BX0FMTE9DX1NJWkUoZG1hX2Rl diksIERNQV9CSURJUkVDVElPTkFMKTsNCj4+ICAgICNpZiBkZWZpbmVkKENPTkZJR19QUEMz MikgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkNCj4+ICAgIAkJaWYg KHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+PiAgICAJ CQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVsb25nKXBpLT5kbWFfcmVnaW9uLA0KPj4gICAgCQkJ CQkodWxvbmcpcGktPmRtYV9yZWdpb24NCj4+IC0JCQkJCSsgTVBTQ19ETUFfQUxMT0NfU0la RSk7DQo+PiArCQkJCQkrIE1QU0NfRE1BX0FMTE9DX1NJWkUoZG1hX2RldikpOw0KPj4gICAg I2VuZGlmDQo+PiAgICANCj4+ICAgIAlyZXR1cm47DQo+PiBAQCAtOTM2LDYgKzk0MSw3IEBA IHN0YXRpYyBpbnQgc2VyaWFsX3BvbGxlZDsNCj4+ICAgIHN0YXRpYyBpbnQgbXBzY19yeF9p bnRyKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGksIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQ0K Pj4gICAgew0KPj4gICAgCXN0cnVjdCBtcHNjX3J4X2Rlc2MgKnJ4cmU7DQo+PiArCXN0cnVj dCBkZXZpY2UgKmRtYV9kZXYgPSBwaS0+cG9ydC5kZXY7DQo+PiAgICAJc3RydWN0IHR0eV9w b3J0ICpwb3J0ID0gJnBpLT5wb3J0LnN0YXRlLT5wb3J0Ow0KPj4gICAgCXUzMgljbWRzdGF0 LCBieXRlc19pbiwgaTsNCj4+ICAgIAlpbnQJcmMgPSAwOw0KPj4gQEAgLTk0NCwxNCArOTUw LDE0IEBAIHN0YXRpYyBpbnQgbXBzY19yeF9pbnRyKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAq cGksIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQ0KPj4gICAgDQo+PiAgICAJcHJfZGVidWcoIm1w c2NfcnhfaW50clslZF06IEhhbmRsaW5nIFJ4IGludHJcbiIsIHBpLT5wb3J0LmxpbmUpOw0K Pj4gICAgDQo+PiAtCXJ4cmUgPSAoc3RydWN0IG1wc2NfcnhfZGVzYyAqKShwaS0+cnhyICsg KHBpLT5yeHJfcG9zbipNUFNDX1JYUkVfU0laRSkpOw0KPj4gKwlyeHJlID0gKHN0cnVjdCBt cHNjX3J4X2Rlc2MgKikocGktPnJ4ciArIChwaS0+cnhyX3Bvc24qTVBTQ19SWFJFX1NJWkUo ZG1hX2RldikpKTsNCj4+ICAgIA0KPj4gLQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYs ICh2b2lkICopcnhyZSwgTVBTQ19SWFJFX1NJWkUsDQo+PiArCWRtYV9jYWNoZV9zeW5jKHBp LT5wb3J0LmRldiwgKHZvaWQgKilyeHJlLCBNUFNDX1JYUkVfU0laRShkbWFfZGV2KSwNCj4+ ICAgIAkJCURNQV9GUk9NX0RFVklDRSk7DQo+PiAgICAjaWYgZGVmaW5lZChDT05GSUdfUFBD MzIpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpDQo+PiAgICAJaWYg KHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+PiAgICAJ CWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bG9uZylyeHJlLA0KPj4gLQkJCQkodWxvbmcp cnhyZSArIE1QU0NfUlhSRV9TSVpFKTsNCj4+ICsJCQkJKHVsb25nKXJ4cmUgKyBNUFNDX1JY UkVfU0laRShkbWFfZGV2KSk7DQo+PiAgICAjZW5kaWYNCj4+ICAgIA0KPj4gICAgCS8qDQo+ PiBAQCAtOTc5LDEzICs5ODUsMTMgQEAgc3RhdGljIGludCBtcHNjX3J4X2ludHIoc3RydWN0 IG1wc2NfcG9ydF9pbmZvICpwaSwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpDQo+PiAgICAJCQkg Ki8NCj4+ICAgIAkJfQ0KPj4gICAgDQo+PiAtCQlicCA9IHBpLT5yeGIgKyAocGktPnJ4cl9w b3NuICogTVBTQ19SWEJFX1NJWkUpOw0KPj4gLQkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQu ZGV2LCAodm9pZCAqKWJwLCBNUFNDX1JYQkVfU0laRSwNCj4+ICsJCWJwID0gcGktPnJ4YiAr IChwaS0+cnhyX3Bvc24gKiBNUFNDX1JYQkVfU0laRShkbWFfZGV2KSk7DQo+PiArCQlkbWFf Y2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopYnAsIE1QU0NfUlhCRV9TSVpFKGRt YV9kZXYpLA0KPj4gICAgCQkJCURNQV9GUk9NX0RFVklDRSk7DQo+PiAgICAjaWYgZGVmaW5l ZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUp DQo+PiAgICAJCWlmIChwaS0+Y2FjaGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0t MiAqLw0KPj4gICAgCQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVsb25nKWJwLA0KPj4g LQkJCQkJKHVsb25nKWJwICsgTVBTQ19SWEJFX1NJWkUpOw0KPj4gKwkJCQkJKHVsb25nKWJw ICsgTVBTQ19SWEJFX1NJWkUoZG1hX2RldikpOw0KPj4gICAgI2VuZGlmDQo+PiAgICANCj4+ ICAgIAkJLyoNCj4+IEBAIC0xMDU2LDI0ICsxMDYyLDI0IEBAIHN0YXRpYyBpbnQgbXBzY19y eF9pbnRyKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGksIHVuc2lnbmVkIGxvbmcgKmZsYWdz KQ0KPj4gICAgCQkJCXwgU0RNQV9ERVNDX0NNRFNUQVRfRUkgfCBTRE1BX0RFU0NfQ01EU1RB VF9GDQo+PiAgICAJCQkJfCBTRE1BX0RFU0NfQ01EU1RBVF9MKTsNCj4+ICAgIAkJd21iKCk7 DQo+PiAtCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopcnhyZSwgTVBT Q19SWFJFX1NJWkUsDQo+PiArCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lk ICopcnhyZSwgTVBTQ19SWFJFX1NJWkUoZG1hX2RldiksDQo+PiAgICAJCQkJRE1BX0JJRElS RUNUSU9OQUwpOw0KPj4gICAgI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5l ZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQ0KPj4gICAgCQlpZiAocGktPmNhY2hlX21n bXQpIC8qIEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8NCj4+ICAgIAkJCWZsdXNoX2RjYWNo ZV9yYW5nZSgodWxvbmcpcnhyZSwNCj4+IC0JCQkJCSh1bG9uZylyeHJlICsgTVBTQ19SWFJF X1NJWkUpOw0KPj4gKwkJCQkJKHVsb25nKXJ4cmUgKyBNUFNDX1JYUkVfU0laRShkbWFfZGV2 KSk7DQo+PiAgICAjZW5kaWYNCj4+ICAgIA0KPj4gICAgCQkvKiBBZHZhbmNlIHRvIG5leHQg ZGVzY3JpcHRvciAqLw0KPj4gICAgCQlwaS0+cnhyX3Bvc24gPSAocGktPnJ4cl9wb3NuICsg MSkgJiAoTVBTQ19SWFJfRU5UUklFUyAtIDEpOw0KPj4gICAgCQlyeHJlID0gKHN0cnVjdCBt cHNjX3J4X2Rlc2MgKikNCj4+IC0JCQkocGktPnJ4ciArIChwaS0+cnhyX3Bvc24gKiBNUFND X1JYUkVfU0laRSkpOw0KPj4gLQkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9p ZCAqKXJ4cmUsIE1QU0NfUlhSRV9TSVpFLA0KPj4gKwkJCShwaS0+cnhyICsgKHBpLT5yeHJf cG9zbiAqIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKSk7DQo+PiArCQlkbWFfY2FjaGVfc3lu YyhwaS0+cG9ydC5kZXYsICh2b2lkICopcnhyZSwgTVBTQ19SWFJFX1NJWkUoZG1hX2Rldiks DQo+PiAgICAJCQkJRE1BX0ZST01fREVWSUNFKTsNCj4+ICAgICNpZiBkZWZpbmVkKENPTkZJ R19QUEMzMikgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkNCj4+ICAg IAkJaWYgKHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+ PiAgICAJCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodWxvbmcpcnhyZSwNCj4+IC0JCQkJ CSh1bG9uZylyeHJlICsgTVBTQ19SWFJFX1NJWkUpOw0KPj4gKwkJCQkJKHVsb25nKXJ4cmUg KyBNUFNDX1JYUkVfU0laRShkbWFfZGV2KSk7DQo+PiAgICAjZW5kaWYNCj4+ICAgIAkJcmMg PSAxOw0KPj4gICAgCX0NCj4+IEBAIC0xMDkxLDkgKzEwOTcsMTAgQEAgc3RhdGljIGludCBt cHNjX3J4X2ludHIoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSwgdW5zaWduZWQgbG9uZyAq ZmxhZ3MpDQo+PiAgICBzdGF0aWMgdm9pZCBtcHNjX3NldHVwX3R4X2Rlc2Moc3RydWN0IG1w c2NfcG9ydF9pbmZvICpwaSwgdTMyIGNvdW50LCB1MzIgaW50cikNCj4+ICAgIHsNCj4+ICAg IAlzdHJ1Y3QgbXBzY190eF9kZXNjICp0eHJlOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFf ZGV2ID0gcGktPnBvcnQuZGV2Ow0KPj4gICAgDQo+PiAgICAJdHhyZSA9IChzdHJ1Y3QgbXBz Y190eF9kZXNjICopKHBpLT50eHINCj4+IC0JCQkrIChwaS0+dHhyX2hlYWQgKiBNUFNDX1RY UkVfU0laRSkpOw0KPj4gKwkJCSsgKHBpLT50eHJfaGVhZCAqIE1QU0NfVFhSRV9TSVpFKGRt YV9kZXYpKSk7DQo+PiAgICANCj4+ICAgIAl0eHJlLT5ieXRlY250ID0gY3B1X3RvX2JlMTYo Y291bnQpOw0KPj4gICAgCXR4cmUtPnNoYWRvdyA9IHR4cmUtPmJ5dGVjbnQ7DQo+PiBAQCAt MTEwMiwxNyArMTEwOSwxOCBAQCBzdGF0aWMgdm9pZCBtcHNjX3NldHVwX3R4X2Rlc2Moc3Ry dWN0IG1wc2NfcG9ydF9pbmZvICpwaSwgdTMyIGNvdW50LCB1MzIgaW50cikNCj4+ICAgIAkJ CXwgU0RNQV9ERVNDX0NNRFNUQVRfTA0KPj4gICAgCQkJfCAoKGludHIpID8gU0RNQV9ERVND X0NNRFNUQVRfRUkgOiAwKSk7DQo+PiAgICAJd21iKCk7DQo+PiAtCWRtYV9jYWNoZV9zeW5j KHBpLT5wb3J0LmRldiwgKHZvaWQgKil0eHJlLCBNUFNDX1RYUkVfU0laRSwNCj4+ICsJZG1h X2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXR4cmUsIE1QU0NfVFhSRV9TSVpF KGRtYV9kZXYpLA0KPj4gICAgCQkJRE1BX0JJRElSRUNUSU9OQUwpOw0KPj4gICAgI2lmIGRl ZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NB Q0hFKQ0KPj4gICAgCWlmIChwaS0+Y2FjaGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NP TU0tMiAqLw0KPj4gICAgCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVsb25nKXR4cmUsDQo+PiAt CQkJCSh1bG9uZyl0eHJlICsgTVBTQ19UWFJFX1NJWkUpOw0KPj4gKwkJCQkodWxvbmcpdHhy ZSArIE1QU0NfVFhSRV9TSVpFKGRtYV9kZXYpKTsNCj4+ICAgICNlbmRpZg0KPj4gICAgfQ0K Pj4gICAgDQo+PiAgICBzdGF0aWMgdm9pZCBtcHNjX2NvcHlfdHhfZGF0YShzdHJ1Y3QgbXBz Y19wb3J0X2luZm8gKnBpKQ0KPj4gICAgew0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2 ID0gcGktPnBvcnQuZGV2Ow0KPj4gICAgCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwaS0+ cG9ydC5zdGF0ZS0+eG1pdDsNCj4+ICAgIAl1OCAqYnA7DQo+PiAgICAJdTMyIGk7DQo+PiBA QCAtMTEyOSwxNyArMTEzNywxNyBAQCBzdGF0aWMgdm9pZCBtcHNjX2NvcHlfdHhfZGF0YShz dHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPj4gICAgCQkJICogQ0hSXzEuICBJbnN0ZWFk LCBqdXN0IHB1dCBpdCBpbi1iYW5kIHdpdGgNCj4+ICAgIAkJCSAqIGFsbCB0aGUgb3RoZXIg VHggZGF0YS4NCj4+ICAgIAkJCSAqLw0KPj4gLQkJCWJwID0gcGktPnR4YiArIChwaS0+dHhy X2hlYWQgKiBNUFNDX1RYQkVfU0laRSk7DQo+PiArCQkJYnAgPSBwaS0+dHhiICsgKHBpLT50 eHJfaGVhZCAqIE1QU0NfVFhCRV9TSVpFKGRtYV9kZXYpKTsNCj4+ICAgIAkJCSpicCA9IHBp LT5wb3J0LnhfY2hhcjsNCj4+ICAgIAkJCXBpLT5wb3J0LnhfY2hhciA9IDA7DQo+PiAgICAJ CQlpID0gMTsNCj4+ICAgIAkJfSBlbHNlIGlmICghdWFydF9jaXJjX2VtcHR5KHhtaXQpDQo+ PiAgICAJCQkJJiYgIXVhcnRfdHhfc3RvcHBlZCgmcGktPnBvcnQpKSB7DQo+PiAtCQkJaSA9 IG1pbigodTMyKU1QU0NfVFhCRV9TSVpFLA0KPj4gKwkJCWkgPSBtaW4oKHUzMilNUFNDX1RY QkVfU0laRShkbWFfZGV2KSwNCj4+ICAgIAkJCQkodTMyKXVhcnRfY2lyY19jaGFyc19wZW5k aW5nKHhtaXQpKTsNCj4+ICAgIAkJCWkgPSBtaW4oaSwgKHUzMilDSVJDX0NOVF9UT19FTkQo eG1pdC0+aGVhZCwgeG1pdC0+dGFpbCwNCj4+ICAgIAkJCQlVQVJUX1hNSVRfU0laRSkpOw0K Pj4gLQkJCWJwID0gcGktPnR4YiArIChwaS0+dHhyX2hlYWQgKiBNUFNDX1RYQkVfU0laRSk7 DQo+PiArCQkJYnAgPSBwaS0+dHhiICsgKHBpLT50eHJfaGVhZCAqIE1QU0NfVFhCRV9TSVpF KGRtYV9kZXYpKTsNCj4+ICAgIAkJCW1lbWNweShicCwgJnhtaXQtPmJ1Zlt4bWl0LT50YWls XSwgaSk7DQo+PiAgICAJCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyBpKSAmIChVQVJU X1hNSVRfU0laRSAtIDEpOw0KPj4gICAgDQo+PiBAQCAtMTE0OSwxMiArMTE1NywxMiBAQCBz dGF0aWMgdm9pZCBtcHNjX2NvcHlfdHhfZGF0YShzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBp KQ0KPj4gICAgCQkJcmV0dXJuOw0KPj4gICAgCQl9DQo+PiAgICANCj4+IC0JCWRtYV9jYWNo ZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKilicCwgTVBTQ19UWEJFX1NJWkUsDQo+PiAr CQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopYnAsIE1QU0NfVFhCRV9T SVpFKGRtYV9kZXYpLA0KPj4gICAgCQkJCURNQV9CSURJUkVDVElPTkFMKTsNCj4+ICAgICNp ZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVO VF9DQUNIRSkNCj4+ICAgIAkJaWYgKHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0Mls0Nl0wIFJl cyAjQ09NTS0yICovDQo+PiAgICAJCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVsb25nKWJwLA0K Pj4gLQkJCQkJKHVsb25nKWJwICsgTVBTQ19UWEJFX1NJWkUpOw0KPj4gKwkJCQkJKHVsb25n KWJwICsgTVBTQ19UWEJFX1NJWkUoZG1hX2RldikpOw0KPj4gICAgI2VuZGlmDQo+PiAgICAJ CW1wc2Nfc2V0dXBfdHhfZGVzYyhwaSwgaSwgMSk7DQo+PiAgICANCj4+IEBAIC0xMTY2LDYg KzExNzQsNyBAQCBzdGF0aWMgdm9pZCBtcHNjX2NvcHlfdHhfZGF0YShzdHJ1Y3QgbXBzY19w b3J0X2luZm8gKnBpKQ0KPj4gICAgc3RhdGljIGludCBtcHNjX3R4X2ludHIoc3RydWN0IG1w c2NfcG9ydF9pbmZvICpwaSkNCj4+ICAgIHsNCj4+ICAgIAlzdHJ1Y3QgbXBzY190eF9kZXNj ICp0eHJlOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBvcnQuZGV2Ow0K Pj4gICAgCWludCByYyA9IDA7DQo+PiAgICAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7DQo+PiAg ICANCj4+IEBAIC0xMTczLDE0ICsxMTgyLDE0IEBAIHN0YXRpYyBpbnQgbXBzY190eF9pbnRy KHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpDQo+PiAgICANCj4+ICAgIAlpZiAoIW1wc2Nf c2RtYV90eF9hY3RpdmUocGkpKSB7DQo+PiAgICAJCXR4cmUgPSAoc3RydWN0IG1wc2NfdHhf ZGVzYyAqKShwaS0+dHhyDQo+PiAtCQkJCSsgKHBpLT50eHJfdGFpbCAqIE1QU0NfVFhSRV9T SVpFKSk7DQo+PiArCQkJCSsgKHBpLT50eHJfdGFpbCAqIE1QU0NfVFhSRV9TSVpFKGRtYV9k ZXYpKSk7DQo+PiAgICANCj4+IC0JCWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZv aWQgKil0eHJlLCBNUFNDX1RYUkVfU0laRSwNCj4+ICsJCWRtYV9jYWNoZV9zeW5jKHBpLT5w b3J0LmRldiwgKHZvaWQgKil0eHJlLCBNUFNDX1RYUkVfU0laRShkbWFfZGV2KSwNCj4+ICAg IAkJCQlETUFfRlJPTV9ERVZJQ0UpOw0KPj4gICAgI2lmIGRlZmluZWQoQ09ORklHX1BQQzMy KSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQ0KPj4gICAgCQlpZiAo cGktPmNhY2hlX21nbXQpIC8qIEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8NCj4+ICAgIAkJ CWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bG9uZyl0eHJlLA0KPj4gLQkJCQkJKHVsb25n KXR4cmUgKyBNUFNDX1RYUkVfU0laRSk7DQo+PiArCQkJCQkodWxvbmcpdHhyZSArIE1QU0Nf VFhSRV9TSVpFKGRtYV9kZXYpKTsNCj4+ICAgICNlbmRpZg0KPj4gICAgDQo+PiAgICAJCXdo aWxlICghKGJlMzJfdG9fY3B1KHR4cmUtPmNtZHN0YXQpICYgU0RNQV9ERVNDX0NNRFNUQVRf TykpIHsNCj4+IEBAIC0xMTkzLDEzICsxMjAyLDEzIEBAIHN0YXRpYyBpbnQgbXBzY190eF9p bnRyKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpDQo+PiAgICAJCQkJYnJlYWs7DQo+PiAg ICANCj4+ICAgIAkJCXR4cmUgPSAoc3RydWN0IG1wc2NfdHhfZGVzYyAqKShwaS0+dHhyDQo+ PiAtCQkJCQkrIChwaS0+dHhyX3RhaWwgKiBNUFNDX1RYUkVfU0laRSkpOw0KPj4gKwkJCQkJ KyAocGktPnR4cl90YWlsICogTVBTQ19UWFJFX1NJWkUoZG1hX2RldikpKTsNCj4+ICAgIAkJ CWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKil0eHJlLA0KPj4gLQkJCQkJ TVBTQ19UWFJFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7DQo+PiArCQkJCQlNUFNDX1RYUkVf U0laRShkbWFfZGV2KSwgRE1BX0ZST01fREVWSUNFKTsNCj4+ICAgICNpZiBkZWZpbmVkKENP TkZJR19QUEMzMikgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkNCj4+ ICAgIAkJCWlmIChwaS0+Y2FjaGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAq Lw0KPj4gICAgCQkJCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bG9uZyl0eHJlLA0KPj4g LQkJCQkJCSh1bG9uZyl0eHJlICsgTVBTQ19UWFJFX1NJWkUpOw0KPj4gKwkJCQkJCSh1bG9u Zyl0eHJlICsgTVBTQ19UWFJFX1NJWkUoZG1hX2RldikpOw0KPj4gICAgI2VuZGlmDQo+PiAg ICAJCX0NCj4+ICAgIA0KPj4gQEAgLTEzNjAsNiArMTM2OSw3IEBAIHN0YXRpYyBpbnQgbXBz Y19zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpDQo+PiAgICB7DQo+PiAgICAJc3Ry dWN0IG1wc2NfcG9ydF9pbmZvICpwaSA9DQo+PiAgICAJCWNvbnRhaW5lcl9vZihwb3J0LCBz dHJ1Y3QgbXBzY19wb3J0X2luZm8sIHBvcnQpOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFf ZGV2ID0gcGktPnBvcnQuZGV2Ow0KPj4gICAgCXUzMiBmbGFnID0gMDsNCj4+ICAgIAlpbnQg cmM7DQo+PiAgICANCj4+IEBAIC0xMzgxLDcgKzEzOTEsNyBAQCBzdGF0aWMgaW50IG1wc2Nf c3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQ0KPj4gICAgDQo+PiAgICAJCW1wc2Nf c2RtYV9pbnRyX3VubWFzayhwaSwgMHhmKTsNCj4+ICAgIAkJbXBzY19zZG1hX3NldF9yeF9y aW5nKHBpLCAoc3RydWN0IG1wc2NfcnhfZGVzYyAqKShwaS0+cnhyX3ANCj4+IC0JCQkJCSsg KHBpLT5yeHJfcG9zbiAqIE1QU0NfUlhSRV9TSVpFKSkpOw0KPj4gKwkJCQkJKyAocGktPnJ4 cl9wb3NuICogTVBTQ19SWFJFX1NJWkUoZG1hX2RldikpKSk7DQo+PiAgICAJfQ0KPj4gICAg DQo+PiAgICAJcmV0dXJuIHJjOw0KPj4gQEAgLTE1NTUsOSArMTU2NSwxMCBAQCBzdGF0aWMg dm9pZCBtcHNjX3B1dF9wb2xsX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwNCj4+ICAg IA0KPj4gICAgc3RhdGljIGludCBtcHNjX2dldF9wb2xsX2NoYXIoc3RydWN0IHVhcnRfcG9y dCAqcG9ydCkNCj4+ICAgIHsNCj4+ICsJc3RydWN0IG1wc2NfcnhfZGVzYyAqcnhyZTsNCj4+ ICAgIAlzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpID0NCj4+ICAgIAkJY29udGFpbmVyX29m KHBvcnQsIHN0cnVjdCBtcHNjX3BvcnRfaW5mbywgcG9ydCk7DQo+PiAtCXN0cnVjdCBtcHNj X3J4X2Rlc2MgKnJ4cmU7DQo+PiArCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSBwaS0+cG9y dC5kZXY7DQo+PiAgICAJdTMyCWNtZHN0YXQsIGJ5dGVzX2luLCBpOw0KPj4gICAgCXU4CSpi cDsNCj4+ICAgIA0KPj4gQEAgLTE1NzUsMTMgKzE1ODYsMTMgQEAgc3RhdGljIGludCBtcHNj X2dldF9wb2xsX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkNCj4+ICAgIA0KPj4gICAg CXdoaWxlIChwb2xsX2NudCA9PSAwKSB7DQo+PiAgICAJCXJ4cmUgPSAoc3RydWN0IG1wc2Nf cnhfZGVzYyAqKShwaS0+cnhyICsNCj4+IC0JCSAgICAgICAocGktPnJ4cl9wb3NuKk1QU0Nf UlhSRV9TSVpFKSk7DQo+PiArCQkgICAgICAgKHBpLT5yeHJfcG9zbipNUFNDX1JYUkVfU0la RShkbWFfZGV2KSkpOw0KPj4gICAgCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2 b2lkICopcnhyZSwNCj4+IC0JCQkgICAgICAgTVBTQ19SWFJFX1NJWkUsIERNQV9GUk9NX0RF VklDRSk7DQo+PiArCQkJICAgICAgIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpLCBETUFfRlJP TV9ERVZJQ0UpOw0KPj4gICAgI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5l ZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQ0KPj4gICAgCQlpZiAocGktPmNhY2hlX21n bXQpIC8qIEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8NCj4+ICAgIAkJCWludmFsaWRhdGVf ZGNhY2hlX3JhbmdlKCh1bG9uZylyeHJlLA0KPj4gLQkJCSh1bG9uZylyeHJlICsgTVBTQ19S WFJFX1NJWkUpOw0KPj4gKwkJCSh1bG9uZylyeHJlICsgTVBTQ19SWFJFX1NJWkUoZG1hX2Rl dikpOw0KPj4gICAgI2VuZGlmDQo+PiAgICAJCS8qDQo+PiAgICAJCSAqIExvb3AgdGhyb3Vn aCBSeCBkZXNjcmlwdG9ycyBoYW5kbGluZyBvbmVzIHRoYXQgaGF2ZQ0KPj4gQEAgLTE1OTEs MTMgKzE2MDIsMTMgQEAgc3RhdGljIGludCBtcHNjX2dldF9wb2xsX2NoYXIoc3RydWN0IHVh cnRfcG9ydCAqcG9ydCkNCj4+ICAgIAkJICAgICAgICEoKGNtZHN0YXQgPSBiZTMyX3RvX2Nw dShyeHJlLT5jbWRzdGF0KSkgJg0KPj4gICAgCQkJIFNETUFfREVTQ19DTURTVEFUX08pKXsN Cj4+ICAgIAkJCWJ5dGVzX2luID0gYmUxNl90b19jcHUocnhyZS0+Ynl0ZWNudCk7DQo+PiAt CQkJYnAgPSBwaS0+cnhiICsgKHBpLT5yeHJfcG9zbiAqIE1QU0NfUlhCRV9TSVpFKTsNCj4+ ICsJCQlicCA9IHBpLT5yeGIgKyAocGktPnJ4cl9wb3NuICogTVBTQ19SWEJFX1NJWkUoZG1h X2RldikpOw0KPj4gICAgCQkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAq KSBicCwNCj4+IC0JCQkJICAgICAgIE1QU0NfUlhCRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0Up Ow0KPj4gKwkJCQkgICAgICAgTVBTQ19SWEJFX1NJWkUoZG1hX2RldiksIERNQV9GUk9NX0RF VklDRSk7DQo+PiAgICAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENP TkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpDQo+PiAgICAJCQlpZiAocGktPmNhY2hlX21nbXQp IC8qIEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8NCj4+ICAgIAkJCQlpbnZhbGlkYXRlX2Rj YWNoZV9yYW5nZSgodWxvbmcpYnAsDQo+PiAtCQkJCQkodWxvbmcpYnAgKyBNUFNDX1JYQkVf U0laRSk7DQo+PiArCQkJCQkodWxvbmcpYnAgKyBNUFNDX1JYQkVfU0laRShkbWFfZGV2KSk7 DQo+PiAgICAjZW5kaWYNCj4+ICAgIAkJCWlmICgodW5saWtlbHkoY21kc3RhdCAmIChTRE1B X0RFU0NfQ01EU1RBVF9CUiB8DQo+PiAgICAJCQkgU0RNQV9ERVNDX0NNRFNUQVRfRlIgfCBT RE1BX0RFU0NfQ01EU1RBVF9PUikpKSAmJg0KPj4gQEAgLTE2MTksMjQgKzE2MzAsMjQgQEAg c3RhdGljIGludCBtcHNjX2dldF9wb2xsX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkN Cj4+ICAgIAkJCQkJCSAgICBTRE1BX0RFU0NfQ01EU1RBVF9MKTsNCj4+ICAgIAkJCXdtYigp Ow0KPj4gICAgCQkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXJ4cmUs DQo+PiAtCQkJCSAgICAgICBNUFNDX1JYUkVfU0laRSwgRE1BX0JJRElSRUNUSU9OQUwpOw0K Pj4gKwkJCQkgICAgICAgTVBTQ19SWFJFX1NJWkUoZG1hX2RldiksIERNQV9CSURJUkVDVElP TkFMKTsNCj4+ICAgICNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQoQ09O RklHX05PVF9DT0hFUkVOVF9DQUNIRSkNCj4+ICAgIAkJCWlmIChwaS0+Y2FjaGVfbWdtdCkg LyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLw0KPj4gICAgCQkJCWZsdXNoX2RjYWNoZV9y YW5nZSgodWxvbmcpcnhyZSwNCj4+IC0JCQkJCSAgICh1bG9uZylyeHJlICsgTVBTQ19SWFJF X1NJWkUpOw0KPj4gKwkJCQkJICAgKHVsb25nKXJ4cmUgKyBNUFNDX1JYUkVfU0laRShkbWFf ZGV2KSk7DQo+PiAgICAjZW5kaWYNCj4+ICAgIA0KPj4gICAgCQkJLyogQWR2YW5jZSB0byBu ZXh0IGRlc2NyaXB0b3IgKi8NCj4+ICAgIAkJCXBpLT5yeHJfcG9zbiA9IChwaS0+cnhyX3Bv c24gKyAxKSAmDQo+PiAgICAJCQkJKE1QU0NfUlhSX0VOVFJJRVMgLSAxKTsNCj4+ICAgIAkJ CXJ4cmUgPSAoc3RydWN0IG1wc2NfcnhfZGVzYyAqKShwaS0+cnhyICsNCj4+IC0JCQkJICAg ICAgIChwaS0+cnhyX3Bvc24gKiBNUFNDX1JYUkVfU0laRSkpOw0KPj4gKwkJCQkgICAgICAg KHBpLT5yeHJfcG9zbiAqIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKSk7DQo+PiAgICAJCQlk bWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopcnhyZSwNCj4+IC0JCQkJICAg ICAgIE1QU0NfUlhSRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOw0KPj4gKwkJCQkgICAgICAg TVBTQ19SWFJFX1NJWkUoZG1hX2RldiksIERNQV9GUk9NX0RFVklDRSk7DQo+PiAgICAjaWYg ZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRf Q0FDSEUpDQo+PiAgICAJCQlpZiAocGktPmNhY2hlX21nbXQpIC8qIEdUNjQyWzQ2XTAgUmVz ICNDT01NLTIgKi8NCj4+ICAgIAkJCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodWxvbmcp cnhyZSwNCj4+IC0JCQkJCQkodWxvbmcpcnhyZSArIE1QU0NfUlhSRV9TSVpFKTsNCj4+ICsJ CQkJCQkodWxvbmcpcnhyZSArIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKTsNCj4+ICAgICNl bmRpZg0KPj4gICAgCQl9DQo+PiAgICANCj4+IEBAIC0xNzA2LDYgKzE3MTcsNyBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IHVhcnRfb3BzIG1wc2NfcG9wcyA9IHsNCj4+ICAgIHN0YXRpYyB2 b2lkIG1wc2NfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIg KnMsIHVpbnQgY291bnQpDQo+PiAgICB7DQo+PiAgICAJc3RydWN0IG1wc2NfcG9ydF9pbmZv ICpwaSA9ICZtcHNjX3BvcnRzW2NvLT5pbmRleF07DQo+PiArCXN0cnVjdCBkZXZpY2UgKmRt YV9kZXYgPSBwaS0+cG9ydC5kZXY7DQo+PiAgICAJdTggKmJwLCAqZHAsIGFkZF9jciA9IDA7 DQo+PiAgICAJaW50IGk7DQo+PiAgICAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7DQo+PiBAQCAt MTcyMyw5ICsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbXBzY19jb25zb2xlX3dyaXRlKHN0cnVj dCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdWludCBjb3VudCkNCj4+ICAgIAkJdWRl bGF5KDEwMCk7DQo+PiAgICANCj4+ICAgIAl3aGlsZSAoY291bnQgPiAwKSB7DQo+PiAtCQli cCA9IGRwID0gcGktPnR4YiArIChwaS0+dHhyX2hlYWQgKiBNUFNDX1RYQkVfU0laRSk7DQo+ PiArCQlicCA9IGRwID0gcGktPnR4YiArIChwaS0+dHhyX2hlYWQgKiBNUFNDX1RYQkVfU0la RShkbWFfZGV2KSk7DQo+PiAgICANCj4+IC0JCWZvciAoaSA9IDA7IGkgPCBNUFNDX1RYQkVf U0laRTsgaSsrKSB7DQo+PiArCQlmb3IgKGkgPSAwOyBpIDwgTVBTQ19UWEJFX1NJWkUoZG1h X2Rldik7IGkrKykgew0KPj4gICAgCQkJaWYgKGNvdW50ID09IDApDQo+PiAgICAJCQkJYnJl YWs7DQo+PiAgICANCj4+IEBAIC0xNzQ0LDEyICsxNzU2LDEyIEBAIHN0YXRpYyB2b2lkIG1w c2NfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVp bnQgY291bnQpDQo+PiAgICAJCQljb3VudC0tOw0KPj4gICAgCQl9DQo+PiAgICANCj4+IC0J CWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKilicCwgTVBTQ19UWEJFX1NJ WkUsDQo+PiArCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopYnAsIE1Q U0NfVFhCRV9TSVpFKGRtYV9kZXYpLA0KPj4gICAgCQkJCURNQV9CSURJUkVDVElPTkFMKTsN Cj4+ICAgICNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQoQ09ORklHX05P VF9DT0hFUkVOVF9DQUNIRSkNCj4+ICAgIAkJaWYgKHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0 Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+PiAgICAJCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVs b25nKWJwLA0KPj4gLQkJCQkJKHVsb25nKWJwICsgTVBTQ19UWEJFX1NJWkUpOw0KPj4gKwkJ CQkJKHVsb25nKWJwICsgTVBTQ19UWEJFX1NJWkUoZG1hX2RldikpOw0KPj4gICAgI2VuZGlm DQo+PiAgICAJCW1wc2Nfc2V0dXBfdHhfZGVzYyhwaSwgaSwgMCk7DQo+PiAgICAJCXBpLT50 eHJfaGVhZCA9IChwaS0+dHhyX2hlYWQgKyAxKSAmIChNUFNDX1RYUl9FTlRSSUVTIC0gMSk7 DQo+PiBAQCAtMjAyNCw3ICsyMDM2LDggQEAgc3RhdGljIHZvaWQgbXBzY19kcnZfdW5tYXBf cmVncyhzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPj4gICAgc3RhdGljIHZvaWQgbXBz Y19kcnZfZ2V0X3BsYXRmb3JtX2RhdGEoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSwNCj4+ ICAgIAkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQsIGludCBudW0pDQo+PiAgICB7DQo+ PiAtCXN0cnVjdCBtcHNjX3BkYXRhCSpwZGF0YTsNCj4+ICsJc3RydWN0IG1wc2NfcGRhdGEg KnBkYXRhOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBvcnQuZGV2Ow0K Pj4gICAgDQo+PiAgICAJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZC0+ZGV2KTsNCj4+ ICAgIA0KPj4gQEAgLTIwMzIsNyArMjA0NSw3IEBAIHN0YXRpYyB2b2lkIG1wc2NfZHJ2X2dl dF9wbGF0Zm9ybV9kYXRhKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGksDQo+PiAgICAJcGkt PnBvcnQuaW90eXBlID0gVVBJT19NRU07DQo+PiAgICAJcGktPnBvcnQubGluZSA9IG51bTsN Cj4+ICAgIAlwaS0+cG9ydC50eXBlID0gUE9SVF9NUFNDOw0KPj4gLQlwaS0+cG9ydC5maWZv c2l6ZSA9IE1QU0NfVFhCRV9TSVpFOw0KPj4gKwlwaS0+cG9ydC5maWZvc2l6ZSA9IE1QU0Nf VFhCRV9TSVpFKGRtYV9kZXYpOw0KPj4gICAgCXBpLT5wb3J0Lm1lbWJhc2UgPSBwaS0+bXBz Y19iYXNlOw0KPj4gICAgCXBpLT5wb3J0Lm1hcGJhc2UgPSAodWxvbmcpcGktPm1wc2NfYmFz ZTsNCj4+ICAgIAlwaS0+cG9ydC5vcHMgPSAmbXBzY19wb3BzOw0KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ft c3VuZy5jDQo+PiBpbmRleCA4YWNhMThjLi45ZGY5MThlNSAxMDA2NDQNCj4+IC0tLSBhL2Ry aXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMNCj4+ICsrKyBiL2RyaXZlcnMvdHR5L3Nlcmlh bC9zYW1zdW5nLmMNCj4+IEBAIC0yNDEsNyArMjQxLDcgQEAgc3RhdGljIHZvaWQgZW5hYmxl X3R4X2RtYShzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBvcnQpDQo+PiAgICAJLyog RW5hYmxlIHR4IGRtYSBtb2RlICovDQo+PiAgICAJdWNvbiA9IHJkX3JlZ2wocG9ydCwgUzND MjQxMF9VQ09OKTsNCj4+ICAgIAl1Y29uICY9IH4oUzNDNjRYWF9VQ09OX1RYQlVSU1RfTUFT SyB8IFMzQzY0WFhfVUNPTl9UWE1PREVfTUFTSyk7DQo+PiAtCXVjb24gfD0gKGRtYV9nZXRf Y2FjaGVfYWxpZ25tZW50KCkgPj0gMTYpID8NCj4+ICsJdWNvbiB8PSAoZG1hX2dldF9jYWNo ZV9hbGlnbm1lbnQocG9ydC0+ZGV2KSA+PSAxNikgPw0KPj4gICAgCQlTM0M2NFhYX1VDT05f VFhCVVJTVF8xNiA6IFMzQzY0WFhfVUNPTl9UWEJVUlNUXzE7DQo+PiAgICAJdWNvbiB8PSBT M0M2NFhYX1VDT05fVFhNT0RFX0RNQTsNCj4+ICAgIAl3cl9yZWdsKHBvcnQsICBTM0MyNDEw X1VDT04sIHVjb24pOw0KPj4gQEAgLTI5Miw3ICsyOTIsNyBAQCBzdGF0aWMgaW50IHMzYzI0 eHhfc2VyaWFsX3N0YXJ0X3R4X2RtYShzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBv cnQsDQo+PiAgICAJaWYgKG91cnBvcnQtPnR4X21vZGUgIT0gUzNDMjRYWF9UWF9ETUEpDQo+ PiAgICAJCWVuYWJsZV90eF9kbWEob3VycG9ydCk7DQo+PiAgICANCj4+IC0JZG1hLT50eF9z aXplID0gY291bnQgJiB+KGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkgLSAxKTsNCj4+ICsJ ZG1hLT50eF9zaXplID0gY291bnQgJiB+KGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHBvcnQt PmRldikgLSAxKTsNCj4+ICAgIAlkbWEtPnR4X3RyYW5zZmVyX2FkZHIgPSBkbWEtPnR4X2Fk ZHIgKyB4bWl0LT50YWlsOw0KPj4gICAgDQo+PiAgICAJZG1hX3N5bmNfc2luZ2xlX2Zvcl9k ZXZpY2Uob3VycG9ydC0+cG9ydC5kZXYsIGRtYS0+dHhfdHJhbnNmZXJfYWRkciwNCj4+IEBA IC0zMzIsNyArMzMyLDcgQEAgc3RhdGljIHZvaWQgczNjMjR4eF9zZXJpYWxfc3RhcnRfbmV4 dF90eChzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBvcnQpDQo+PiAgICANCj4+ICAg IAlpZiAoIW91cnBvcnQtPmRtYSB8fCAhb3VycG9ydC0+ZG1hLT50eF9jaGFuIHx8DQo+PiAg ICAJICAgIGNvdW50IDwgb3VycG9ydC0+bWluX2RtYV9zaXplIHx8DQo+PiAtCSAgICB4bWl0 LT50YWlsICYgKGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkgLSAxKSkNCj4+ICsJICAgIHht aXQtPnRhaWwgJiAoZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQocG9ydC0+ZGV2KSAtIDEpKQ0K Pj4gICAgCQlzM2MyNHh4X3NlcmlhbF9zdGFydF90eF9waW8ob3VycG9ydCk7DQo+PiAgICAJ ZWxzZQ0KPj4gICAgCQlzM2MyNHh4X3NlcmlhbF9zdGFydF90eF9kbWEob3VycG9ydCwgY291 bnQpOw0KPj4gQEAgLTcxOCw4ICs3MTgsOCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgczNjMjR4 eF9zZXJpYWxfdHhfY2hhcnMoaW50IGlycSwgdm9pZCAqaWQpDQo+PiAgICANCj4+ICAgIAlp ZiAob3VycG9ydC0+ZG1hICYmIG91cnBvcnQtPmRtYS0+dHhfY2hhbiAmJg0KPj4gICAgCSAg ICBjb3VudCA+PSBvdXJwb3J0LT5taW5fZG1hX3NpemUpIHsNCj4+IC0JCWludCBhbGlnbiA9 IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkgLQ0KPj4gLQkJCSh4bWl0LT50YWlsICYgKGRt YV9nZXRfY2FjaGVfYWxpZ25tZW50KCkgLSAxKSk7DQo+PiArCQlpbnQgYWxpZ24gPSBkbWFf Z2V0X2NhY2hlX2FsaWdubWVudChwb3J0LT5kZXYpIC0NCj4+ICsJCQkoeG1pdC0+dGFpbCAm IChkbWFfZ2V0X2NhY2hlX2FsaWdubWVudChwb3J0LT5kZXYpIC0gMSkpOw0KPj4gICAgCQlp ZiAoY291bnQtYWxpZ24gPj0gb3VycG9ydC0+bWluX2RtYV9zaXplKSB7DQo+PiAgICAJCQlk bWFfY291bnQgPSBjb3VudC1hbGlnbjsNCj4+ICAgIAkJCWNvdW50ID0gYWxpZ247DQo+PiBA QCAtODcwLDcgKzg3MCw3IEBAIHN0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcmVxdWVzdF9k bWEoc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpwKQ0KPj4gICAgCWRtYS0+dHhfY29uZi5k aXJlY3Rpb24JCT0gRE1BX01FTV9UT19ERVY7DQo+PiAgICAJZG1hLT50eF9jb25mLmRzdF9h ZGRyX3dpZHRoCT0gRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURTsNCj4+ICAgIAlkbWEtPnR4 X2NvbmYuZHN0X2FkZHIJCT0gcC0+cG9ydC5tYXBiYXNlICsgUzNDMjQxMF9VVFhIOw0KPj4g LQlpZiAoZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKSA+PSAxNikNCj4+ICsJaWYgKGRtYV9n ZXRfY2FjaGVfYWxpZ25tZW50KHAtPnBvcnQuZGV2KSA+PSAxNikNCj4+ICAgIAkJZG1hLT50 eF9jb25mLmRzdF9tYXhidXJzdCA9IDE2Ow0KPj4gICAgCWVsc2UNCj4+ICAgIAkJZG1hLT50 eF9jb25mLmRzdF9tYXhidXJzdCA9IDE7DQo+PiBAQCAtMTg0OSw3ICsxODQ5LDcgQEAgc3Rh dGljIGludCBzM2MyNHh4X3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQ0KPj4gICAgCSAqIHNvIGZpbmQgbWluaW1hbCB0cmFuc2ZlciBzaXplIHN1aXRhYmxl IGZvciBETUEgbW9kZQ0KPj4gICAgCSAqLw0KPj4gICAgCW91cnBvcnQtPm1pbl9kbWFfc2l6 ZSA9IG1heF90KGludCwgb3VycG9ydC0+cG9ydC5maWZvc2l6ZSwNCj4+IC0JCQkJICAgIGRt YV9nZXRfY2FjaGVfYWxpZ25tZW50KCkpOw0KPj4gKwkJCQkgICAgZG1hX2dldF9jYWNoZV9h bGlnbm1lbnQob3VycG9ydC0+cG9ydC5kZXYpKTsNCj4+ICAgIA0KPj4gICAgCWRiZygiJXM6 IGluaXRpYWxpc2luZyBwb3J0ICVwLi4uXG4iLCBfX2Z1bmNfXywgb3VycG9ydCk7DQo+PiAg ICANCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmggYi9pbmNs dWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgNCj4+IGluZGV4IDI5Y2U5ODEuLjEzMjYwMjMgMTAw NjQ0DQo+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgNCj4+ICsrKyBiL2lu Y2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaA0KPj4gQEAgLTEzMSw2ICsxMzEsNyBAQCBzdHJ1 Y3QgZG1hX21hcF9vcHMgew0KPj4gICAgI2lmZGVmIEFSQ0hfSEFTX0RNQV9HRVRfUkVRVUlS RURfTUFTSw0KPj4gICAgCXU2NCAoKmdldF9yZXF1aXJlZF9tYXNrKShzdHJ1Y3QgZGV2aWNl ICpkZXYpOw0KPj4gICAgI2VuZGlmDQo+PiArCWludCAoKmdldF9jYWNoZV9hbGlnbm1lbnQp KHN0cnVjdCBkZXZpY2UgKmRldik7DQo+PiAgICAJaW50IGlzX3BoeXM7DQo+PiAgICB9Ow0K Pj4gICAgDQo+PiBAQCAtNjk3LDEyICs2OTgsMTggQEAgc3RhdGljIGlubGluZSB2b2lkICpk bWFfemFsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsDQo+ PiAgICB9DQo+PiAgICANCj4+ICAgICNpZmRlZiBDT05GSUdfSEFTX0RNQQ0KPj4gLXN0YXRp YyBpbmxpbmUgaW50IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpDQo+PiAtew0KPj4g LSNpZmRlZiBBUkNIX0RNQV9NSU5BTElHTg0KPj4gLQlyZXR1cm4gQVJDSF9ETUFfTUlOQUxJ R047DQo+PiArDQo+PiArI2lmbmRlZiBBUkNIX0RNQV9NSU5BTElHTg0KPj4gKyNkZWZpbmUg QVJDSF9ETUFfTUlOQUxJR04gMQ0KPj4gICAgI2VuZGlmDQo+PiAtCXJldHVybiAxOw0KPj4g Kw0KPj4gK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHN0cnVj dCBkZXZpY2UgKmRldikNCj4+ICt7DQo+PiArCWNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAq b3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsNCj4+ICsJaWYgKGRldiAmJiBvcHMgJiYgb3BzLT5n ZXRfY2FjaGVfYWxpZ25tZW50KQ0KPj4gKwkJcmV0dXJuIG9wcy0+Z2V0X2NhY2hlX2FsaWdu bWVudChkZXYpOw0KPj4gKw0KPj4gKwlyZXR1cm4gQVJDSF9ETUFfTUlOQUxJR047IC8qIGNv bXBhdGlibGUgYmVoYXZpb3IgKi8NCj4+ICAgIH0NCj4+ICAgICNlbmRpZg0KPj4gICAgDQo+ IEJlc3QgcmVnYXJkcw0KDQpCZXN0IHJlZ2FyZHMNCi0tIA0KTWFyZWsgU3p5cHJvd3NraSwg UGhEDQpTYW1zdW5nIFImRCBJbnN0aXR1dGUgUG9sYW5k