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: Wed, 25 Oct 2017 09:22:36 +0800 Message-ID: References: <1508742767-28366-1-git-send-email-chenhc@lemote.com> <0f34e021-a559-3e3c-4586-48450e87d5c8@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <0f34e021-a559-3e3c-4586-48450e87d5c8@samsung.com> Sender: linux-kernel-owner@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?= List-Id: linux-scsi@vger.kernel.org SGksIE1hcmVrDQoNClBhdGNoMyBpcyBuZWVkZWQgZm9yIHN0YWJsZSwgYnV0IFBhdGNoMyBk ZXBlbmQgb24gUGF0Y2gxIGFuZCBQYXRjaDIuDQoNCkh1YWNhaQ0KIA0KIA0KLS0tLS0tLS0t LS0tLS0tLS0tIE9yaWdpbmFsIC0tLS0tLS0tLS0tLS0tLS0tLQ0KRnJvbTogICJNYXJlayBT enlwcm93c2tpIjxtLnN6eXByb3dza2lAc2Ftc3VuZy5jb20+Ow0KRGF0ZTogIFR1ZSwgT2N0 IDI0LCAyMDE3IDA5OjMwIFBNDQpUbzogICJIdWFjYWkgQ2hlbiI8Y2hlbmhjQGxlbW90ZS5j b20+OyAiQ2hyaXN0b3BoIEhlbGx3aWciPGhjaEBsc3QuZGU+OyANCkNjOiAgIlJvYmluIE11 cnBoeSI8cm9iaW4ubXVycGh5QGFybS5jb20+OyAiQW5kcmV3IE1vcnRvbiI8YWtwbUBsaW51 eC1mb3VuZGF0aW9uLm9yZz47ICJGdXhpbiBaaGFuZyI8emhhbmdmeEBsZW1vdGUuY29tPjsg ImxpbnV4LWtlcm5lbCI8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz47ICJSYWxmIEJh ZWNobGUiPHJhbGZAbGludXgtbWlwcy5vcmc+OyAiSmFtZXNIb2dhbiI8amFtZXMuaG9nYW5A aW1ndGVjLmNvbT47ICJsaW51eC1taXBzIjxsaW51eC1taXBzQGxpbnV4LW1pcHMub3JnPjsg IkphbWVzIEUgLiBKIC5Cb3R0b21sZXkiPGplamJAbGludXgudm5ldC5pYm0uY29tPjsgIk1h cnRpbiBLIC4gUGV0ZXJzZW4iPG1hcnRpbi5wZXRlcnNlbkBvcmFjbGUuY29tPjsgImxpbnV4 LXNjc2kiPGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnPjsgInN0YWJsZSI8c3RhYmxlQHZn ZXIua2VybmVsLm9yZz47ICJNaWNoYWVsIFMgLiBUc2lya2luIjxtc3RAcmVkaGF0LmNvbT47 ICJQYXdlbCBPc2NpYWsiPHBhd2VsQG9zY2lhay5jb20+OyAiS3l1bmdtaW4gUGFyayI8a3l1 bmdtaW4ucGFya0BzYW1zdW5nLmNvbT47ICJNaWNoYWVsIENoYW4iPG1pY2hhZWwuY2hhbkBi cm9hZGNvbS5jb20+OyAiQmVuamFtaW4gSGVycmVuc2NobWlkdCI8YmVuaEBrZXJuZWwuY3Jh c2hpbmcub3JnPjsgIkl2YW4gTWlraGF5bG92IjxpdmFuQHJ1LmlibS5jb20+OyAiVGFyaXEg VG91a2FuIjx0YXJpcXRAbWVsbGFub3guY29tPjsgIkFuZHkgR3Jvc3MiPGFncm9zc0Bjb2Rl YXVyb3JhLm9yZz47ICJNYXJrIEEgLiBHcmVlciI8bWdyZWVyQGFuaW1hbGNyZWVrLmNvbT47 ICJSb2JlcnQgQmFsZHlnYSI8ci5iYWxkeWdhQGhhY2tlcmlvbi5jb20+OyANClN1YmplY3Q6 ICBSZTogW1BBVENIIFY5IDEvNF0gZG1hLW1hcHBpbmc6IFJld29yayBkbWFfZ2V0X2NhY2hl X2FsaWdubWVudCgpDQoNCiANCkhpIEh1YWNhaSwNCg0KT24gMjAxNy0xMC0yMyAwOToxMiwg SHVhY2FpIENoZW4gd3JvdGU6DQo+IE1ha2UgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKSB0 byBhY2NlcHQgYSAnZGV2JyBhcmd1bWVudC4gQXMgYSByZXN1bHQsDQo+IGl0IGNhbiByZXR1 cm4gZGlmZmVyZW50IGFsaWdubWVudHMgZHVlIHRvIGRpZmZlcmVudCBkZXZpY2VzJyBJL08g Y2FjaGUNCj4gY29oZXJlbmN5Lg0KPg0KPiBDdXJyZW50bHksIEFSTS9BUk02NCBhbmQgTUlQ UyBzdXBwb3J0IGNvaGVyZW50ICYgbm9uY29oZXJlbnQgZGV2aWNlcw0KPiBjby1leGlzdC4g VGhpcyBtYXkgYmUgZXh0ZW5kZWQgaW4gdGhlIGZ1dHVyZSwgc28gYWRkIGEgbmV3IGZ1bmN0 aW9uDQo+IHBvaW50ZXIgKGkuZSwgZ2V0X2NhY2hlX2FsaWdubWVudCkgaW4gJ3N0cnVjdCBk bWFfbWFwX29wcycgYXMgYSBnZW5lcmljDQo+IHNvbHV0aW9uLg0KPg0KPiBDYzogc3RhYmxl QHZnZXIua2VybmVsLm9yZw0KDQpJIGRvbid0IHRoaW5rIHRoaXMgY2hhbmdlIHNob3VsZCBn byB0byBzdGFibGUuDQoNCj4gQ2M6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5j b20+DQo+IENjOiBQYXdlbCBPc2NpYWsgPHBhd2VsQG9zY2lhay5jb20+DQo+IENjOiBNYXJl ayBTenlwcm93c2tpIDxtLnN6eXByb3dza2lAc2Ftc3VuZy5jb20+DQo+IENjOiBLeXVuZ21p biBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPg0KPiBDYzogTWljaGFlbCBDaGFu IDxtaWNoYWVsLmNoYW5AYnJvYWRjb20uY29tPg0KPiBDYzogQmVuamFtaW4gSGVycmVuc2No bWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPg0KPiBDYzogSXZhbiBNaWtoYXlsb3Yg PGl2YW5AcnUuaWJtLmNvbT4NCj4gQ2M6IFRhcmlxIFRvdWthbiA8dGFyaXF0QG1lbGxhbm94 LmNvbT4NCj4gQ2M6IEFuZHkgR3Jvc3MgPGFncm9zc0Bjb2RlYXVyb3JhLm9yZz4NCj4gQ2M6 IE1hcmsgQS4gR3JlZXIgPG1ncmVlckBhbmltYWxjcmVlay5jb20+DQo+IENjOiBSb2JlcnQg QmFsZHlnYSA8ci5iYWxkeWdhQGhhY2tlcmlvbi5jb20+DQo+IENjOiBNYXJlayBTenlwcm93 c2tpIDxtLnN6eXByb3dza2lAc2Ftc3VuZy5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IEh1YWNh aSBDaGVuIDxjaGVuaGNAbGVtb3RlLmNvbT4NCj4gLS0tDQo+ICAgZHJpdmVycy9pbmZpbmli YW5kL2h3L210aGNhL210aGNhX21haW4uYyAgICAgICB8ICAgMiArLQ0KPiAgIGRyaXZlcnMv bWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1kbWEtY29udGlnLmMgfCAgIDIgKy0NCj4gICBk cml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYyAgICAgICAgICAgIHwgICA4ICst DQo+ICAgZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jICAgICAgICAgICB8 ICAzMiArKystLQ0KPiAgIGRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuaCAg ICAgICAgICAgfCAgMTQgKy0NCj4gICBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9t bHg0L21haW4uYyAgICAgIHwgICAyICstDQo+ICAgZHJpdmVycy9zcGkvc3BpLXF1cC5jICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArLQ0KPiAgIGRyaXZlcnMvdHR5L3Nlcmlh bC9tcHNjLmMgICAgICAgICAgICAgICAgICAgICAgfCAxNzkgKysrKysrKysrKysrKy0tLS0t LS0tLS0tLQ0KPiAgIGRyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMgICAgICAgICAgICAg ICAgICAgfCAgMTQgKy0NCj4gICBpbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmggICAgICAg ICAgICAgICAgICAgIHwgIDE3ICsrLQ0KDQpGb3IgdmlkZW9idWYyLWRtYS1jb250aWcsIHNl cmlhbC9zYW1zdW5nIGFuZCBkbWEtbWFwcGluZy5oOg0KDQpBY2tlZC1ieTogTWFyZWsgU3p5 cHJvd3NraSA8bS5zenlwcm93c2tpQHNhbXN1bmcuY29tPg0KDQoNCj4gICAxMCBmaWxlcyBj aGFuZ2VkLCAxNTAgaW5zZXJ0aW9ucygrKSwgMTI0IGRlbGV0aW9ucygtKQ0KPg0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYyBiL2Ry aXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMNCj4gaW5kZXggZTM2YTli Yy4uMDc4ZmU4ZCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNh L210aGNhX21haW4uYw0KPiArKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRo Y2FfbWFpbi5jDQo+IEBAIC00MTYsNyArNDE2LDcgQEAgc3RhdGljIGludCBtdGhjYV9pbml0 X2ljbShzdHJ1Y3QgbXRoY2FfZGV2ICptZGV2LA0KPiAgIA0KPiAgIAkvKiBDUFUgd3JpdGVz IHRvIG5vbi1yZXNlcnZlZCBNVFRzLCB3aGlsZSBIQ0EgbWlnaHQgRE1BIHRvIHJlc2VydmVk IG10dHMgKi8NCj4gICAJbWRldi0+bGltaXRzLnJlc2VydmVkX210dHMgPSBBTElHTihtZGV2 LT5saW1pdHMucmVzZXJ2ZWRfbXR0cyAqIG1kZXYtPmxpbWl0cy5tdHRfc2VnX3NpemUsDQo+ IC0JCQkJCSAgIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkpIC8gbWRldi0+bGltaXRzLm10 dF9zZWdfc2l6ZTsNCj4gKwkJCQkJICAgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoJm1kZXYt PnBkZXYtPmRldikpIC8gbWRldi0+bGltaXRzLm10dF9zZWdfc2l6ZTsNCj4gICANCj4gICAJ bWRldi0+bXJfdGFibGUubXR0X3RhYmxlID0gbXRoY2FfYWxsb2NfaWNtX3RhYmxlKG1kZXYs IGluaXRfaGNhLT5tdHRfYmFzZSwNCj4gICAJCQkJCQkJIG1kZXYtPmxpbWl0cy5tdHRfc2Vn X3NpemUsDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1 ZjItZG1hLWNvbnRpZy5jIGIvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdmlkZW9idWYyLWRt YS1jb250aWcuYw0KPiBpbmRleCA5ZjM4OWYzLi4xZjZhOWI3IDEwMDY0NA0KPiAtLS0gYS9k cml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItZG1hLWNvbnRpZy5jDQo+ICsrKyBi L2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1kbWEtY29udGlnLmMNCj4gQEAg LTQ4NCw3ICs0ODQsNyBAQCBzdGF0aWMgdm9pZCAqdmIyX2RjX2dldF91c2VycHRyKHN0cnVj dCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyB2YWRkciwNCj4gICAJaW50IHJldCA9IDA7 DQo+ICAgCXN0cnVjdCBzZ190YWJsZSAqc2d0Ow0KPiAgIAl1bnNpZ25lZCBsb25nIGNvbnRp Z19zaXplOw0KPiAtCXVuc2lnbmVkIGxvbmcgZG1hX2FsaWduID0gZG1hX2dldF9jYWNoZV9h bGlnbm1lbnQoKTsNCj4gKwl1bnNpZ25lZCBsb25nIGRtYV9hbGlnbiA9IGRtYV9nZXRfY2Fj aGVfYWxpZ25tZW50KGRldik7DQo+ICAgDQo+ICAgCS8qIE9ubHkgY2FjaGUgYWxpZ25lZCBE TUEgdHJhbnNmZXJzIGFyZSByZWxpYWJsZSAqLw0KPiAgIAlpZiAoIUlTX0FMSUdORUQodmFk ZHIgfCBzaXplLCBkbWFfYWxpZ24pKSB7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9l dGhlcm5ldC9icm9hZGNvbS9iNDQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29t L2I0NC5jDQo+IGluZGV4IGExMTI1ZDEuLjJmNmZmZTUgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2V0 aGVybmV0L2Jyb2FkY29tL2I0NC5jDQo+IEBAIC0yMzQ0LDYgKzIzNDQsMTAgQEAgc3RhdGlj IGludCBiNDRfaW5pdF9vbmUoc3RydWN0IHNzYl9kZXZpY2UgKnNkZXYsDQo+ICAgCXN0cnVj dCBuZXRfZGV2aWNlICpkZXY7DQo+ICAgCXN0cnVjdCBiNDQgKmJwOw0KPiAgIAlpbnQgZXJy Ow0KPiArCXVuc2lnbmVkIGludCBkbWFfZGVzY19hbGlnbl9zaXplID0gZG1hX2dldF9jYWNo ZV9hbGlnbm1lbnQoc2Rldi0+ZG1hX2Rldik7DQo+ICsNCj4gKwkvKiBTZXR1cCBwYXJhbWF0 ZXJzIGZvciBzeW5jaW5nIFJYL1RYIERNQSBkZXNjcmlwdG9ycyAqLw0KPiArCWRtYV9kZXNj X3N5bmNfc2l6ZSA9IG1heF90KHVuc2lnbmVkIGludCwgZG1hX2Rlc2NfYWxpZ25fc2l6ZSwg c2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpOw0KPiAgIA0KPiAgIAlpbnN0YW5jZSsrOw0KPiAg IA0KPiBAQCAtMjU4NywxMiArMjU5MSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBiNDRfcGNp X2V4aXQodm9pZCkNCj4gICANCj4gICBzdGF0aWMgaW50IF9faW5pdCBiNDRfaW5pdCh2b2lk KQ0KPiAgIHsNCj4gLQl1bnNpZ25lZCBpbnQgZG1hX2Rlc2NfYWxpZ25fc2l6ZSA9IGRtYV9n ZXRfY2FjaGVfYWxpZ25tZW50KCk7DQo+ICAgCWludCBlcnI7DQo+ICAgDQo+IC0JLyogU2V0 dXAgcGFyYW1hdGVycyBmb3Igc3luY2luZyBSWC9UWCBETUEgZGVzY3JpcHRvcnMgKi8NCj4g LQlkbWFfZGVzY19zeW5jX3NpemUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGRtYV9kZXNjX2Fs aWduX3NpemUsIHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpKTsNCj4gLQ0KPiAgIAllcnIgPSBi NDRfcGNpX2luaXQoKTsNCj4gICAJaWYgKGVycikNCj4gICAJCXJldHVybiBlcnI7DQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMgYi9kcml2 ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMNCj4gaW5kZXggN2ZlZmYyNC4uOGRj ZWJiMiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29y ZS5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYw0KPiBA QCAtMTAzMCw4ICsxMDMwLDkgQEAgc3RhdGljIGludCBlbWFjX3NldF9tYWNfYWRkcmVzcyhz dHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqc2EpDQo+ICAgDQo+ICAgc3RhdGljIGlu dCBlbWFjX3Jlc2l6ZV9yeF9yaW5nKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYsIGludCBu ZXdfbXR1KQ0KPiAgIHsNCj4gLQlpbnQgcnhfc3luY19zaXplID0gZW1hY19yeF9zeW5jX3Np emUobmV3X210dSk7DQo+IC0JaW50IHJ4X3NrYl9zaXplID0gZW1hY19yeF9za2Jfc2l6ZShu ZXdfbXR1KTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gJmRldi0+b2ZkZXYtPmRl djsNCj4gKwlpbnQgcnhfc2tiX3NpemUgPSBlbWFjX3J4X3NrYl9zaXplKGRtYV9kZXYsIG5l d19tdHUpOw0KPiArCWludCByeF9zeW5jX3NpemUgPSBlbWFjX3J4X3N5bmNfc2l6ZShkbWFf ZGV2LCBuZXdfbXR1KTsNCj4gICAJaW50IGksIHJldCA9IDA7DQo+ICAgCWludCBtcjFfanVt Ym9fYml0X2NoYW5nZSA9IDA7DQo+ICAgDQo+IEBAIC0xMDc0LDcgKzEwNzUsNyBAQCBzdGF0 aWMgaW50IGVtYWNfcmVzaXplX3J4X3Jpbmcoc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldiwg aW50IG5ld19tdHUpDQo+ICAgCQlCVUdfT04oIWRldi0+cnhfc2tiW2ldKTsNCj4gICAJCWRl dl9rZnJlZV9za2IoZGV2LT5yeF9za2JbaV0pOw0KPiAgIA0KPiAtCQlza2JfcmVzZXJ2ZShz a2IsIEVNQUNfUlhfU0tCX0hFQURST09NICsgMik7DQo+ICsJCXNrYl9yZXNlcnZlKHNrYiwg RU1BQ19SWF9TS0JfSEVBRFJPT00oZG1hX2RldikgKyAyKTsNCj4gICAJCWRldi0+cnhfZGVz Y1tpXS5kYXRhX3B0ciA9DQo+ICAgCQkgICAgZG1hX21hcF9zaW5nbGUoJmRldi0+b2ZkZXYt PmRldiwgc2tiLT5kYXRhIC0gMiwgcnhfc3luY19zaXplLA0KPiAgIAkJCQkgICBETUFfRlJP TV9ERVZJQ0UpICsgMjsNCj4gQEAgLTExMTUsMjAgKzExMTYsMjEgQEAgc3RhdGljIGludCBl bWFjX3Jlc2l6ZV9yeF9yaW5nKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYsIGludCBuZXdf bXR1KQ0KPiAgIHN0YXRpYyBpbnQgZW1hY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNl ICpuZGV2LCBpbnQgbmV3X210dSkNCj4gICB7DQo+ICAgCXN0cnVjdCBlbWFjX2luc3RhbmNl ICpkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2 ID0gJmRldi0+b2ZkZXYtPmRldjsNCj4gICAJaW50IHJldCA9IDA7DQo+ICAgDQo+ICAgCURC RyhkZXYsICJjaGFuZ2VfbXR1KCVkKSIgTkwsIG5ld19tdHUpOw0KPiAgIA0KPiAgIAlpZiAo bmV0aWZfcnVubmluZyhuZGV2KSkgew0KPiAgIAkJLyogQ2hlY2sgaWYgd2UgcmVhbGx5IG5l ZWQgdG8gcmVpbml0aWFsaXplIFJYIHJpbmcgKi8NCj4gLQkJaWYgKGVtYWNfcnhfc2tiX3Np emUobmRldi0+bXR1KSAhPSBlbWFjX3J4X3NrYl9zaXplKG5ld19tdHUpKQ0KPiArCQlpZiAo ZW1hY19yeF9za2Jfc2l6ZShkbWFfZGV2LCBuZGV2LT5tdHUpICE9IGVtYWNfcnhfc2tiX3Np emUoZG1hX2RldiwgbmV3X210dSkpDQo+ICAgCQkJcmV0ID0gZW1hY19yZXNpemVfcnhfcmlu ZyhkZXYsIG5ld19tdHUpOw0KPiAgIAl9DQo+ICAgDQo+ICAgCWlmICghcmV0KSB7DQo+ICAg CQluZGV2LT5tdHUgPSBuZXdfbXR1Ow0KPiAtCQlkZXYtPnJ4X3NrYl9zaXplID0gZW1hY19y eF9za2Jfc2l6ZShuZXdfbXR1KTsNCj4gLQkJZGV2LT5yeF9zeW5jX3NpemUgPSBlbWFjX3J4 X3N5bmNfc2l6ZShuZXdfbXR1KTsNCj4gKwkJZGV2LT5yeF9za2Jfc2l6ZSA9IGVtYWNfcnhf c2tiX3NpemUoZG1hX2RldiwgbmV3X210dSk7DQo+ICsJCWRldi0+cnhfc3luY19zaXplID0g ZW1hY19yeF9zeW5jX3NpemUoZG1hX2RldiwgbmV3X210dSk7DQo+ICAgCX0NCj4gICANCj4g ICAJcmV0dXJuIHJldDsNCj4gQEAgLTExNzEsNiArMTE3Myw3IEBAIHN0YXRpYyB2b2lkIGVt YWNfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2KQ0KPiAgIHN0YXRp YyBpbmxpbmUgaW50IGVtYWNfYWxsb2Nfcnhfc2tiKHN0cnVjdCBlbWFjX2luc3RhbmNlICpk ZXYsIGludCBzbG90LA0KPiAgIAkJCQkgICAgZ2ZwX3QgZmxhZ3MpDQo+ICAgew0KPiArCXN0 cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSAmZGV2LT5vZmRldi0+ZGV2Ow0KPiAgIAlzdHJ1Y3Qg c2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKGRldi0+cnhfc2tiX3NpemUsIGZsYWdzKTsNCj4g ICAJaWYgKHVubGlrZWx5KCFza2IpKQ0KPiAgIAkJcmV0dXJuIC1FTk9NRU07DQo+IEBAIC0x MTc4LDcgKzExODEsNyBAQCBzdGF0aWMgaW5saW5lIGludCBlbWFjX2FsbG9jX3J4X3NrYihz dHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2LCBpbnQgc2xvdCwNCj4gICAJZGV2LT5yeF9za2Jb c2xvdF0gPSBza2I7DQo+ICAgCWRldi0+cnhfZGVzY1tzbG90XS5kYXRhX2xlbiA9IDA7DQo+ ICAgDQo+IC0Jc2tiX3Jlc2VydmUoc2tiLCBFTUFDX1JYX1NLQl9IRUFEUk9PTSArIDIpOw0K PiArCXNrYl9yZXNlcnZlKHNrYiwgRU1BQ19SWF9TS0JfSEVBRFJPT00oZG1hX2RldikgKyAy KTsNCj4gICAJZGV2LT5yeF9kZXNjW3Nsb3RdLmRhdGFfcHRyID0NCj4gICAJICAgIGRtYV9t YXBfc2luZ2xlKCZkZXYtPm9mZGV2LT5kZXYsIHNrYi0+ZGF0YSAtIDIsIGRldi0+cnhfc3lu Y19zaXplLA0KPiAgIAkJCSAgIERNQV9GUk9NX0RFVklDRSkgKyAyOw0KPiBAQCAtMTY0OSwx MiArMTY1MiwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZW1hY19yZWN5Y2xlX3J4X3NrYihz dHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2LCBpbnQgc2xvdCwNCj4gICAJCQkJICAgICAgIGlu dCBsZW4pDQo+ICAgew0KPiAgIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2LT5yeF9za2Jb c2xvdF07DQo+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9ICZkZXYtPm9mZGV2LT5kZXY7 DQo+ICAgDQo+ICAgCURCRzIoZGV2LCAicmVjeWNsZSAlZCAlZCIgTkwsIHNsb3QsIGxlbik7 DQo+ICAgDQo+ICAgCWlmIChsZW4pDQo+IC0JCWRtYV9tYXBfc2luZ2xlKCZkZXYtPm9mZGV2 LT5kZXYsIHNrYi0+ZGF0YSAtIDIsDQo+IC0JCQkgICAgICAgRU1BQ19ETUFfQUxJR04obGVu ICsgMiksIERNQV9GUk9NX0RFVklDRSk7DQo+ICsJCWRtYV9tYXBfc2luZ2xlKGRtYV9kZXYs IHNrYi0+ZGF0YSAtIDIsDQo+ICsJCQkgICAgICAgRU1BQ19ETUFfQUxJR04oZG1hX2Rldiwg bGVuICsgMiksIERNQV9GUk9NX0RFVklDRSk7DQo+ICAgDQo+ICAgCWRldi0+cnhfZGVzY1tz bG90XS5kYXRhX2xlbiA9IDA7DQo+ICAgCXdtYigpOw0KPiBAQCAtMTcyNyw2ICsxNzMxLDcg QEAgc3RhdGljIGludCBlbWFjX3BvbGxfcngodm9pZCAqcGFyYW0sIGludCBidWRnZXQpDQo+ ICAgew0KPiAgIAlzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2ID0gcGFyYW07DQo+ICAgCWlu dCBzbG90ID0gZGV2LT5yeF9zbG90LCByZWNlaXZlZCA9IDA7DQo+ICsJc3RydWN0IGRldmlj ZSAqZG1hX2RldiA9ICZkZXYtPm9mZGV2LT5kZXY7DQo+ICAgDQo+ICAgCURCRzIoZGV2LCAi cG9sbF9yeCglZCkiIE5MLCBidWRnZXQpOw0KPiAgIA0KPiBAQCAtMTc2MywxMSArMTc2OCwx MSBAQCBzdGF0aWMgaW50IGVtYWNfcG9sbF9yeCh2b2lkICpwYXJhbSwgaW50IGJ1ZGdldCkN Cj4gICANCj4gICAJCWlmIChsZW4gJiYgbGVuIDwgRU1BQ19SWF9DT1BZX1RIUkVTSCkgew0K PiAgIAkJCXN0cnVjdCBza19idWZmICpjb3B5X3NrYiA9DQo+IC0JCQkgICAgYWxsb2Nfc2ti KGxlbiArIEVNQUNfUlhfU0tCX0hFQURST09NICsgMiwgR0ZQX0FUT01JQyk7DQo+ICsJCQkg ICAgYWxsb2Nfc2tiKGxlbiArIEVNQUNfUlhfU0tCX0hFQURST09NKGRtYV9kZXYpICsgMiwg R0ZQX0FUT01JQyk7DQo+ICAgCQkJaWYgKHVubGlrZWx5KCFjb3B5X3NrYikpDQo+ICAgCQkJ CWdvdG8gb29tOw0KPiAgIA0KPiAtCQkJc2tiX3Jlc2VydmUoY29weV9za2IsIEVNQUNfUlhf U0tCX0hFQURST09NICsgMik7DQo+ICsJCQlza2JfcmVzZXJ2ZShjb3B5X3NrYiwgRU1BQ19S WF9TS0JfSEVBRFJPT00oZG1hX2RldikgKyAyKTsNCj4gICAJCQltZW1jcHkoY29weV9za2It PmRhdGEgLSAyLCBza2ItPmRhdGEgLSAyLCBsZW4gKyAyKTsNCj4gICAJCQllbWFjX3JlY3lj bGVfcnhfc2tiKGRldiwgc2xvdCwgbGVuKTsNCj4gICAJCQlza2IgPSBjb3B5X3NrYjsNCj4g QEAgLTI5OTgsNiArMzAwMyw3IEBAIHN0YXRpYyBpbnQgZW1hY19wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpvZmRldikNCj4gICAJc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldjsN Cj4gICAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5kZXYub2Zfbm9kZTsNCj4g ICAJc3RydWN0IGRldmljZV9ub2RlICoqYmxpc3QgPSBOVUxMOw0KPiArCXN0cnVjdCBkZXZp Y2UgKmRtYV9kZXYgPSAmb2ZkZXYtPmRldjsNCj4gICAJaW50IGVyciwgaTsNCj4gICANCj4g ICAJLyogU2tpcCB1bnVzZWQvdW53aXJlZCBFTUFDUy4gIFdlIGxlYXZlIHRoZSBjaGVjayBm b3IgYW4gdW51c2VkDQo+IEBAIC0zMDc3LDggKzMwODMsOCBAQCBzdGF0aWMgaW50IGVtYWNf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpDQo+ICAgCQkgICAgICAgbnAs IGRldi0+bWFsX2Rldi0+ZGV2Lm9mX25vZGUpOw0KPiAgIAkJZ290byBlcnJfcmVsX2RlcHM7 DQo+ICAgCX0NCj4gLQlkZXYtPnJ4X3NrYl9zaXplID0gZW1hY19yeF9za2Jfc2l6ZShuZGV2 LT5tdHUpOw0KPiAtCWRldi0+cnhfc3luY19zaXplID0gZW1hY19yeF9zeW5jX3NpemUobmRl di0+bXR1KTsNCj4gKwlkZXYtPnJ4X3NrYl9zaXplID0gZW1hY19yeF9za2Jfc2l6ZShkbWFf ZGV2LCBuZGV2LT5tdHUpOw0KPiArCWRldi0+cnhfc3luY19zaXplID0gZW1hY19yeF9zeW5j X3NpemUoZG1hX2RldiwgbmRldi0+bXR1KTsNCj4gICANCj4gICAJLyogR2V0IHBvaW50ZXJz IHRvIEJEIHJpbmdzICovDQo+ICAgCWRldi0+dHhfZGVzYyA9DQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmggYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9pYm0vZW1hYy9jb3JlLmgNCj4gaW5kZXggMzY5ZGUyYy4uODEwN2MzMiAxMDA2NDQN Cj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5oDQo+ICsrKyBi L2RyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuaA0KPiBAQCAtNjgsMjIgKzY4 LDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGVtYWNfcnhfc2l6ZShpbnQgbXR1KQ0KPiAgIAkJ cmV0dXJuIG1hbF9yeF9zaXplKEVUSF9EQVRBX0xFTiArIEVNQUNfTVRVX09WRVJIRUFEKTsN Cj4gICB9DQo+ICAgDQo+IC0jZGVmaW5lIEVNQUNfRE1BX0FMSUdOKHgpCQlBTElHTigoeCks IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkpDQo+ICsjZGVmaW5lIEVNQUNfRE1BX0FMSUdO KGQsIHgpCQlBTElHTigoeCksIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KGQpKQ0KPiAgIA0K PiAtI2RlZmluZSBFTUFDX1JYX1NLQl9IRUFEUk9PTQkJXA0KPiAtCUVNQUNfRE1BX0FMSUdO KENPTkZJR19JQk1fRU1BQ19SWF9TS0JfSEVBRFJPT00pDQo+ICsjZGVmaW5lIEVNQUNfUlhf U0tCX0hFQURST09NKGQpCQlcDQo+ICsJRU1BQ19ETUFfQUxJR04oZCwgQ09ORklHX0lCTV9F TUFDX1JYX1NLQl9IRUFEUk9PTSkNCj4gICANCj4gICAvKiBTaXplIG9mIFJYIHNrYiBmb3Ig dGhlIGdpdmVuIE1UVSAqLw0KPiAtc3RhdGljIGlubGluZSBpbnQgZW1hY19yeF9za2Jfc2l6 ZShpbnQgbXR1KQ0KPiArc3RhdGljIGlubGluZSBpbnQgZW1hY19yeF9za2Jfc2l6ZShzdHJ1 Y3QgZGV2aWNlICpkZXYsIGludCBtdHUpDQo+ICAgew0KPiAgIAlpbnQgc2l6ZSA9IG1heCht dHUgKyBFTUFDX01UVV9PVkVSSEVBRCwgZW1hY19yeF9zaXplKG10dSkpOw0KPiAtCXJldHVy biBFTUFDX0RNQV9BTElHTihzaXplICsgMikgKyBFTUFDX1JYX1NLQl9IRUFEUk9PTTsNCj4g KwlyZXR1cm4gRU1BQ19ETUFfQUxJR04oZGV2LCBzaXplICsgMikgKyBFTUFDX1JYX1NLQl9I RUFEUk9PTTsNCj4gICB9DQo+ICAgDQo+ICAgLyogUlggRE1BIHN5bmMgc2l6ZSAqLw0KPiAt c3RhdGljIGlubGluZSBpbnQgZW1hY19yeF9zeW5jX3NpemUoaW50IG10dSkNCj4gK3N0YXRp YyBpbmxpbmUgaW50IGVtYWNfcnhfc3luY19zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50 IG10dSkNCj4gICB7DQo+IC0JcmV0dXJuIEVNQUNfRE1BX0FMSUdOKGVtYWNfcnhfc2l6ZSht dHUpICsgMik7DQo+ICsJcmV0dXJuIEVNQUNfRE1BX0FMSUdOKGRldiwgZW1hY19yeF9zaXpl KG10dSkgKyAyKTsNCj4gICB9DQo+ICAgDQo+ICAgLyogRHJpdmVyIHN0YXRpc3RjcyBpcyBz cGxpdCBpbnRvIHR3byBwYXJ0cyB0byBtYWtlIGl0IG1vcmUgY2FjaGUgZnJpZW5kbHk6DQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4u YyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5jDQo+IGluZGV4 IGU2MWM5OWUuLmJjMTQ2ZGQgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0 L21lbGxhbm94L21seDQvbWFpbi5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21l bGxhbm94L21seDQvbWFpbi5jDQo+IEBAIC0xNjYwLDcgKzE2NjAsNyBAQCBzdGF0aWMgaW50 IG1seDRfaW5pdF9pY20oc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2Rldl9j YXAgKmRldl9jYXAsDQo+ICAgCSAqLw0KPiAgIAlkZXYtPmNhcHMucmVzZXJ2ZWRfbXR0cyA9 DQo+ICAgCQlBTElHTihkZXYtPmNhcHMucmVzZXJ2ZWRfbXR0cyAqIGRldi0+Y2Fwcy5tdHRf ZW50cnlfc3osDQo+IC0JCSAgICAgIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkpIC8gZGV2 LT5jYXBzLm10dF9lbnRyeV9zejsNCj4gKwkJICAgICAgZG1hX2dldF9jYWNoZV9hbGlnbm1l bnQoJmRldi0+cGVyc2lzdC0+cGRldi0+ZGV2KSkgLyBkZXYtPmNhcHMubXR0X2VudHJ5X3N6 Ow0KPiAgIA0KPiAgIAllcnIgPSBtbHg0X2luaXRfaWNtX3RhYmxlKGRldiwgJnByaXYtPm1y X3RhYmxlLm10dF90YWJsZSwNCj4gICAJCQkJICBpbml0X2hjYS0+bXR0X2Jhc2UsDQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktcXVwLmMgYi9kcml2ZXJzL3NwaS9zcGktcXVw LmMNCj4gaW5kZXggOTc0YThjZS4uZTZkYTY2ZSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9z cGkvc3BpLXF1cC5jDQo+ICsrKyBiL2RyaXZlcnMvc3BpL3NwaS1xdXAuYw0KPiBAQCAtODYy LDcgKzg2Miw3IEBAIHN0YXRpYyBib29sIHNwaV9xdXBfY2FuX2RtYShzdHJ1Y3Qgc3BpX21h c3RlciAqbWFzdGVyLCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLA0KPiAgIAkJCSAgICBzdHJ1 Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyKQ0KPiAgIHsNCj4gICAJc3RydWN0IHNwaV9xdXAgKnF1 cCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsNCj4gLQlzaXplX3QgZG1hX2Fs aWduID0gZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKTsNCj4gKwlzaXplX3QgZG1hX2FsaWdu ID0gZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQocXVwLT5kZXYpOw0KPiAgIAlpbnQgbl93b3Jk czsNCj4gICANCj4gICAJaWYgKHhmZXItPnJ4X2J1Zikgew0KPiBAQCAtMTAzOCw3ICsxMDM4 LDcgQEAgc3RhdGljIGludCBzcGlfcXVwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpDQo+ICAgCW1hc3Rlci0+dHJhbnNmZXJfb25lID0gc3BpX3F1cF90cmFuc2Zlcl9v bmU7DQo+ICAgCW1hc3Rlci0+ZGV2Lm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsNCj4g ICAJbWFzdGVyLT5hdXRvX3J1bnRpbWVfcG0gPSB0cnVlOw0KPiAtCW1hc3Rlci0+ZG1hX2Fs aWdubWVudCA9IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCk7DQo+ICsJbWFzdGVyLT5kbWFf YWxpZ25tZW50ID0gZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoZGV2KTsNCj4gICAJbWFzdGVy LT5tYXhfZG1hX2xlbiA9IFNQSV9NQVhfWEZFUjsNCj4gICANCj4gICAJcGxhdGZvcm1fc2V0 X2RydmRhdGEocGRldiwgbWFzdGVyKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3Nl cmlhbC9tcHNjLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbXBzYy5jDQo+IGluZGV4IDY3ZmZl Y2MuLjhiNWQwZGUgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tcHNjLmMN Cj4gKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21wc2MuYw0KPiBAQCAtODEsMTkgKzgxLDE5 IEBADQo+ICAgICogTnVtYmVyIG9mIFR4ICYgUnggZGVzY3JpcHRvcnMgbXVzdCBiZSBwb3dl cnMgb2YgMi4NCj4gICAgKi8NCj4gICAjZGVmaW5lCU1QU0NfUlhSX0VOVFJJRVMJMzINCj4g LSNkZWZpbmUJTVBTQ19SWFJFX1NJWkUJCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkNCj4g LSNkZWZpbmUJTVBTQ19SWFJfU0laRQkJKE1QU0NfUlhSX0VOVFJJRVMgKiBNUFNDX1JYUkVf U0laRSkNCj4gLSNkZWZpbmUJTVBTQ19SWEJFX1NJWkUJCWRtYV9nZXRfY2FjaGVfYWxpZ25t ZW50KCkNCj4gLSNkZWZpbmUJTVBTQ19SWEJfU0laRQkJKE1QU0NfUlhSX0VOVFJJRVMgKiBN UFNDX1JYQkVfU0laRSkNCj4gKyNkZWZpbmUJTVBTQ19SWFJFX1NJWkUoZCkJZG1hX2dldF9j YWNoZV9hbGlnbm1lbnQoZCkNCj4gKyNkZWZpbmUJTVBTQ19SWFJfU0laRShkKQkoTVBTQ19S WFJfRU5UUklFUyAqIE1QU0NfUlhSRV9TSVpFKGQpKQ0KPiArI2RlZmluZQlNUFNDX1JYQkVf U0laRShkKQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudChkKQ0KPiArI2RlZmluZQlNUFNDX1JY Ql9TSVpFKGQpCShNUFNDX1JYUl9FTlRSSUVTICogTVBTQ19SWEJFX1NJWkUoZCkpDQo+ICAg DQo+ICAgI2RlZmluZQlNUFNDX1RYUl9FTlRSSUVTCTMyDQo+IC0jZGVmaW5lCU1QU0NfVFhS RV9TSVpFCQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpDQo+IC0jZGVmaW5lCU1QU0NfVFhS X1NJWkUJCShNUFNDX1RYUl9FTlRSSUVTICogTVBTQ19UWFJFX1NJWkUpDQo+IC0jZGVmaW5l CU1QU0NfVFhCRV9TSVpFCQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpDQo+IC0jZGVmaW5l CU1QU0NfVFhCX1NJWkUJCShNUFNDX1RYUl9FTlRSSUVTICogTVBTQ19UWEJFX1NJWkUpDQo+ ICsjZGVmaW5lCU1QU0NfVFhSRV9TSVpFKGQpCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KGQp DQo+ICsjZGVmaW5lCU1QU0NfVFhSX1NJWkUoZCkJKE1QU0NfVFhSX0VOVFJJRVMgKiBNUFND X1RYUkVfU0laRShkKSkNCj4gKyNkZWZpbmUJTVBTQ19UWEJFX1NJWkUoZCkJZG1hX2dldF9j YWNoZV9hbGlnbm1lbnQoZCkNCj4gKyNkZWZpbmUJTVBTQ19UWEJfU0laRShkKQkoTVBTQ19U WFJfRU5UUklFUyAqIE1QU0NfVFhCRV9TSVpFKGQpKQ0KPiAgIA0KPiAtI2RlZmluZQlNUFND X0RNQV9BTExPQ19TSVpFCShNUFNDX1JYUl9TSVpFICsgTVBTQ19SWEJfU0laRSArIE1QU0Nf VFhSX1NJWkUgXA0KPiAtCQkrIE1QU0NfVFhCX1NJWkUgKyBkbWFfZ2V0X2NhY2hlX2FsaWdu bWVudCgpIC8qIGZvciBhbGlnbm1lbnQgKi8pDQo+ICsjZGVmaW5lCU1QU0NfRE1BX0FMTE9D X1NJWkUoZCkJKE1QU0NfUlhSX1NJWkUoZCkgKyBNUFNDX1JYQl9TSVpFKGQpICsgTVBTQ19U WFJfU0laRShkKSBcDQo+ICsJCSsgTVBTQ19UWEJfU0laRShkKSArIGRtYV9nZXRfY2FjaGVf YWxpZ25tZW50KGQpIC8qIGZvciBhbGlnbm1lbnQgKi8pDQo+ICAgDQo+ICAgLyogUnggYW5k IFR4IFJpbmcgZW50cnkgZGVzY3JpcHRvcnMgLS0gYXNzdW1lIGVudHJ5IHNpemUgaXMgPD0g Y2FjaGVsaW5lIHNpemUgKi8NCj4gICBzdHJ1Y3QgbXBzY19yeF9kZXNjIHsNCj4gQEAgLTUy MCwyMiArNTIwLDIzIEBAIHN0YXRpYyB1aW50IG1wc2Nfc2RtYV90eF9hY3RpdmUoc3RydWN0 IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4gICBzdGF0aWMgdm9pZCBtcHNjX3NkbWFfc3RhcnRf dHgoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4gICB7DQo+ICAgCXN0cnVjdCBtcHNj X3R4X2Rlc2MgKnR4cmUsICp0eHJlX3A7DQo+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9 IHBpLT5wb3J0LmRldjsNCj4gICANCj4gICAJLyogSWYgdHggaXNuJ3QgcnVubmluZyAmIHRo ZXJlJ3MgYSBkZXNjIHJlYWR5IHRvIGdvLCBzdGFydCBpdCAqLw0KPiAgIAlpZiAoIW1wc2Nf c2RtYV90eF9hY3RpdmUocGkpKSB7DQo+ICAgCQl0eHJlID0gKHN0cnVjdCBtcHNjX3R4X2Rl c2MgKikocGktPnR4cg0KPiAtCQkJCSsgKHBpLT50eHJfdGFpbCAqIE1QU0NfVFhSRV9TSVpF KSk7DQo+IC0JCWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKil0eHJlLCBN UFNDX1RYUkVfU0laRSwNCj4gKwkJCQkrIChwaS0+dHhyX3RhaWwgKiBNUFNDX1RYUkVfU0la RShkbWFfZGV2KSkpOw0KPiArCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lk ICopdHhyZSwgTVBTQ19UWFJFX1NJWkUoZG1hX2RldiksDQo+ICAgCQkJCURNQV9GUk9NX0RF VklDRSk7DQo+ICAgI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05G SUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQ0KPiAgIAkJaWYgKHBpLT5jYWNoZV9tZ210KSAvKiBH VDY0Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+ICAgCQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFu Z2UoKHVsb25nKXR4cmUsDQo+IC0JCQkJCSh1bG9uZyl0eHJlICsgTVBTQ19UWFJFX1NJWkUp Ow0KPiArCQkJCQkodWxvbmcpdHhyZSArIE1QU0NfVFhSRV9TSVpFKGRtYV9kZXYpKTsNCj4g ICAjZW5kaWYNCj4gICANCj4gICAJCWlmIChiZTMyX3RvX2NwdSh0eHJlLT5jbWRzdGF0KSAm IFNETUFfREVTQ19DTURTVEFUX08pIHsNCj4gICAJCQl0eHJlX3AgPSAoc3RydWN0IG1wc2Nf dHhfZGVzYyAqKQ0KPiAtCQkJCShwaS0+dHhyX3AgKyAocGktPnR4cl90YWlsICogTVBTQ19U WFJFX1NJWkUpKTsNCj4gKwkJCQkocGktPnR4cl9wICsgKHBpLT50eHJfdGFpbCAqIE1QU0Nf VFhSRV9TSVpFKGRtYV9kZXYpKSk7DQo+ICAgDQo+ICAgCQkJbXBzY19zZG1hX3NldF90eF9y aW5nKHBpLCB0eHJlX3ApOw0KPiAgIAkJCW1wc2Nfc2RtYV9jbWQocGksIFNETUFfU0RDTV9T VEQgfCBTRE1BX1NEQ01fVFhEKTsNCj4gQEAgLTczOCw3ICs3MzksNyBAQCBzdGF0aWMgdm9p ZCBtcHNjX2luaXRfaHcoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4gICANCj4gICAJ bXBzY19icmdfaW5pdChwaSwgcGktPmJyZ19jbGtfc3JjKTsNCj4gICAJbXBzY19icmdfZW5h YmxlKHBpKTsNCj4gLQltcHNjX3NkbWFfaW5pdChwaSwgZG1hX2dldF9jYWNoZV9hbGlnbm1l bnQoKSk7CS8qIGJ1cnN0IGEgY2FjaGVsaW5lICovDQo+ICsJbXBzY19zZG1hX2luaXQocGks IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHBpLT5wb3J0LmRldikpOwkvKiBidXJzdCBhIGNh Y2hlbGluZSAqLw0KPiAgIAltcHNjX3NkbWFfc3RvcChwaSk7DQo+ICAgCW1wc2NfaHdfaW5p dChwaSk7DQo+ICAgfQ0KPiBAQCAtNzQ2LDYgKzc0Nyw3IEBAIHN0YXRpYyB2b2lkIG1wc2Nf aW5pdF9odyhzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPiAgIHN0YXRpYyBpbnQgbXBz Y19hbGxvY19yaW5nX21lbShzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPiAgIHsNCj4g ICAJaW50IHJjID0gMDsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBvcnQu ZGV2Ow0KPiAgIA0KPiAgIAlwcl9kZWJ1ZygibXBzY19hbGxvY19yaW5nX21lbVslZF06IEFs bG9jYXRpbmcgcmluZyBtZW1cbiIsDQo+ICAgCQlwaS0+cG9ydC5saW5lKTsNCj4gQEAgLTc1 NSw3ICs3NTcsNyBAQCBzdGF0aWMgaW50IG1wc2NfYWxsb2NfcmluZ19tZW0oc3RydWN0IG1w c2NfcG9ydF9pbmZvICpwaSkNCj4gICAJCQlwcmludGsoS0VSTl9FUlIgIk1QU0M6IEluYWRl cXVhdGUgRE1BIHN1cHBvcnRcbiIpOw0KPiAgIAkJCXJjID0gLUVOWElPOw0KPiAgIAkJfSBl bHNlIGlmICgocGktPmRtYV9yZWdpb24gPSBkbWFfYWxsb2NfYXR0cnMocGktPnBvcnQuZGV2 LA0KPiAtCQkJCQkJTVBTQ19ETUFfQUxMT0NfU0laRSwNCj4gKwkJCQkJCU1QU0NfRE1BX0FM TE9DX1NJWkUoZG1hX2RldiksDQo+ICAgCQkJCQkJJnBpLT5kbWFfcmVnaW9uX3AsIEdGUF9L RVJORUwsDQo+ICAgCQkJCQkJRE1BX0FUVFJfTk9OX0NPTlNJU1RFTlQpKQ0KPiAgIAkJCQk9 PSBOVUxMKSB7DQo+IEBAIC03NjksMTAgKzc3MSwxMiBAQCBzdGF0aWMgaW50IG1wc2NfYWxs b2NfcmluZ19tZW0oc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4gICANCj4gICBzdGF0 aWMgdm9pZCBtcHNjX2ZyZWVfcmluZ19tZW0oc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkN Cj4gICB7DQo+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRldjsNCj4g Kw0KPiAgIAlwcl9kZWJ1ZygibXBzY19mcmVlX3JpbmdfbWVtWyVkXTogRnJlZWluZyByaW5n IG1lbVxuIiwgcGktPnBvcnQubGluZSk7DQo+ICAgDQo+ICAgCWlmIChwaS0+ZG1hX3JlZ2lv bikgew0KPiAtCQlkbWFfZnJlZV9hdHRycyhwaS0+cG9ydC5kZXYsIE1QU0NfRE1BX0FMTE9D X1NJWkUsDQo+ICsJCWRtYV9mcmVlX2F0dHJzKHBpLT5wb3J0LmRldiwgTVBTQ19ETUFfQUxM T0NfU0laRShkbWFfZGV2KSwNCj4gICAJCQkJcGktPmRtYV9yZWdpb24sIHBpLT5kbWFfcmVn aW9uX3AsDQo+ICAgCQkJCURNQV9BVFRSX05PTl9DT05TSVNURU5UKTsNCj4gICAJCXBpLT5k bWFfcmVnaW9uID0gTlVMTDsNCj4gQEAgLTc4NCw2ICs3ODgsNyBAQCBzdGF0aWMgdm9pZCBt cHNjX2luaXRfcmluZ3Moc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4gICB7DQo+ICAg CXN0cnVjdCBtcHNjX3J4X2Rlc2MgKnJ4cmU7DQo+ICAgCXN0cnVjdCBtcHNjX3R4X2Rlc2Mg KnR4cmU7DQo+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRldjsNCj4g ICAJZG1hX2FkZHJfdCBkcCwgZHBfcDsNCj4gICAJdTggKmJwLCAqYnBfcDsNCj4gICAJaW50 IGk7DQo+IEBAIC03OTIsMTQgKzc5NywxNCBAQCBzdGF0aWMgdm9pZCBtcHNjX2luaXRfcmlu Z3Moc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4gICANCj4gICAJQlVHX09OKHBpLT5k bWFfcmVnaW9uID09IE5VTEwpOw0KPiAgIA0KPiAtCW1lbXNldChwaS0+ZG1hX3JlZ2lvbiwg MCwgTVBTQ19ETUFfQUxMT0NfU0laRSk7DQo+ICsJbWVtc2V0KHBpLT5kbWFfcmVnaW9uLCAw LCBNUFNDX0RNQV9BTExPQ19TSVpFKGRtYV9kZXYpKTsNCj4gICANCj4gICAJLyoNCj4gICAJ ICogRGVzY3JpcHRvcnMgJiBidWZmZXJzIGFyZSBtdWx0aXBsZXMgb2YgY2FjaGVsaW5lIHNp emUgYW5kIG11c3QgYmUNCj4gICAJICogY2FjaGVsaW5lIGFsaWduZWQuDQo+ICAgCSAqLw0K PiAtCWRwID0gQUxJR04oKHUzMilwaS0+ZG1hX3JlZ2lvbiwgZG1hX2dldF9jYWNoZV9hbGln bm1lbnQoKSk7DQo+IC0JZHBfcCA9IEFMSUdOKCh1MzIpcGktPmRtYV9yZWdpb25fcCwgZG1h X2dldF9jYWNoZV9hbGlnbm1lbnQoKSk7DQo+ICsJZHAgPSBBTElHTigodTMyKXBpLT5kbWFf cmVnaW9uLCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudChkbWFfZGV2KSk7DQo+ICsJZHBfcCA9 IEFMSUdOKCh1MzIpcGktPmRtYV9yZWdpb25fcCwgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQo ZG1hX2RldikpOw0KPiAgIA0KPiAgIAkvKg0KPiAgIAkgKiBQYXJ0aXRpb24gZG1hIHJlZ2lv biBpbnRvIHJ4IHJpbmcgZGVzY3JpcHRvciwgcnggYnVmZmVycywNCj4gQEAgLTgwNywyMCAr ODEyLDIwIEBAIHN0YXRpYyB2b2lkIG1wc2NfaW5pdF9yaW5ncyhzdHJ1Y3QgbXBzY19wb3J0 X2luZm8gKnBpKQ0KPiAgIAkgKi8NCj4gICAJcGktPnJ4ciA9IGRwOw0KPiAgIAlwaS0+cnhy X3AgPSBkcF9wOw0KPiAtCWRwICs9IE1QU0NfUlhSX1NJWkU7DQo+IC0JZHBfcCArPSBNUFND X1JYUl9TSVpFOw0KPiArCWRwICs9IE1QU0NfUlhSX1NJWkUoZG1hX2Rldik7DQo+ICsJZHBf cCArPSBNUFNDX1JYUl9TSVpFKGRtYV9kZXYpOw0KPiAgIA0KPiAgIAlwaS0+cnhiID0gKHU4 ICopZHA7DQo+ICAgCXBpLT5yeGJfcCA9ICh1OCAqKWRwX3A7DQo+IC0JZHAgKz0gTVBTQ19S WEJfU0laRTsNCj4gLQlkcF9wICs9IE1QU0NfUlhCX1NJWkU7DQo+ICsJZHAgKz0gTVBTQ19S WEJfU0laRShkbWFfZGV2KTsNCj4gKwlkcF9wICs9IE1QU0NfUlhCX1NJWkUoZG1hX2Rldik7 DQo+ICAgDQo+ICAgCXBpLT5yeHJfcG9zbiA9IDA7DQo+ICAgDQo+ICAgCXBpLT50eHIgPSBk cDsNCj4gICAJcGktPnR4cl9wID0gZHBfcDsNCj4gLQlkcCArPSBNUFNDX1RYUl9TSVpFOw0K PiAtCWRwX3AgKz0gTVBTQ19UWFJfU0laRTsNCj4gKwlkcCArPSBNUFNDX1RYUl9TSVpFKGRt YV9kZXYpOw0KPiArCWRwX3AgKz0gTVBTQ19UWFJfU0laRShkbWFfZGV2KTsNCj4gICANCj4g ICAJcGktPnR4YiA9ICh1OCAqKWRwOw0KPiAgIAlwaS0+dHhiX3AgPSAodTggKilkcF9wOw0K PiBAQCAtODM3LDE4ICs4NDIsMTggQEAgc3RhdGljIHZvaWQgbXBzY19pbml0X3JpbmdzKHN0 cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpDQo+ICAgCWZvciAoaSA9IDA7IGkgPCBNUFNDX1JY Ul9FTlRSSUVTOyBpKyspIHsNCj4gICAJCXJ4cmUgPSAoc3RydWN0IG1wc2NfcnhfZGVzYyAq KWRwOw0KPiAgIA0KPiAtCQlyeHJlLT5idWZzaXplID0gY3B1X3RvX2JlMTYoTVBTQ19SWEJF X1NJWkUpOw0KPiArCQlyeHJlLT5idWZzaXplID0gY3B1X3RvX2JlMTYoTVBTQ19SWEJFX1NJ WkUoZG1hX2RldikpOw0KPiAgIAkJcnhyZS0+Ynl0ZWNudCA9IGNwdV90b19iZTE2KDApOw0K PiAgIAkJcnhyZS0+Y21kc3RhdCA9IGNwdV90b19iZTMyKFNETUFfREVTQ19DTURTVEFUX08N Cj4gICAJCQkJfCBTRE1BX0RFU0NfQ01EU1RBVF9FSSB8IFNETUFfREVTQ19DTURTVEFUX0YN Cj4gICAJCQkJfCBTRE1BX0RFU0NfQ01EU1RBVF9MKTsNCj4gLQkJcnhyZS0+bGluayA9IGNw dV90b19iZTMyKGRwX3AgKyBNUFNDX1JYUkVfU0laRSk7DQo+ICsJCXJ4cmUtPmxpbmsgPSBj cHVfdG9fYmUzMihkcF9wICsgTVBTQ19SWFJFX1NJWkUoZG1hX2RldikpOw0KPiAgIAkJcnhy ZS0+YnVmX3B0ciA9IGNwdV90b19iZTMyKGJwX3ApOw0KPiAgIA0KPiAtCQlkcCArPSBNUFND X1JYUkVfU0laRTsNCj4gLQkJZHBfcCArPSBNUFNDX1JYUkVfU0laRTsNCj4gLQkJYnAgKz0g TVBTQ19SWEJFX1NJWkU7DQo+IC0JCWJwX3AgKz0gTVBTQ19SWEJFX1NJWkU7DQo+ICsJCWRw ICs9IE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpOw0KPiArCQlkcF9wICs9IE1QU0NfUlhSRV9T SVpFKGRtYV9kZXYpOw0KPiArCQlicCArPSBNUFNDX1JYQkVfU0laRShkbWFfZGV2KTsNCj4g KwkJYnBfcCArPSBNUFNDX1JYQkVfU0laRShkbWFfZGV2KTsNCj4gICAJfQ0KPiAgIAlyeHJl LT5saW5rID0gY3B1X3RvX2JlMzIocGktPnJ4cl9wKTsJLyogV3JhcCBsYXN0IGJhY2sgdG8g Zmlyc3QgKi8NCj4gICANCj4gQEAgLTg2MSwyMyArODY2LDIzIEBAIHN0YXRpYyB2b2lkIG1w c2NfaW5pdF9yaW5ncyhzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPiAgIAlmb3IgKGkg PSAwOyBpIDwgTVBTQ19UWFJfRU5UUklFUzsgaSsrKSB7DQo+ICAgCQl0eHJlID0gKHN0cnVj dCBtcHNjX3R4X2Rlc2MgKilkcDsNCj4gICANCj4gLQkJdHhyZS0+bGluayA9IGNwdV90b19i ZTMyKGRwX3AgKyBNUFNDX1RYUkVfU0laRSk7DQo+ICsJCXR4cmUtPmxpbmsgPSBjcHVfdG9f YmUzMihkcF9wICsgTVBTQ19UWFJFX1NJWkUoZG1hX2RldikpOw0KPiAgIAkJdHhyZS0+YnVm X3B0ciA9IGNwdV90b19iZTMyKGJwX3ApOw0KPiAgIA0KPiAtCQlkcCArPSBNUFNDX1RYUkVf U0laRTsNCj4gLQkJZHBfcCArPSBNUFNDX1RYUkVfU0laRTsNCj4gLQkJYnAgKz0gTVBTQ19U WEJFX1NJWkU7DQo+IC0JCWJwX3AgKz0gTVBTQ19UWEJFX1NJWkU7DQo+ICsJCWRwICs9IE1Q U0NfVFhSRV9TSVpFKGRtYV9kZXYpOw0KPiArCQlkcF9wICs9IE1QU0NfVFhSRV9TSVpFKGRt YV9kZXYpOw0KPiArCQlicCArPSBNUFNDX1RYQkVfU0laRShkbWFfZGV2KTsNCj4gKwkJYnBf cCArPSBNUFNDX1RYQkVfU0laRShkbWFfZGV2KTsNCj4gICAJfQ0KPiAgIAl0eHJlLT5saW5r ID0gY3B1X3RvX2JlMzIocGktPnR4cl9wKTsJLyogV3JhcCBsYXN0IGJhY2sgdG8gZmlyc3Qg Ki8NCj4gICANCj4gICAJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXBp LT5kbWFfcmVnaW9uLA0KPiAtCQkJTVBTQ19ETUFfQUxMT0NfU0laRSwgRE1BX0JJRElSRUNU SU9OQUwpOw0KPiArCQkJTVBTQ19ETUFfQUxMT0NfU0laRShkbWFfZGV2KSwgRE1BX0JJRElS RUNUSU9OQUwpOw0KPiAgICNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQo Q09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkNCj4gICAJCWlmIChwaS0+Y2FjaGVfbWdtdCkg LyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLw0KPiAgIAkJCWZsdXNoX2RjYWNoZV9yYW5n ZSgodWxvbmcpcGktPmRtYV9yZWdpb24sDQo+ICAgCQkJCQkodWxvbmcpcGktPmRtYV9yZWdp b24NCj4gLQkJCQkJKyBNUFNDX0RNQV9BTExPQ19TSVpFKTsNCj4gKwkJCQkJKyBNUFNDX0RN QV9BTExPQ19TSVpFKGRtYV9kZXYpKTsNCj4gICAjZW5kaWYNCj4gICANCj4gICAJcmV0dXJu Ow0KPiBAQCAtOTM2LDYgKzk0MSw3IEBAIHN0YXRpYyBpbnQgc2VyaWFsX3BvbGxlZDsNCj4g ICBzdGF0aWMgaW50IG1wc2NfcnhfaW50cihzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpLCB1 bnNpZ25lZCBsb25nICpmbGFncykNCj4gICB7DQo+ICAgCXN0cnVjdCBtcHNjX3J4X2Rlc2Mg KnJ4cmU7DQo+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRldjsNCj4g ICAJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnBpLT5wb3J0LnN0YXRlLT5wb3J0Ow0KPiAg IAl1MzIJY21kc3RhdCwgYnl0ZXNfaW4sIGk7DQo+ICAgCWludAlyYyA9IDA7DQo+IEBAIC05 NDQsMTQgKzk1MCwxNCBAQCBzdGF0aWMgaW50IG1wc2NfcnhfaW50cihzdHJ1Y3QgbXBzY19w b3J0X2luZm8gKnBpLCB1bnNpZ25lZCBsb25nICpmbGFncykNCj4gICANCj4gICAJcHJfZGVi dWcoIm1wc2NfcnhfaW50clslZF06IEhhbmRsaW5nIFJ4IGludHJcbiIsIHBpLT5wb3J0Lmxp bmUpOw0KPiAgIA0KPiAtCXJ4cmUgPSAoc3RydWN0IG1wc2NfcnhfZGVzYyAqKShwaS0+cnhy ICsgKHBpLT5yeHJfcG9zbipNUFNDX1JYUkVfU0laRSkpOw0KPiArCXJ4cmUgPSAoc3RydWN0 IG1wc2NfcnhfZGVzYyAqKShwaS0+cnhyICsgKHBpLT5yeHJfcG9zbipNUFNDX1JYUkVfU0la RShkbWFfZGV2KSkpOw0KPiAgIA0KPiAtCWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwg KHZvaWQgKilyeHJlLCBNUFNDX1JYUkVfU0laRSwNCj4gKwlkbWFfY2FjaGVfc3luYyhwaS0+ cG9ydC5kZXYsICh2b2lkICopcnhyZSwgTVBTQ19SWFJFX1NJWkUoZG1hX2RldiksDQo+ICAg CQkJRE1BX0ZST01fREVWSUNFKTsNCj4gICAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYm ICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpDQo+ICAgCWlmIChwaS0+Y2Fj aGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLw0KPiAgIAkJaW52YWxpZGF0 ZV9kY2FjaGVfcmFuZ2UoKHVsb25nKXJ4cmUsDQo+IC0JCQkJKHVsb25nKXJ4cmUgKyBNUFND X1JYUkVfU0laRSk7DQo+ICsJCQkJKHVsb25nKXJ4cmUgKyBNUFNDX1JYUkVfU0laRShkbWFf ZGV2KSk7DQo+ICAgI2VuZGlmDQo+ICAgDQo+ICAgCS8qDQo+IEBAIC05NzksMTMgKzk4NSwx MyBAQCBzdGF0aWMgaW50IG1wc2NfcnhfaW50cihzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBp LCB1bnNpZ25lZCBsb25nICpmbGFncykNCj4gICAJCQkgKi8NCj4gICAJCX0NCj4gICANCj4g LQkJYnAgPSBwaS0+cnhiICsgKHBpLT5yeHJfcG9zbiAqIE1QU0NfUlhCRV9TSVpFKTsNCj4g LQkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKWJwLCBNUFNDX1JYQkVf U0laRSwNCj4gKwkJYnAgPSBwaS0+cnhiICsgKHBpLT5yeHJfcG9zbiAqIE1QU0NfUlhCRV9T SVpFKGRtYV9kZXYpKTsNCj4gKwkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9p ZCAqKWJwLCBNUFNDX1JYQkVfU0laRShkbWFfZGV2KSwNCj4gICAJCQkJRE1BX0ZST01fREVW SUNFKTsNCj4gICAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJ R19OT1RfQ09IRVJFTlRfQ0FDSEUpDQo+ICAgCQlpZiAocGktPmNhY2hlX21nbXQpIC8qIEdU NjQyWzQ2XTAgUmVzICNDT01NLTIgKi8NCj4gICAJCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5n ZSgodWxvbmcpYnAsDQo+IC0JCQkJCSh1bG9uZylicCArIE1QU0NfUlhCRV9TSVpFKTsNCj4g KwkJCQkJKHVsb25nKWJwICsgTVBTQ19SWEJFX1NJWkUoZG1hX2RldikpOw0KPiAgICNlbmRp Zg0KPiAgIA0KPiAgIAkJLyoNCj4gQEAgLTEwNTYsMjQgKzEwNjIsMjQgQEAgc3RhdGljIGlu dCBtcHNjX3J4X2ludHIoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSwgdW5zaWduZWQgbG9u ZyAqZmxhZ3MpDQo+ICAgCQkJCXwgU0RNQV9ERVNDX0NNRFNUQVRfRUkgfCBTRE1BX0RFU0Nf Q01EU1RBVF9GDQo+ICAgCQkJCXwgU0RNQV9ERVNDX0NNRFNUQVRfTCk7DQo+ICAgCQl3bWIo KTsNCj4gLQkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXJ4cmUsIE1Q U0NfUlhSRV9TSVpFLA0KPiArCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lk ICopcnhyZSwgTVBTQ19SWFJFX1NJWkUoZG1hX2RldiksDQo+ICAgCQkJCURNQV9CSURJUkVD VElPTkFMKTsNCj4gICAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENP TkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpDQo+ICAgCQlpZiAocGktPmNhY2hlX21nbXQpIC8q IEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8NCj4gICAJCQlmbHVzaF9kY2FjaGVfcmFuZ2Uo KHVsb25nKXJ4cmUsDQo+IC0JCQkJCSh1bG9uZylyeHJlICsgTVBTQ19SWFJFX1NJWkUpOw0K PiArCQkJCQkodWxvbmcpcnhyZSArIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKTsNCj4gICAj ZW5kaWYNCj4gICANCj4gICAJCS8qIEFkdmFuY2UgdG8gbmV4dCBkZXNjcmlwdG9yICovDQo+ ICAgCQlwaS0+cnhyX3Bvc24gPSAocGktPnJ4cl9wb3NuICsgMSkgJiAoTVBTQ19SWFJfRU5U UklFUyAtIDEpOw0KPiAgIAkJcnhyZSA9IChzdHJ1Y3QgbXBzY19yeF9kZXNjICopDQo+IC0J CQkocGktPnJ4ciArIChwaS0+cnhyX3Bvc24gKiBNUFNDX1JYUkVfU0laRSkpOw0KPiAtCQlk bWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopcnhyZSwgTVBTQ19SWFJFX1NJ WkUsDQo+ICsJCQkocGktPnJ4ciArIChwaS0+cnhyX3Bvc24gKiBNUFNDX1JYUkVfU0laRShk bWFfZGV2KSkpOw0KPiArCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICop cnhyZSwgTVBTQ19SWFJFX1NJWkUoZG1hX2RldiksDQo+ICAgCQkJCURNQV9GUk9NX0RFVklD RSk7DQo+ICAgI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05GSUdf Tk9UX0NPSEVSRU5UX0NBQ0hFKQ0KPiAgIAkJaWYgKHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0 Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+ICAgCQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2Uo KHVsb25nKXJ4cmUsDQo+IC0JCQkJCSh1bG9uZylyeHJlICsgTVBTQ19SWFJFX1NJWkUpOw0K PiArCQkJCQkodWxvbmcpcnhyZSArIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKTsNCj4gICAj ZW5kaWYNCj4gICAJCXJjID0gMTsNCj4gICAJfQ0KPiBAQCAtMTA5MSw5ICsxMDk3LDEwIEBA IHN0YXRpYyBpbnQgbXBzY19yeF9pbnRyKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGksIHVu c2lnbmVkIGxvbmcgKmZsYWdzKQ0KPiAgIHN0YXRpYyB2b2lkIG1wc2Nfc2V0dXBfdHhfZGVz YyhzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpLCB1MzIgY291bnQsIHUzMiBpbnRyKQ0KPiAg IHsNCj4gICAJc3RydWN0IG1wc2NfdHhfZGVzYyAqdHhyZTsNCj4gKwlzdHJ1Y3QgZGV2aWNl ICpkbWFfZGV2ID0gcGktPnBvcnQuZGV2Ow0KPiAgIA0KPiAgIAl0eHJlID0gKHN0cnVjdCBt cHNjX3R4X2Rlc2MgKikocGktPnR4cg0KPiAtCQkJKyAocGktPnR4cl9oZWFkICogTVBTQ19U WFJFX1NJWkUpKTsNCj4gKwkJCSsgKHBpLT50eHJfaGVhZCAqIE1QU0NfVFhSRV9TSVpFKGRt YV9kZXYpKSk7DQo+ICAgDQo+ICAgCXR4cmUtPmJ5dGVjbnQgPSBjcHVfdG9fYmUxNihjb3Vu dCk7DQo+ICAgCXR4cmUtPnNoYWRvdyA9IHR4cmUtPmJ5dGVjbnQ7DQo+IEBAIC0xMTAyLDE3 ICsxMTA5LDE4IEBAIHN0YXRpYyB2b2lkIG1wc2Nfc2V0dXBfdHhfZGVzYyhzdHJ1Y3QgbXBz Y19wb3J0X2luZm8gKnBpLCB1MzIgY291bnQsIHUzMiBpbnRyKQ0KPiAgIAkJCXwgU0RNQV9E RVNDX0NNRFNUQVRfTA0KPiAgIAkJCXwgKChpbnRyKSA/IFNETUFfREVTQ19DTURTVEFUX0VJ IDogMCkpOw0KPiAgIAl3bWIoKTsNCj4gLQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYs ICh2b2lkICopdHhyZSwgTVBTQ19UWFJFX1NJWkUsDQo+ICsJZG1hX2NhY2hlX3N5bmMocGkt PnBvcnQuZGV2LCAodm9pZCAqKXR4cmUsIE1QU0NfVFhSRV9TSVpFKGRtYV9kZXYpLA0KPiAg IAkJCURNQV9CSURJUkVDVElPTkFMKTsNCj4gICAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIp ICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpDQo+ICAgCWlmIChwaS0+ Y2FjaGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLw0KPiAgIAkJZmx1c2hf ZGNhY2hlX3JhbmdlKCh1bG9uZyl0eHJlLA0KPiAtCQkJCSh1bG9uZyl0eHJlICsgTVBTQ19U WFJFX1NJWkUpOw0KPiArCQkJCSh1bG9uZyl0eHJlICsgTVBTQ19UWFJFX1NJWkUoZG1hX2Rl dikpOw0KPiAgICNlbmRpZg0KPiAgIH0NCj4gICANCj4gICBzdGF0aWMgdm9pZCBtcHNjX2Nv cHlfdHhfZGF0YShzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPiAgIHsNCj4gKwlzdHJ1 Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBvcnQuZGV2Ow0KPiAgIAlzdHJ1Y3QgY2lyY19i dWYgKnhtaXQgPSAmcGktPnBvcnQuc3RhdGUtPnhtaXQ7DQo+ICAgCXU4ICpicDsNCj4gICAJ dTMyIGk7DQo+IEBAIC0xMTI5LDE3ICsxMTM3LDE3IEBAIHN0YXRpYyB2b2lkIG1wc2NfY29w eV90eF9kYXRhKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpDQo+ICAgCQkJICogQ0hSXzEu ICBJbnN0ZWFkLCBqdXN0IHB1dCBpdCBpbi1iYW5kIHdpdGgNCj4gICAJCQkgKiBhbGwgdGhl IG90aGVyIFR4IGRhdGEuDQo+ICAgCQkJICovDQo+IC0JCQlicCA9IHBpLT50eGIgKyAocGkt PnR4cl9oZWFkICogTVBTQ19UWEJFX1NJWkUpOw0KPiArCQkJYnAgPSBwaS0+dHhiICsgKHBp LT50eHJfaGVhZCAqIE1QU0NfVFhCRV9TSVpFKGRtYV9kZXYpKTsNCj4gICAJCQkqYnAgPSBw aS0+cG9ydC54X2NoYXI7DQo+ICAgCQkJcGktPnBvcnQueF9jaGFyID0gMDsNCj4gICAJCQlp ID0gMTsNCj4gICAJCX0gZWxzZSBpZiAoIXVhcnRfY2lyY19lbXB0eSh4bWl0KQ0KPiAgIAkJ CQkmJiAhdWFydF90eF9zdG9wcGVkKCZwaS0+cG9ydCkpIHsNCj4gLQkJCWkgPSBtaW4oKHUz MilNUFNDX1RYQkVfU0laRSwNCj4gKwkJCWkgPSBtaW4oKHUzMilNUFNDX1RYQkVfU0laRShk bWFfZGV2KSwNCj4gICAJCQkJKHUzMil1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSk7 DQo+ICAgCQkJaSA9IG1pbihpLCAodTMyKUNJUkNfQ05UX1RPX0VORCh4bWl0LT5oZWFkLCB4 bWl0LT50YWlsLA0KPiAgIAkJCQlVQVJUX1hNSVRfU0laRSkpOw0KPiAtCQkJYnAgPSBwaS0+ dHhiICsgKHBpLT50eHJfaGVhZCAqIE1QU0NfVFhCRV9TSVpFKTsNCj4gKwkJCWJwID0gcGkt PnR4YiArIChwaS0+dHhyX2hlYWQgKiBNUFNDX1RYQkVfU0laRShkbWFfZGV2KSk7DQo+ICAg CQkJbWVtY3B5KGJwLCAmeG1pdC0+YnVmW3htaXQtPnRhaWxdLCBpKTsNCj4gICAJCQl4bWl0 LT50YWlsID0gKHhtaXQtPnRhaWwgKyBpKSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOw0KPiAg IA0KPiBAQCAtMTE0OSwxMiArMTE1NywxMiBAQCBzdGF0aWMgdm9pZCBtcHNjX2NvcHlfdHhf ZGF0YShzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPiAgIAkJCXJldHVybjsNCj4gICAJ CX0NCj4gICANCj4gLQkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKWJw LCBNUFNDX1RYQkVfU0laRSwNCj4gKwkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAo dm9pZCAqKWJwLCBNUFNDX1RYQkVfU0laRShkbWFfZGV2KSwNCj4gICAJCQkJRE1BX0JJRElS RUNUSU9OQUwpOw0KPiAgICNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQo Q09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkNCj4gICAJCWlmIChwaS0+Y2FjaGVfbWdtdCkg LyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLw0KPiAgIAkJCWZsdXNoX2RjYWNoZV9yYW5n ZSgodWxvbmcpYnAsDQo+IC0JCQkJCSh1bG9uZylicCArIE1QU0NfVFhCRV9TSVpFKTsNCj4g KwkJCQkJKHVsb25nKWJwICsgTVBTQ19UWEJFX1NJWkUoZG1hX2RldikpOw0KPiAgICNlbmRp Zg0KPiAgIAkJbXBzY19zZXR1cF90eF9kZXNjKHBpLCBpLCAxKTsNCj4gICANCj4gQEAgLTEx NjYsNiArMTE3NCw3IEBAIHN0YXRpYyB2b2lkIG1wc2NfY29weV90eF9kYXRhKHN0cnVjdCBt cHNjX3BvcnRfaW5mbyAqcGkpDQo+ICAgc3RhdGljIGludCBtcHNjX3R4X2ludHIoc3RydWN0 IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4gICB7DQo+ICAgCXN0cnVjdCBtcHNjX3R4X2Rlc2Mg KnR4cmU7DQo+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRldjsNCj4g ICAJaW50IHJjID0gMDsNCj4gICAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7DQo+ICAgDQo+IEBA IC0xMTczLDE0ICsxMTgyLDE0IEBAIHN0YXRpYyBpbnQgbXBzY190eF9pbnRyKHN0cnVjdCBt cHNjX3BvcnRfaW5mbyAqcGkpDQo+ICAgDQo+ICAgCWlmICghbXBzY19zZG1hX3R4X2FjdGl2 ZShwaSkpIHsNCj4gICAJCXR4cmUgPSAoc3RydWN0IG1wc2NfdHhfZGVzYyAqKShwaS0+dHhy DQo+IC0JCQkJKyAocGktPnR4cl90YWlsICogTVBTQ19UWFJFX1NJWkUpKTsNCj4gKwkJCQkr IChwaS0+dHhyX3RhaWwgKiBNUFNDX1RYUkVfU0laRShkbWFfZGV2KSkpOw0KPiAgIA0KPiAt CQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopdHhyZSwgTVBTQ19UWFJF X1NJWkUsDQo+ICsJCWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKil0eHJl LCBNUFNDX1RYUkVfU0laRShkbWFfZGV2KSwNCj4gICAJCQkJRE1BX0ZST01fREVWSUNFKTsN Cj4gICAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19OT1Rf Q09IRVJFTlRfQ0FDSEUpDQo+ICAgCQlpZiAocGktPmNhY2hlX21nbXQpIC8qIEdUNjQyWzQ2 XTAgUmVzICNDT01NLTIgKi8NCj4gICAJCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodWxv bmcpdHhyZSwNCj4gLQkJCQkJKHVsb25nKXR4cmUgKyBNUFNDX1RYUkVfU0laRSk7DQo+ICsJ CQkJCSh1bG9uZyl0eHJlICsgTVBTQ19UWFJFX1NJWkUoZG1hX2RldikpOw0KPiAgICNlbmRp Zg0KPiAgIA0KPiAgIAkJd2hpbGUgKCEoYmUzMl90b19jcHUodHhyZS0+Y21kc3RhdCkgJiBT RE1BX0RFU0NfQ01EU1RBVF9PKSkgew0KPiBAQCAtMTE5MywxMyArMTIwMiwxMyBAQCBzdGF0 aWMgaW50IG1wc2NfdHhfaW50cihzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPiAgIAkJ CQlicmVhazsNCj4gICANCj4gICAJCQl0eHJlID0gKHN0cnVjdCBtcHNjX3R4X2Rlc2MgKiko cGktPnR4cg0KPiAtCQkJCQkrIChwaS0+dHhyX3RhaWwgKiBNUFNDX1RYUkVfU0laRSkpOw0K PiArCQkJCQkrIChwaS0+dHhyX3RhaWwgKiBNUFNDX1RYUkVfU0laRShkbWFfZGV2KSkpOw0K PiAgIAkJCWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKil0eHJlLA0KPiAt CQkJCQlNUFNDX1RYUkVfU0laRSwgRE1BX0ZST01fREVWSUNFKTsNCj4gKwkJCQkJTVBTQ19U WFJFX1NJWkUoZG1hX2RldiksIERNQV9GUk9NX0RFVklDRSk7DQo+ICAgI2lmIGRlZmluZWQo Q09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQ0K PiAgIAkJCWlmIChwaS0+Y2FjaGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAq Lw0KPiAgIAkJCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodWxvbmcpdHhyZSwNCj4gLQkJ CQkJCSh1bG9uZyl0eHJlICsgTVBTQ19UWFJFX1NJWkUpOw0KPiArCQkJCQkJKHVsb25nKXR4 cmUgKyBNUFNDX1RYUkVfU0laRShkbWFfZGV2KSk7DQo+ICAgI2VuZGlmDQo+ICAgCQl9DQo+ ICAgDQo+IEBAIC0xMzYwLDYgKzEzNjksNyBAQCBzdGF0aWMgaW50IG1wc2Nfc3RhcnR1cChz dHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQ0KPiAgIHsNCj4gICAJc3RydWN0IG1wc2NfcG9ydF9p bmZvICpwaSA9DQo+ICAgCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IG1wc2NfcG9ydF9p bmZvLCBwb3J0KTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBvcnQuZGV2 Ow0KPiAgIAl1MzIgZmxhZyA9IDA7DQo+ICAgCWludCByYzsNCj4gICANCj4gQEAgLTEzODEs NyArMTM5MSw3IEBAIHN0YXRpYyBpbnQgbXBzY19zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQg KnBvcnQpDQo+ICAgDQo+ICAgCQltcHNjX3NkbWFfaW50cl91bm1hc2socGksIDB4Zik7DQo+ ICAgCQltcHNjX3NkbWFfc2V0X3J4X3JpbmcocGksIChzdHJ1Y3QgbXBzY19yeF9kZXNjICop KHBpLT5yeHJfcA0KPiAtCQkJCQkrIChwaS0+cnhyX3Bvc24gKiBNUFNDX1JYUkVfU0laRSkp KTsNCj4gKwkJCQkJKyAocGktPnJ4cl9wb3NuICogTVBTQ19SWFJFX1NJWkUoZG1hX2Rldikp KSk7DQo+ICAgCX0NCj4gICANCj4gICAJcmV0dXJuIHJjOw0KPiBAQCAtMTU1NSw5ICsxNTY1 LDEwIEBAIHN0YXRpYyB2b2lkIG1wc2NfcHV0X3BvbGxfY2hhcihzdHJ1Y3QgdWFydF9wb3J0 ICpwb3J0LA0KPiAgIA0KPiAgIHN0YXRpYyBpbnQgbXBzY19nZXRfcG9sbF9jaGFyKHN0cnVj dCB1YXJ0X3BvcnQgKnBvcnQpDQo+ICAgew0KPiArCXN0cnVjdCBtcHNjX3J4X2Rlc2MgKnJ4 cmU7DQo+ICAgCXN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkgPQ0KPiAgIAkJY29udGFpbmVy X29mKHBvcnQsIHN0cnVjdCBtcHNjX3BvcnRfaW5mbywgcG9ydCk7DQo+IC0Jc3RydWN0IG1w c2NfcnhfZGVzYyAqcnhyZTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBv cnQuZGV2Ow0KPiAgIAl1MzIJY21kc3RhdCwgYnl0ZXNfaW4sIGk7DQo+ICAgCXU4CSpicDsN Cj4gICANCj4gQEAgLTE1NzUsMTMgKzE1ODYsMTMgQEAgc3RhdGljIGludCBtcHNjX2dldF9w b2xsX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkNCj4gICANCj4gICAJd2hpbGUgKHBv bGxfY250ID09IDApIHsNCj4gICAJCXJ4cmUgPSAoc3RydWN0IG1wc2NfcnhfZGVzYyAqKShw aS0+cnhyICsNCj4gLQkJICAgICAgIChwaS0+cnhyX3Bvc24qTVBTQ19SWFJFX1NJWkUpKTsN Cj4gKwkJICAgICAgIChwaS0+cnhyX3Bvc24qTVBTQ19SWFJFX1NJWkUoZG1hX2RldikpKTsN Cj4gICAJCWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKilyeHJlLA0KPiAt CQkJICAgICAgIE1QU0NfUlhSRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOw0KPiArCQkJICAg ICAgIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpLCBETUFfRlJPTV9ERVZJQ0UpOw0KPiAgICNp ZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVO VF9DQUNIRSkNCj4gICAJCWlmIChwaS0+Y2FjaGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMg I0NPTU0tMiAqLw0KPiAgIAkJCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bG9uZylyeHJl LA0KPiAtCQkJKHVsb25nKXJ4cmUgKyBNUFNDX1JYUkVfU0laRSk7DQo+ICsJCQkodWxvbmcp cnhyZSArIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKTsNCj4gICAjZW5kaWYNCj4gICAJCS8q DQo+ICAgCQkgKiBMb29wIHRocm91Z2ggUnggZGVzY3JpcHRvcnMgaGFuZGxpbmcgb25lcyB0 aGF0IGhhdmUNCj4gQEAgLTE1OTEsMTMgKzE2MDIsMTMgQEAgc3RhdGljIGludCBtcHNjX2dl dF9wb2xsX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkNCj4gICAJCSAgICAgICAhKChj bWRzdGF0ID0gYmUzMl90b19jcHUocnhyZS0+Y21kc3RhdCkpICYNCj4gICAJCQkgU0RNQV9E RVNDX0NNRFNUQVRfTykpew0KPiAgIAkJCWJ5dGVzX2luID0gYmUxNl90b19jcHUocnhyZS0+ Ynl0ZWNudCk7DQo+IC0JCQlicCA9IHBpLT5yeGIgKyAocGktPnJ4cl9wb3NuICogTVBTQ19S WEJFX1NJWkUpOw0KPiArCQkJYnAgPSBwaS0+cnhiICsgKHBpLT5yeHJfcG9zbiAqIE1QU0Nf UlhCRV9TSVpFKGRtYV9kZXYpKTsNCj4gICAJCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5k ZXYsICh2b2lkICopIGJwLA0KPiAtCQkJCSAgICAgICBNUFNDX1JYQkVfU0laRSwgRE1BX0ZS T01fREVWSUNFKTsNCj4gKwkJCQkgICAgICAgTVBTQ19SWEJFX1NJWkUoZG1hX2RldiksIERN QV9GUk9NX0RFVklDRSk7DQo+ICAgI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVm aW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQ0KPiAgIAkJCWlmIChwaS0+Y2FjaGVf bWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLw0KPiAgIAkJCQlpbnZhbGlkYXRl X2RjYWNoZV9yYW5nZSgodWxvbmcpYnAsDQo+IC0JCQkJCSh1bG9uZylicCArIE1QU0NfUlhC RV9TSVpFKTsNCj4gKwkJCQkJKHVsb25nKWJwICsgTVBTQ19SWEJFX1NJWkUoZG1hX2Rldikp Ow0KPiAgICNlbmRpZg0KPiAgIAkJCWlmICgodW5saWtlbHkoY21kc3RhdCAmIChTRE1BX0RF U0NfQ01EU1RBVF9CUiB8DQo+ICAgCQkJIFNETUFfREVTQ19DTURTVEFUX0ZSIHwgU0RNQV9E RVNDX0NNRFNUQVRfT1IpKSkgJiYNCj4gQEAgLTE2MTksMjQgKzE2MzAsMjQgQEAgc3RhdGlj IGludCBtcHNjX2dldF9wb2xsX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkNCj4gICAJ CQkJCQkgICAgU0RNQV9ERVNDX0NNRFNUQVRfTCk7DQo+ICAgCQkJd21iKCk7DQo+ICAgCQkJ ZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXJ4cmUsDQo+IC0JCQkJICAg ICAgIE1QU0NfUlhSRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7DQo+ICsJCQkJICAgICAg IE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpLCBETUFfQklESVJFQ1RJT05BTCk7DQo+ICAgI2lm IGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5U X0NBQ0hFKQ0KPiAgIAkJCWlmIChwaS0+Y2FjaGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMg I0NPTU0tMiAqLw0KPiAgIAkJCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVsb25nKXJ4cmUsDQo+ IC0JCQkJCSAgICh1bG9uZylyeHJlICsgTVBTQ19SWFJFX1NJWkUpOw0KPiArCQkJCQkgICAo dWxvbmcpcnhyZSArIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKTsNCj4gICAjZW5kaWYNCj4g ICANCj4gICAJCQkvKiBBZHZhbmNlIHRvIG5leHQgZGVzY3JpcHRvciAqLw0KPiAgIAkJCXBp LT5yeHJfcG9zbiA9IChwaS0+cnhyX3Bvc24gKyAxKSAmDQo+ICAgCQkJCShNUFNDX1JYUl9F TlRSSUVTIC0gMSk7DQo+ICAgCQkJcnhyZSA9IChzdHJ1Y3QgbXBzY19yeF9kZXNjICopKHBp LT5yeHIgKw0KPiAtCQkJCSAgICAgICAocGktPnJ4cl9wb3NuICogTVBTQ19SWFJFX1NJWkUp KTsNCj4gKwkJCQkgICAgICAgKHBpLT5yeHJfcG9zbiAqIE1QU0NfUlhSRV9TSVpFKGRtYV9k ZXYpKSk7DQo+ICAgCQkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXJ4 cmUsDQo+IC0JCQkJICAgICAgIE1QU0NfUlhSRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOw0K PiArCQkJCSAgICAgICBNUFNDX1JYUkVfU0laRShkbWFfZGV2KSwgRE1BX0ZST01fREVWSUNF KTsNCj4gICAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19O T1RfQ09IRVJFTlRfQ0FDSEUpDQo+ICAgCQkJaWYgKHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0 Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+ICAgCQkJCWludmFsaWRhdGVfZGNhY2hlX3Jhbmdl KCh1bG9uZylyeHJlLA0KPiAtCQkJCQkJKHVsb25nKXJ4cmUgKyBNUFNDX1JYUkVfU0laRSk7 DQo+ICsJCQkJCQkodWxvbmcpcnhyZSArIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKTsNCj4g ICAjZW5kaWYNCj4gICAJCX0NCj4gICANCj4gQEAgLTE3MDYsNiArMTcxNyw3IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgdWFydF9vcHMgbXBzY19wb3BzID0gew0KPiAgIHN0YXRpYyB2b2lk IG1wc2NfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMs IHVpbnQgY291bnQpDQo+ICAgew0KPiAgIAlzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpID0g Jm1wc2NfcG9ydHNbY28tPmluZGV4XTsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0g cGktPnBvcnQuZGV2Ow0KPiAgIAl1OCAqYnAsICpkcCwgYWRkX2NyID0gMDsNCj4gICAJaW50 IGk7DQo+ICAgCXVuc2lnbmVkIGxvbmcgaWZsYWdzOw0KPiBAQCAtMTcyMyw5ICsxNzM1LDkg QEAgc3RhdGljIHZvaWQgbXBzY19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywg Y29uc3QgY2hhciAqcywgdWludCBjb3VudCkNCj4gICAJCXVkZWxheSgxMDApOw0KPiAgIA0K PiAgIAl3aGlsZSAoY291bnQgPiAwKSB7DQo+IC0JCWJwID0gZHAgPSBwaS0+dHhiICsgKHBp LT50eHJfaGVhZCAqIE1QU0NfVFhCRV9TSVpFKTsNCj4gKwkJYnAgPSBkcCA9IHBpLT50eGIg KyAocGktPnR4cl9oZWFkICogTVBTQ19UWEJFX1NJWkUoZG1hX2RldikpOw0KPiAgIA0KPiAt CQlmb3IgKGkgPSAwOyBpIDwgTVBTQ19UWEJFX1NJWkU7IGkrKykgew0KPiArCQlmb3IgKGkg PSAwOyBpIDwgTVBTQ19UWEJFX1NJWkUoZG1hX2Rldik7IGkrKykgew0KPiAgIAkJCWlmIChj b3VudCA9PSAwKQ0KPiAgIAkJCQlicmVhazsNCj4gICANCj4gQEAgLTE3NDQsMTIgKzE3NTYs MTIgQEAgc3RhdGljIHZvaWQgbXBzY19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpj bywgY29uc3QgY2hhciAqcywgdWludCBjb3VudCkNCj4gICAJCQljb3VudC0tOw0KPiAgIAkJ fQ0KPiAgIA0KPiAtCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopYnAs IE1QU0NfVFhCRV9TSVpFLA0KPiArCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2 b2lkICopYnAsIE1QU0NfVFhCRV9TSVpFKGRtYV9kZXYpLA0KPiAgIAkJCQlETUFfQklESVJF Q1RJT05BTCk7DQo+ICAgI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChD T05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQ0KPiAgIAkJaWYgKHBpLT5jYWNoZV9tZ210KSAv KiBHVDY0Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+ICAgCQkJZmx1c2hfZGNhY2hlX3Jhbmdl KCh1bG9uZylicCwNCj4gLQkJCQkJKHVsb25nKWJwICsgTVBTQ19UWEJFX1NJWkUpOw0KPiAr CQkJCQkodWxvbmcpYnAgKyBNUFNDX1RYQkVfU0laRShkbWFfZGV2KSk7DQo+ICAgI2VuZGlm DQo+ICAgCQltcHNjX3NldHVwX3R4X2Rlc2MocGksIGksIDApOw0KPiAgIAkJcGktPnR4cl9o ZWFkID0gKHBpLT50eHJfaGVhZCArIDEpICYgKE1QU0NfVFhSX0VOVFJJRVMgLSAxKTsNCj4g QEAgLTIwMjQsNyArMjAzNiw4IEBAIHN0YXRpYyB2b2lkIG1wc2NfZHJ2X3VubWFwX3JlZ3Mo c3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4gICBzdGF0aWMgdm9pZCBtcHNjX2Rydl9n ZXRfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpLA0KPiAgIAkJc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGQsIGludCBudW0pDQo+ICAgew0KPiAtCXN0cnVjdCBt cHNjX3BkYXRhCSpwZGF0YTsNCj4gKwlzdHJ1Y3QgbXBzY19wZGF0YSAqcGRhdGE7DQo+ICsJ c3RydWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRldjsNCj4gICANCj4gICAJcGRh dGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZC0+ZGV2KTsNCj4gICANCj4gQEAgLTIwMzIsNyAr MjA0NSw3IEBAIHN0YXRpYyB2b2lkIG1wc2NfZHJ2X2dldF9wbGF0Zm9ybV9kYXRhKHN0cnVj dCBtcHNjX3BvcnRfaW5mbyAqcGksDQo+ICAgCXBpLT5wb3J0LmlvdHlwZSA9IFVQSU9fTUVN Ow0KPiAgIAlwaS0+cG9ydC5saW5lID0gbnVtOw0KPiAgIAlwaS0+cG9ydC50eXBlID0gUE9S VF9NUFNDOw0KPiAtCXBpLT5wb3J0LmZpZm9zaXplID0gTVBTQ19UWEJFX1NJWkU7DQo+ICsJ cGktPnBvcnQuZmlmb3NpemUgPSBNUFNDX1RYQkVfU0laRShkbWFfZGV2KTsNCj4gICAJcGkt PnBvcnQubWVtYmFzZSA9IHBpLT5tcHNjX2Jhc2U7DQo+ICAgCXBpLT5wb3J0Lm1hcGJhc2Ug PSAodWxvbmcpcGktPm1wc2NfYmFzZTsNCj4gICAJcGktPnBvcnQub3BzID0gJm1wc2NfcG9w czsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMgYi9kcml2 ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jDQo+IGluZGV4IDhhY2ExOGMuLjlkZjkxOGU1IDEw MDY0NA0KPiAtLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jDQo+ICsrKyBiL2Ry aXZlcnMvdHR5L3NlcmlhbC9zYW1zdW5nLmMNCj4gQEAgLTI0MSw3ICsyNDEsNyBAQCBzdGF0 aWMgdm9pZCBlbmFibGVfdHhfZG1hKHN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqb3VycG9y dCkNCj4gICAJLyogRW5hYmxlIHR4IGRtYSBtb2RlICovDQo+ICAgCXVjb24gPSByZF9yZWds KHBvcnQsIFMzQzI0MTBfVUNPTik7DQo+ICAgCXVjb24gJj0gfihTM0M2NFhYX1VDT05fVFhC VVJTVF9NQVNLIHwgUzNDNjRYWF9VQ09OX1RYTU9ERV9NQVNLKTsNCj4gLQl1Y29uIHw9IChk bWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpID49IDE2KSA/DQo+ICsJdWNvbiB8PSAoZG1hX2dl dF9jYWNoZV9hbGlnbm1lbnQocG9ydC0+ZGV2KSA+PSAxNikgPw0KPiAgIAkJUzNDNjRYWF9V Q09OX1RYQlVSU1RfMTYgOiBTM0M2NFhYX1VDT05fVFhCVVJTVF8xOw0KPiAgIAl1Y29uIHw9 IFMzQzY0WFhfVUNPTl9UWE1PREVfRE1BOw0KPiAgIAl3cl9yZWdsKHBvcnQsICBTM0MyNDEw X1VDT04sIHVjb24pOw0KPiBAQCAtMjkyLDcgKzI5Miw3IEBAIHN0YXRpYyBpbnQgczNjMjR4 eF9zZXJpYWxfc3RhcnRfdHhfZG1hKHN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqb3VycG9y dCwNCj4gICAJaWYgKG91cnBvcnQtPnR4X21vZGUgIT0gUzNDMjRYWF9UWF9ETUEpDQo+ICAg CQllbmFibGVfdHhfZG1hKG91cnBvcnQpOw0KPiAgIA0KPiAtCWRtYS0+dHhfc2l6ZSA9IGNv dW50ICYgfihkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpIC0gMSk7DQo+ICsJZG1hLT50eF9z aXplID0gY291bnQgJiB+KGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHBvcnQtPmRldikgLSAx KTsNCj4gICAJZG1hLT50eF90cmFuc2Zlcl9hZGRyID0gZG1hLT50eF9hZGRyICsgeG1pdC0+ dGFpbDsNCj4gICANCj4gICAJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uob3VycG9ydC0+ cG9ydC5kZXYsIGRtYS0+dHhfdHJhbnNmZXJfYWRkciwNCj4gQEAgLTMzMiw3ICszMzIsNyBA QCBzdGF0aWMgdm9pZCBzM2MyNHh4X3NlcmlhbF9zdGFydF9uZXh0X3R4KHN0cnVjdCBzM2My NHh4X3VhcnRfcG9ydCAqb3VycG9ydCkNCj4gICANCj4gICAJaWYgKCFvdXJwb3J0LT5kbWEg fHwgIW91cnBvcnQtPmRtYS0+dHhfY2hhbiB8fA0KPiAgIAkgICAgY291bnQgPCBvdXJwb3J0 LT5taW5fZG1hX3NpemUgfHwNCj4gLQkgICAgeG1pdC0+dGFpbCAmIChkbWFfZ2V0X2NhY2hl X2FsaWdubWVudCgpIC0gMSkpDQo+ICsJICAgIHhtaXQtPnRhaWwgJiAoZG1hX2dldF9jYWNo ZV9hbGlnbm1lbnQocG9ydC0+ZGV2KSAtIDEpKQ0KPiAgIAkJczNjMjR4eF9zZXJpYWxfc3Rh cnRfdHhfcGlvKG91cnBvcnQpOw0KPiAgIAllbHNlDQo+ICAgCQlzM2MyNHh4X3NlcmlhbF9z dGFydF90eF9kbWEob3VycG9ydCwgY291bnQpOw0KPiBAQCAtNzE4LDggKzcxOCw4IEBAIHN0 YXRpYyBpcnFyZXR1cm5fdCBzM2MyNHh4X3NlcmlhbF90eF9jaGFycyhpbnQgaXJxLCB2b2lk ICppZCkNCj4gICANCj4gICAJaWYgKG91cnBvcnQtPmRtYSAmJiBvdXJwb3J0LT5kbWEtPnR4 X2NoYW4gJiYNCj4gICAJICAgIGNvdW50ID49IG91cnBvcnQtPm1pbl9kbWFfc2l6ZSkgew0K PiAtCQlpbnQgYWxpZ24gPSBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpIC0NCj4gLQkJCSh4 bWl0LT50YWlsICYgKGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkgLSAxKSk7DQo+ICsJCWlu dCBhbGlnbiA9IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHBvcnQtPmRldikgLQ0KPiArCQkJ KHhtaXQtPnRhaWwgJiAoZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQocG9ydC0+ZGV2KSAtIDEp KTsNCj4gICAJCWlmIChjb3VudC1hbGlnbiA+PSBvdXJwb3J0LT5taW5fZG1hX3NpemUpIHsN Cj4gICAJCQlkbWFfY291bnQgPSBjb3VudC1hbGlnbjsNCj4gICAJCQljb3VudCA9IGFsaWdu Ow0KPiBAQCAtODcwLDcgKzg3MCw3IEBAIHN0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcmVx dWVzdF9kbWEoc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpwKQ0KPiAgIAlkbWEtPnR4X2Nv bmYuZGlyZWN0aW9uCQk9IERNQV9NRU1fVE9fREVWOw0KPiAgIAlkbWEtPnR4X2NvbmYuZHN0 X2FkZHJfd2lkdGgJPSBETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFOw0KPiAgIAlkbWEtPnR4 X2NvbmYuZHN0X2FkZHIJCT0gcC0+cG9ydC5tYXBiYXNlICsgUzNDMjQxMF9VVFhIOw0KPiAt CWlmIChkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpID49IDE2KQ0KPiArCWlmIChkbWFfZ2V0 X2NhY2hlX2FsaWdubWVudChwLT5wb3J0LmRldikgPj0gMTYpDQo+ICAgCQlkbWEtPnR4X2Nv bmYuZHN0X21heGJ1cnN0ID0gMTY7DQo+ICAgCWVsc2UNCj4gICAJCWRtYS0+dHhfY29uZi5k c3RfbWF4YnVyc3QgPSAxOw0KPiBAQCAtMTg0OSw3ICsxODQ5LDcgQEAgc3RhdGljIGludCBz M2MyNHh4X3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiAg IAkgKiBzbyBmaW5kIG1pbmltYWwgdHJhbnNmZXIgc2l6ZSBzdWl0YWJsZSBmb3IgRE1BIG1v ZGUNCj4gICAJICovDQo+ICAgCW91cnBvcnQtPm1pbl9kbWFfc2l6ZSA9IG1heF90KGludCwg b3VycG9ydC0+cG9ydC5maWZvc2l6ZSwNCj4gLQkJCQkgICAgZG1hX2dldF9jYWNoZV9hbGln bm1lbnQoKSk7DQo+ICsJCQkJICAgIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KG91cnBvcnQt PnBvcnQuZGV2KSk7DQo+ICAgDQo+ICAgCWRiZygiJXM6IGluaXRpYWxpc2luZyBwb3J0ICVw Li4uXG4iLCBfX2Z1bmNfXywgb3VycG9ydCk7DQo+ICAgDQo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2xpbnV4L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgN Cj4gaW5kZXggMjljZTk4MS4uMTMyNjAyMyAxMDA2NDQNCj4gLS0tIGEvaW5jbHVkZS9saW51 eC9kbWEtbWFwcGluZy5oDQo+ICsrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaA0K PiBAQCAtMTMxLDYgKzEzMSw3IEBAIHN0cnVjdCBkbWFfbWFwX29wcyB7DQo+ICAgI2lmZGVm IEFSQ0hfSEFTX0RNQV9HRVRfUkVRVUlSRURfTUFTSw0KPiAgIAl1NjQgKCpnZXRfcmVxdWly ZWRfbWFzaykoc3RydWN0IGRldmljZSAqZGV2KTsNCj4gICAjZW5kaWYNCj4gKwlpbnQgKCpn ZXRfY2FjaGVfYWxpZ25tZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYpOw0KPiAgIAlpbnQgaXNf cGh5czsNCj4gICB9Ow0KPiAgIA0KPiBAQCAtNjk3LDEyICs2OTgsMTggQEAgc3RhdGljIGlu bGluZSB2b2lkICpkbWFfemFsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6 ZV90IHNpemUsDQo+ICAgfQ0KPiAgIA0KPiAgICNpZmRlZiBDT05GSUdfSEFTX0RNQQ0KPiAt c3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkNCj4gLXsN Cj4gLSNpZmRlZiBBUkNIX0RNQV9NSU5BTElHTg0KPiAtCXJldHVybiBBUkNIX0RNQV9NSU5B TElHTjsNCj4gKw0KPiArI2lmbmRlZiBBUkNIX0RNQV9NSU5BTElHTg0KPiArI2RlZmluZSBB UkNIX0RNQV9NSU5BTElHTiAxDQo+ICAgI2VuZGlmDQo+IC0JcmV0dXJuIDE7DQo+ICsNCj4g K3N0YXRpYyBpbmxpbmUgaW50IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHN0cnVjdCBkZXZp Y2UgKmRldikNCj4gK3sNCj4gKwljb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdl dF9kbWFfb3BzKGRldik7DQo+ICsJaWYgKGRldiAmJiBvcHMgJiYgb3BzLT5nZXRfY2FjaGVf YWxpZ25tZW50KQ0KPiArCQlyZXR1cm4gb3BzLT5nZXRfY2FjaGVfYWxpZ25tZW50KGRldik7 DQo+ICsNCj4gKwlyZXR1cm4gQVJDSF9ETUFfTUlOQUxJR047IC8qIGNvbXBhdGlibGUgYmVo YXZpb3IgKi8NCj4gICB9DQo+ICAgI2VuZGlmDQo+ICAgDQoNCkJlc3QgcmVnYXJkcw0KLS0g DQpNYXJlayBTenlwcm93c2tpLCBQaEQNClNhbXN1bmcgUiZEIEluc3RpdHV0ZSBQb2xhbmQ=