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: Thu, 26 Oct 2017 14:33:26 +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 smtpbg202.qq.com ([184.105.206.29]:55675 "EHLO smtpbg202.qq.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750884AbdJZGdg (ORCPT ); Thu, 26 Oct 2017 02:33:36 -0400 In-Reply-To: <7ac87ae6-32e5-bd14-32a1-abdcf8aa8221@samsung.com> 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?= TWF5YmUgbXkgZmlyc3QgdmVyc2lvbiBpcyBzdWl0YWJsZSBmb3Igc3RhYmxlLg0KDQpIdWFj YWkNCiANCiANCi0tLS0tLS0tLS0tLS0tLS0tLSBPcmlnaW5hbCAtLS0tLS0tLS0tLS0tLS0t LS0NCkZyb206ICAiTWFyZWsgU3p5cHJvd3NraSI8bS5zenlwcm93c2tpQHNhbXN1bmcuY29t PjsNCkRhdGU6ICBXZWQsIE9jdCAyNSwgMjAxNyAwMzoyMSBQTQ0KVG86ICAi6ZmI5Y2O5omN IjxjaGVuaGNAbGVtb3RlLmNvbT47ICJDaHJpc3RvcGggSGVsbHdpZyI8aGNoQGxzdC5kZT47 IA0KQ2M6ICAiUm9iaW4gTXVycGh5Ijxyb2Jpbi5tdXJwaHlAYXJtLmNvbT47ICJBbmRyZXcg TW9ydG9uIjxha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPjsgIkZ1eGluIFpoYW5nIjx6aGFu Z2Z4QGxlbW90ZS5jb20+OyAibGludXgta2VybmVsIjxsaW51eC1rZXJuZWxAdmdlci5rZXJu ZWwub3JnPjsgIlJhbGYgQmFlY2hsZSI8cmFsZkBsaW51eC1taXBzLm9yZz47ICJKYW1lc0hv Z2FuIjxqYW1lcy5ob2dhbkBpbWd0ZWMuY29tPjsgImxpbnV4LW1pcHMiPGxpbnV4LW1pcHNA bGludXgtbWlwcy5vcmc+OyAiSmFtZXMgRSAuIEogLkJvdHRvbWxleSI8amVqYkBsaW51eC52 bmV0LmlibS5jb20+OyAiTWFydGluIEsgLiBQZXRlcnNlbiI8bWFydGluLnBldGVyc2VuQG9y YWNsZS5jb20+OyAibGludXgtc2NzaSI8bGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmc+OyAi c3RhYmxlIjxzdGFibGVAdmdlci5rZXJuZWwub3JnPjsgIk1pY2hhZWwgUyAuIFRzaXJraW4i PG1zdEByZWRoYXQuY29tPjsgIlBhd2VsIE9zY2lhayI8cGF3ZWxAb3NjaWFrLmNvbT47ICJL eXVuZ21pbiBQYXJrIjxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPjsgIk1pY2hhZWwgQ2hh biI8bWljaGFlbC5jaGFuQGJyb2FkY29tLmNvbT47ICJCZW5qYW1pbiBIZXJyZW5zY2htaWR0 IjxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+OyAiSXZhbiBNaWtoYXlsb3YiPGl2YW5AcnUu aWJtLmNvbT47ICJUYXJpcSBUb3VrYW4iPHRhcmlxdEBtZWxsYW5veC5jb20+OyAiQW5keSBH cm9zcyI8YWdyb3NzQGNvZGVhdXJvcmEub3JnPjsgIk1hcmsgQSAuIEdyZWVyIjxtZ3JlZXJA YW5pbWFsY3JlZWsuY29tPjsgIlJvYmVydEJhbGR5Z2EiPHIuYmFsZHlnYUBoYWNrZXJpb24u Y29tPjsgDQpTdWJqZWN0OiAgUmU6IFtQQVRDSCBWOSAxLzRdIGRtYS1tYXBwaW5nOiBSZXdv cmsgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKQ0KDQogDQpIaSBIdWFjYWksDQoNCk9uIDIw MTctMTAtMjUgMDM6MjIsIOmZiOWNjuaJjSB3cm90ZToNCj4gSGksIE1hcmVrDQo+DQo+IFBh dGNoMyBpcyBuZWVkZWQgZm9yIHN0YWJsZSwgYnV0IFBhdGNoMyBkZXBlbmQgb24gUGF0Y2gx IGFuZCBQYXRjaDIuDQoNClRoZW4gcGF0Y2ggIzMgaGFzIHRvIGJlIHJld29ya2VkLiBGaXJz dCBjaGFuZ2Ugc2NzaSB0byBhbGlnbiB0aGUgYmxvY2sgDQpxdWV1ZSB0byBkbWFfZ2V0X2Nh Y2hlX2FsaWdubWVudCgpLiBUaGlzIHdpbGwgYmUgc2FmZSBpbiBhbGwgY2FzZXMgYW5kIA0K aXQgd2lsbCBub3QgaHVydCBtZW1vcnkgdXNhZ2UgdGhhdCBtdWNoLiBTdWNoIHZlcnNpb24g Y2FuIGJlIGFwcGxpZWQgDQpmaXJzdCBhbmQgc2VudCB0byBzdGFibGUgd2l0aG91dCBhbnkg ZGVwZW5kZW5jaWVzLiBQbGVhc2UgYWxzbyBkZXNjcmliZSANCmRlZXBseSB3aHkgc3VjaCBj aGFuZ2UgaXMgbmVlZGVkIGFuZCB3aGF0IGlzc3VlcyBjYW4gYmUgb2JzZXJ2ZWQgd2l0aG91 dCANCml0LCBvbiB3aGljaCBzeXN0ZW1zLg0KDQpUaGVuIGFzIGFuIG9wdGltaXphdGlvbiBh ZGQgc3VwcG9ydCBmb3IgcGVyLWRldmljZSBjYWNoZV9hbGlnbm1lbnQgDQoocGF0Y2hlcyAj MSBhbmQgIzIpLiBJJ20gc3RpbGwgbm90IGNvbnZpbmNlZCB0aGF0IGl0IG1ha2VzIHNlbnNl IHRvIA0KYWxpZ24gRE1BIHN0cnVjdHVyZXMgdG8gdmFsdWVzIGxlc3MgdGhhbiBMMSBjYWNo ZSBsaW5lIHNpemUuIEl0IG1pZ2h0IA0KaHVydCBwZXJmb3JtYW5jZSwgYmVjYXVzZSBjYWNo ZSBjb2hlcmVuY3kgaGFzIGl0cyBjb3N0IGFuZCBpdCBpcyBhbHNvIA0KcmVsZXZhbnQgdG8g bXVsdGktY29yZS9zbXAgYWNjZXNzIHRvIGFueSBvYmplY3RzIHRoYXQgYXJlIGluIHRoZSBz YW1lIGwxIA0KY2FjaGUgbGluZS4gTWVtb3J5IHNhdmluZ3MgdGhhdCBtaWdodCBiZSB0aGUg cmVzdWx0cyBvZiBzdWNoIGxvd2VyIA0KYWxpZ25tZW50IGFyZSBwcm9iYWJseSBuZWdsaWdp YmxlLg0KDQo+DQo+IEh1YWNhaQ0KPiAgIA0KPiAgIA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0g T3JpZ2luYWwgLS0tLS0tLS0tLS0tLS0tLS0tDQo+IEZyb206ICAiTWFyZWsgU3p5cHJvd3Nr aSI8bS5zenlwcm93c2tpQHNhbXN1bmcuY29tPjsNCj4gRGF0ZTogIFR1ZSwgT2N0IDI0LCAy MDE3IDA5OjMwIFBNDQo+IFRvOiAgIkh1YWNhaSBDaGVuIjxjaGVuaGNAbGVtb3RlLmNvbT47 ICJDaHJpc3RvcGggSGVsbHdpZyI8aGNoQGxzdC5kZT47DQo+IENjOiAgIlJvYmluIE11cnBo eSI8cm9iaW4ubXVycGh5QGFybS5jb20+OyAiQW5kcmV3IE1vcnRvbiI8YWtwbUBsaW51eC1m b3VuZGF0aW9uLm9yZz47ICJGdXhpbiBaaGFuZyI8emhhbmdmeEBsZW1vdGUuY29tPjsgImxp bnV4LWtlcm5lbCI8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz47ICJSYWxmIEJhZWNo bGUiPHJhbGZAbGludXgtbWlwcy5vcmc+OyAiSmFtZXNIb2dhbiI8amFtZXMuaG9nYW5AaW1n dGVjLmNvbT47ICJsaW51eC1taXBzIjxsaW51eC1taXBzQGxpbnV4LW1pcHMub3JnPjsgIkph bWVzIEUgLiBKIC5Cb3R0b21sZXkiPGplamJAbGludXgudm5ldC5pYm0uY29tPjsgIk1hcnRp biBLIC4gUGV0ZXJzZW4iPG1hcnRpbi5wZXRlcnNlbkBvcmFjbGUuY29tPjsgImxpbnV4LXNj c2kiPGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnPjsgInN0YWJsZSI8c3RhYmxlQHZnZXIu a2VybmVsLm9yZz47ICJNaWNoYWVsIFMgLiBUc2lya2luIjxtc3RAcmVkaGF0LmNvbT47ICJQ YXdlbCBPc2NpYWsiPHBhd2VsQG9zY2lhay5jb20+OyAiS3l1bmdtaW4gUGFyayI8a3l1bmdt aW4ucGFya0BzYW1zdW5nLmNvbT47ICJNaWNoYWVsIENoYW4iPG1pY2hhZWwuY2hhbkBicm9h ZGNvbS5jb20+OyAiQmVuamFtaW4gSGVycmVuc2NobWlkdCI8YmVuaEBrZXJuZWwuY3Jhc2hp bmcub3JnPjsgIkl2YW4gTWlraGF5bG92IjxpdmFuQHJ1LmlibS5jb20+OyAiVGFyaXEgVG91 a2FuIjx0YXJpcXRAbWVsbGFub3guY29tPjsgIkFuZHkgR3Jvc3MiPGFncm9zc0Bjb2RlYXVy b3JhLm9yZz47ICJNYXJrIEEgLiBHcmVlciI8bWdyZWVyQGFuaW1hbGNyZWVrLmNvbT47ICJS b2JlcnQgQmFsZHlnYSI8ci5iYWxkeWdhQGhhY2tlcmlvbi5jb20+Ow0KPiBTdWJqZWN0OiAg UmU6IFtQQVRDSCBWOSAxLzRdIGRtYS1tYXBwaW5nOiBSZXdvcmsgZG1hX2dldF9jYWNoZV9h bGlnbm1lbnQoKQ0KPg0KPiAgIA0KPiBIaSBIdWFjYWksDQo+DQo+IE9uIDIwMTctMTAtMjMg MDk6MTIsIEh1YWNhaSBDaGVuIHdyb3RlOg0KPj4gTWFrZSBkbWFfZ2V0X2NhY2hlX2FsaWdu bWVudCgpIHRvIGFjY2VwdCBhICdkZXYnIGFyZ3VtZW50LiBBcyBhIHJlc3VsdCwNCj4+IGl0 IGNhbiByZXR1cm4gZGlmZmVyZW50IGFsaWdubWVudHMgZHVlIHRvIGRpZmZlcmVudCBkZXZp Y2VzJyBJL08gY2FjaGUNCj4+IGNvaGVyZW5jeS4NCj4+DQo+PiBDdXJyZW50bHksIEFSTS9B Uk02NCBhbmQgTUlQUyBzdXBwb3J0IGNvaGVyZW50ICYgbm9uY29oZXJlbnQgZGV2aWNlcw0K Pj4gY28tZXhpc3QuIFRoaXMgbWF5IGJlIGV4dGVuZGVkIGluIHRoZSBmdXR1cmUsIHNvIGFk ZCBhIG5ldyBmdW5jdGlvbg0KPj4gcG9pbnRlciAoaS5lLCBnZXRfY2FjaGVfYWxpZ25tZW50 KSBpbiAnc3RydWN0IGRtYV9tYXBfb3BzJyBhcyBhIGdlbmVyaWMNCj4+IHNvbHV0aW9uLg0K Pj4NCj4+IENjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnDQo+IEkgZG9uJ3QgdGhpbmsgdGhp cyBjaGFuZ2Ugc2hvdWxkIGdvIHRvIHN0YWJsZS4NCj4NCj4+IENjOiBNaWNoYWVsIFMuIFRz aXJraW4gPG1zdEByZWRoYXQuY29tPg0KPj4gQ2M6IFBhd2VsIE9zY2lhayA8cGF3ZWxAb3Nj aWFrLmNvbT4NCj4+IENjOiBNYXJlayBTenlwcm93c2tpIDxtLnN6eXByb3dza2lAc2Ftc3Vu Zy5jb20+DQo+PiBDYzogS3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1zdW5nLmNv bT4NCj4+IENjOiBNaWNoYWVsIENoYW4gPG1pY2hhZWwuY2hhbkBicm9hZGNvbS5jb20+DQo+ PiBDYzogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3Jn Pg0KPj4gQ2M6IEl2YW4gTWlraGF5bG92IDxpdmFuQHJ1LmlibS5jb20+DQo+PiBDYzogVGFy aXEgVG91a2FuIDx0YXJpcXRAbWVsbGFub3guY29tPg0KPj4gQ2M6IEFuZHkgR3Jvc3MgPGFn cm9zc0Bjb2RlYXVyb3JhLm9yZz4NCj4+IENjOiBNYXJrIEEuIEdyZWVyIDxtZ3JlZXJAYW5p bWFsY3JlZWsuY29tPg0KPj4gQ2M6IFJvYmVydCBCYWxkeWdhIDxyLmJhbGR5Z2FAaGFja2Vy aW9uLmNvbT4NCj4+IENjOiBNYXJlayBTenlwcm93c2tpIDxtLnN6eXByb3dza2lAc2Ftc3Vu Zy5jb20+DQo+PiBTaWduZWQtb2ZmLWJ5OiBIdWFjYWkgQ2hlbiA8Y2hlbmhjQGxlbW90ZS5j b20+DQo+PiAtLS0NCj4+ICAgIGRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9t YWluLmMgICAgICAgfCAgIDIgKy0NCj4+ICAgIGRyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Zp ZGVvYnVmMi1kbWEtY29udGlnLmMgfCAgIDIgKy0NCj4+ICAgIGRyaXZlcnMvbmV0L2V0aGVy bmV0L2Jyb2FkY29tL2I0NC5jICAgICAgICAgICAgfCAgIDggKy0NCj4+ICAgIGRyaXZlcnMv bmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYyAgICAgICAgICAgfCAgMzIgKysrLS0NCj4+ ICAgIGRyaXZlcnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuaCAgICAgICAgICAgfCAg MTQgKy0NCj4+ICAgIGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5j ICAgICAgfCAgIDIgKy0NCj4+ICAgIGRyaXZlcnMvc3BpL3NwaS1xdXAuYyAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDQgKy0NCj4+ICAgIGRyaXZlcnMvdHR5L3NlcmlhbC9tcHNj LmMgICAgICAgICAgICAgICAgICAgICAgfCAxNzkgKysrKysrKysrKysrKy0tLS0tLS0tLS0t LQ0KPj4gICAgZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuYyAgICAgICAgICAgICAgICAg ICB8ICAxNCArLQ0KPj4gICAgaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oICAgICAgICAg ICAgICAgICAgICB8ICAxNyArKy0NCj4gRm9yIHZpZGVvYnVmMi1kbWEtY29udGlnLCBzZXJp YWwvc2Ftc3VuZyBhbmQgZG1hLW1hcHBpbmcuaDoNCj4NCj4gQWNrZWQtYnk6IE1hcmVrIFN6 eXByb3dza2kgPG0uc3p5cHJvd3NraUBzYW1zdW5nLmNvbT4NCj4NCj4NCj4+ICAgIDEwIGZp bGVzIGNoYW5nZWQsIDE1MCBpbnNlcnRpb25zKCspLCAxMjQgZGVsZXRpb25zKC0pDQo+Pg0K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWlu LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jDQo+PiBpbmRl eCBlMzZhOWJjLi4wNzhmZThkIDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9pbmZpbmliYW5k L2h3L210aGNhL210aGNhX21haW4uYw0KPj4gKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3 L210aGNhL210aGNhX21haW4uYw0KPj4gQEAgLTQxNiw3ICs0MTYsNyBAQCBzdGF0aWMgaW50 IG10aGNhX2luaXRfaWNtKHN0cnVjdCBtdGhjYV9kZXYgKm1kZXYsDQo+PiAgICANCj4+ICAg IAkvKiBDUFUgd3JpdGVzIHRvIG5vbi1yZXNlcnZlZCBNVFRzLCB3aGlsZSBIQ0EgbWlnaHQg RE1BIHRvIHJlc2VydmVkIG10dHMgKi8NCj4+ICAgIAltZGV2LT5saW1pdHMucmVzZXJ2ZWRf bXR0cyA9IEFMSUdOKG1kZXYtPmxpbWl0cy5yZXNlcnZlZF9tdHRzICogbWRldi0+bGltaXRz Lm10dF9zZWdfc2l6ZSwNCj4+IC0JCQkJCSAgIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkp IC8gbWRldi0+bGltaXRzLm10dF9zZWdfc2l6ZTsNCj4+ICsJCQkJCSAgIGRtYV9nZXRfY2Fj aGVfYWxpZ25tZW50KCZtZGV2LT5wZGV2LT5kZXYpKSAvIG1kZXYtPmxpbWl0cy5tdHRfc2Vn X3NpemU7DQo+PiAgICANCj4+ICAgIAltZGV2LT5tcl90YWJsZS5tdHRfdGFibGUgPSBtdGhj YV9hbGxvY19pY21fdGFibGUobWRldiwgaW5pdF9oY2EtPm10dF9iYXNlLA0KPj4gICAgCQkJ CQkJCSBtZGV2LT5saW1pdHMubXR0X3NlZ19zaXplLA0KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi1kbWEtY29udGlnLmMgYi9kcml2ZXJzL21l ZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItZG1hLWNvbnRpZy5jDQo+PiBpbmRleCA5ZjM4OWYz Li4xZjZhOWI3IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdmlk ZW9idWYyLWRtYS1jb250aWcuYw0KPj4gKysrIGIvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUv dmlkZW9idWYyLWRtYS1jb250aWcuYw0KPj4gQEAgLTQ4NCw3ICs0ODQsNyBAQCBzdGF0aWMg dm9pZCAqdmIyX2RjX2dldF91c2VycHRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQg bG9uZyB2YWRkciwNCj4+ICAgIAlpbnQgcmV0ID0gMDsNCj4+ICAgIAlzdHJ1Y3Qgc2dfdGFi bGUgKnNndDsNCj4+ICAgIAl1bnNpZ25lZCBsb25nIGNvbnRpZ19zaXplOw0KPj4gLQl1bnNp Z25lZCBsb25nIGRtYV9hbGlnbiA9IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCk7DQo+PiAr CXVuc2lnbmVkIGxvbmcgZG1hX2FsaWduID0gZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoZGV2 KTsNCj4+ICAgIA0KPj4gICAgCS8qIE9ubHkgY2FjaGUgYWxpZ25lZCBETUEgdHJhbnNmZXJz IGFyZSByZWxpYWJsZSAqLw0KPj4gICAgCWlmICghSVNfQUxJR05FRCh2YWRkciB8IHNpemUs IGRtYV9hbGlnbikpIHsNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9i cm9hZGNvbS9iNDQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jDQo+ PiBpbmRleCBhMTEyNWQxLi4yZjZmZmU1IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9uZXQv ZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmMNCj4+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L2Jyb2FkY29tL2I0NC5jDQo+PiBAQCAtMjM0NCw2ICsyMzQ0LDEwIEBAIHN0YXRpYyBpbnQg YjQ0X2luaXRfb25lKHN0cnVjdCBzc2JfZGV2aWNlICpzZGV2LA0KPj4gICAgCXN0cnVjdCBu ZXRfZGV2aWNlICpkZXY7DQo+PiAgICAJc3RydWN0IGI0NCAqYnA7DQo+PiAgICAJaW50IGVy cjsNCj4+ICsJdW5zaWduZWQgaW50IGRtYV9kZXNjX2FsaWduX3NpemUgPSBkbWFfZ2V0X2Nh Y2hlX2FsaWdubWVudChzZGV2LT5kbWFfZGV2KTsNCj4+ICsNCj4+ICsJLyogU2V0dXAgcGFy YW1hdGVycyBmb3Igc3luY2luZyBSWC9UWCBETUEgZGVzY3JpcHRvcnMgKi8NCj4+ICsJZG1h X2Rlc2Nfc3luY19zaXplID0gbWF4X3QodW5zaWduZWQgaW50LCBkbWFfZGVzY19hbGlnbl9z aXplLCBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSk7DQo+PiAgICANCj4+ICAgIAlpbnN0YW5j ZSsrOw0KPj4gICAgDQo+PiBAQCAtMjU4NywxMiArMjU5MSw4IEBAIHN0YXRpYyBpbmxpbmUg dm9pZCBiNDRfcGNpX2V4aXQodm9pZCkNCj4+ICAgIA0KPj4gICAgc3RhdGljIGludCBfX2lu aXQgYjQ0X2luaXQodm9pZCkNCj4+ICAgIHsNCj4+IC0JdW5zaWduZWQgaW50IGRtYV9kZXNj X2FsaWduX3NpemUgPSBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpOw0KPj4gICAgCWludCBl cnI7DQo+PiAgICANCj4+IC0JLyogU2V0dXAgcGFyYW1hdGVycyBmb3Igc3luY2luZyBSWC9U WCBETUEgZGVzY3JpcHRvcnMgKi8NCj4+IC0JZG1hX2Rlc2Nfc3luY19zaXplID0gbWF4X3Qo dW5zaWduZWQgaW50LCBkbWFfZGVzY19hbGlnbl9zaXplLCBzaXplb2Yoc3RydWN0IGRtYV9k ZXNjKSk7DQo+PiAtDQo+PiAgICAJZXJyID0gYjQ0X3BjaV9pbml0KCk7DQo+PiAgICAJaWYg KGVycikNCj4+ICAgIAkJcmV0dXJuIGVycjsNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0v ZW1hYy9jb3JlLmMNCj4+IGluZGV4IDdmZWZmMjQuLjhkY2ViYjIgMTAwNjQ0DQo+PiAtLS0g YS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMNCj4+ICsrKyBiL2RyaXZl cnMvbmV0L2V0aGVybmV0L2libS9lbWFjL2NvcmUuYw0KPj4gQEAgLTEwMzAsOCArMTAzMCw5 IEBAIHN0YXRpYyBpbnQgZW1hY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2Ug Km5kZXYsIHZvaWQgKnNhKQ0KPj4gICAgDQo+PiAgICBzdGF0aWMgaW50IGVtYWNfcmVzaXpl X3J4X3Jpbmcoc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldiwgaW50IG5ld19tdHUpDQo+PiAg ICB7DQo+PiAtCWludCByeF9zeW5jX3NpemUgPSBlbWFjX3J4X3N5bmNfc2l6ZShuZXdfbXR1 KTsNCj4+IC0JaW50IHJ4X3NrYl9zaXplID0gZW1hY19yeF9za2Jfc2l6ZShuZXdfbXR1KTsN Cj4+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9ICZkZXYtPm9mZGV2LT5kZXY7DQo+PiAr CWludCByeF9za2Jfc2l6ZSA9IGVtYWNfcnhfc2tiX3NpemUoZG1hX2RldiwgbmV3X210dSk7 DQo+PiArCWludCByeF9zeW5jX3NpemUgPSBlbWFjX3J4X3N5bmNfc2l6ZShkbWFfZGV2LCBu ZXdfbXR1KTsNCj4+ICAgIAlpbnQgaSwgcmV0ID0gMDsNCj4+ICAgIAlpbnQgbXIxX2p1bWJv X2JpdF9jaGFuZ2UgPSAwOw0KPj4gICAgDQo+PiBAQCAtMTA3NCw3ICsxMDc1LDcgQEAgc3Rh dGljIGludCBlbWFjX3Jlc2l6ZV9yeF9yaW5nKHN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYs IGludCBuZXdfbXR1KQ0KPj4gICAgCQlCVUdfT04oIWRldi0+cnhfc2tiW2ldKTsNCj4+ICAg IAkJZGV2X2tmcmVlX3NrYihkZXYtPnJ4X3NrYltpXSk7DQo+PiAgICANCj4+IC0JCXNrYl9y ZXNlcnZlKHNrYiwgRU1BQ19SWF9TS0JfSEVBRFJPT00gKyAyKTsNCj4+ICsJCXNrYl9yZXNl cnZlKHNrYiwgRU1BQ19SWF9TS0JfSEVBRFJPT00oZG1hX2RldikgKyAyKTsNCj4+ICAgIAkJ ZGV2LT5yeF9kZXNjW2ldLmRhdGFfcHRyID0NCj4+ICAgIAkJICAgIGRtYV9tYXBfc2luZ2xl KCZkZXYtPm9mZGV2LT5kZXYsIHNrYi0+ZGF0YSAtIDIsIHJ4X3N5bmNfc2l6ZSwNCj4+ICAg IAkJCQkgICBETUFfRlJPTV9ERVZJQ0UpICsgMjsNCj4+IEBAIC0xMTE1LDIwICsxMTE2LDIx IEBAIHN0YXRpYyBpbnQgZW1hY19yZXNpemVfcnhfcmluZyhzdHJ1Y3QgZW1hY19pbnN0YW5j ZSAqZGV2LCBpbnQgbmV3X210dSkNCj4+ICAgIHN0YXRpYyBpbnQgZW1hY19jaGFuZ2VfbXR1 KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgbmV3X210dSkNCj4+ICAgIHsNCj4+ICAg IAlzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7DQo+PiAr CXN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSAmZGV2LT5vZmRldi0+ZGV2Ow0KPj4gICAgCWlu dCByZXQgPSAwOw0KPj4gICAgDQo+PiAgICAJREJHKGRldiwgImNoYW5nZV9tdHUoJWQpIiBO TCwgbmV3X210dSk7DQo+PiAgICANCj4+ICAgIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkg ew0KPj4gICAgCQkvKiBDaGVjayBpZiB3ZSByZWFsbHkgbmVlZCB0byByZWluaXRpYWxpemUg UlggcmluZyAqLw0KPj4gLQkJaWYgKGVtYWNfcnhfc2tiX3NpemUobmRldi0+bXR1KSAhPSBl bWFjX3J4X3NrYl9zaXplKG5ld19tdHUpKQ0KPj4gKwkJaWYgKGVtYWNfcnhfc2tiX3NpemUo ZG1hX2RldiwgbmRldi0+bXR1KSAhPSBlbWFjX3J4X3NrYl9zaXplKGRtYV9kZXYsIG5ld19t dHUpKQ0KPj4gICAgCQkJcmV0ID0gZW1hY19yZXNpemVfcnhfcmluZyhkZXYsIG5ld19tdHUp Ow0KPj4gICAgCX0NCj4+ICAgIA0KPj4gICAgCWlmICghcmV0KSB7DQo+PiAgICAJCW5kZXYt Pm10dSA9IG5ld19tdHU7DQo+PiAtCQlkZXYtPnJ4X3NrYl9zaXplID0gZW1hY19yeF9za2Jf c2l6ZShuZXdfbXR1KTsNCj4+IC0JCWRldi0+cnhfc3luY19zaXplID0gZW1hY19yeF9zeW5j X3NpemUobmV3X210dSk7DQo+PiArCQlkZXYtPnJ4X3NrYl9zaXplID0gZW1hY19yeF9za2Jf c2l6ZShkbWFfZGV2LCBuZXdfbXR1KTsNCj4+ICsJCWRldi0+cnhfc3luY19zaXplID0gZW1h Y19yeF9zeW5jX3NpemUoZG1hX2RldiwgbmV3X210dSk7DQo+PiAgICAJfQ0KPj4gICAgDQo+ PiAgICAJcmV0dXJuIHJldDsNCj4+IEBAIC0xMTcxLDYgKzExNzMsNyBAQCBzdGF0aWMgdm9p ZCBlbWFjX2NsZWFuX3J4X3Jpbmcoc3RydWN0IGVtYWNfaW5zdGFuY2UgKmRldikNCj4+ICAg IHN0YXRpYyBpbmxpbmUgaW50IGVtYWNfYWxsb2Nfcnhfc2tiKHN0cnVjdCBlbWFjX2luc3Rh bmNlICpkZXYsIGludCBzbG90LA0KPj4gICAgCQkJCSAgICBnZnBfdCBmbGFncykNCj4+ICAg IHsNCj4+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9ICZkZXYtPm9mZGV2LT5kZXY7DQo+ PiAgICAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihkZXYtPnJ4X3NrYl9zaXpl LCBmbGFncyk7DQo+PiAgICAJaWYgKHVubGlrZWx5KCFza2IpKQ0KPj4gICAgCQlyZXR1cm4g LUVOT01FTTsNCj4+IEBAIC0xMTc4LDcgKzExODEsNyBAQCBzdGF0aWMgaW5saW5lIGludCBl bWFjX2FsbG9jX3J4X3NrYihzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2LCBpbnQgc2xvdCwN Cj4+ICAgIAlkZXYtPnJ4X3NrYltzbG90XSA9IHNrYjsNCj4+ICAgIAlkZXYtPnJ4X2Rlc2Nb c2xvdF0uZGF0YV9sZW4gPSAwOw0KPj4gICAgDQo+PiAtCXNrYl9yZXNlcnZlKHNrYiwgRU1B Q19SWF9TS0JfSEVBRFJPT00gKyAyKTsNCj4+ICsJc2tiX3Jlc2VydmUoc2tiLCBFTUFDX1JY X1NLQl9IRUFEUk9PTShkbWFfZGV2KSArIDIpOw0KPj4gICAgCWRldi0+cnhfZGVzY1tzbG90 XS5kYXRhX3B0ciA9DQo+PiAgICAJICAgIGRtYV9tYXBfc2luZ2xlKCZkZXYtPm9mZGV2LT5k ZXYsIHNrYi0+ZGF0YSAtIDIsIGRldi0+cnhfc3luY19zaXplLA0KPj4gICAgCQkJICAgRE1B X0ZST01fREVWSUNFKSArIDI7DQo+PiBAQCAtMTY0OSwxMiArMTY1MiwxMyBAQCBzdGF0aWMg aW5saW5lIHZvaWQgZW1hY19yZWN5Y2xlX3J4X3NrYihzdHJ1Y3QgZW1hY19pbnN0YW5jZSAq ZGV2LCBpbnQgc2xvdCwNCj4+ICAgIAkJCQkgICAgICAgaW50IGxlbikNCj4+ICAgIHsNCj4+ ICAgIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2LT5yeF9za2Jbc2xvdF07DQo+PiArCXN0 cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSAmZGV2LT5vZmRldi0+ZGV2Ow0KPj4gICAgDQo+PiAg ICAJREJHMihkZXYsICJyZWN5Y2xlICVkICVkIiBOTCwgc2xvdCwgbGVuKTsNCj4+ICAgIA0K Pj4gICAgCWlmIChsZW4pDQo+PiAtCQlkbWFfbWFwX3NpbmdsZSgmZGV2LT5vZmRldi0+ZGV2 LCBza2ItPmRhdGEgLSAyLA0KPj4gLQkJCSAgICAgICBFTUFDX0RNQV9BTElHTihsZW4gKyAy KSwgRE1BX0ZST01fREVWSUNFKTsNCj4+ICsJCWRtYV9tYXBfc2luZ2xlKGRtYV9kZXYsIHNr Yi0+ZGF0YSAtIDIsDQo+PiArCQkJICAgICAgIEVNQUNfRE1BX0FMSUdOKGRtYV9kZXYsIGxl biArIDIpLCBETUFfRlJPTV9ERVZJQ0UpOw0KPj4gICAgDQo+PiAgICAJZGV2LT5yeF9kZXNj W3Nsb3RdLmRhdGFfbGVuID0gMDsNCj4+ICAgIAl3bWIoKTsNCj4+IEBAIC0xNzI3LDYgKzE3 MzEsNyBAQCBzdGF0aWMgaW50IGVtYWNfcG9sbF9yeCh2b2lkICpwYXJhbSwgaW50IGJ1ZGdl dCkNCj4+ICAgIHsNCj4+ICAgIAlzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2ID0gcGFyYW07 DQo+PiAgICAJaW50IHNsb3QgPSBkZXYtPnJ4X3Nsb3QsIHJlY2VpdmVkID0gMDsNCj4+ICsJ c3RydWN0IGRldmljZSAqZG1hX2RldiA9ICZkZXYtPm9mZGV2LT5kZXY7DQo+PiAgICANCj4+ ICAgIAlEQkcyKGRldiwgInBvbGxfcngoJWQpIiBOTCwgYnVkZ2V0KTsNCj4+ICAgIA0KPj4g QEAgLTE3NjMsMTEgKzE3NjgsMTEgQEAgc3RhdGljIGludCBlbWFjX3BvbGxfcngodm9pZCAq cGFyYW0sIGludCBidWRnZXQpDQo+PiAgICANCj4+ICAgIAkJaWYgKGxlbiAmJiBsZW4gPCBF TUFDX1JYX0NPUFlfVEhSRVNIKSB7DQo+PiAgICAJCQlzdHJ1Y3Qgc2tfYnVmZiAqY29weV9z a2IgPQ0KPj4gLQkJCSAgICBhbGxvY19za2IobGVuICsgRU1BQ19SWF9TS0JfSEVBRFJPT00g KyAyLCBHRlBfQVRPTUlDKTsNCj4+ICsJCQkgICAgYWxsb2Nfc2tiKGxlbiArIEVNQUNfUlhf U0tCX0hFQURST09NKGRtYV9kZXYpICsgMiwgR0ZQX0FUT01JQyk7DQo+PiAgICAJCQlpZiAo dW5saWtlbHkoIWNvcHlfc2tiKSkNCj4+ICAgIAkJCQlnb3RvIG9vbTsNCj4+ICAgIA0KPj4g LQkJCXNrYl9yZXNlcnZlKGNvcHlfc2tiLCBFTUFDX1JYX1NLQl9IRUFEUk9PTSArIDIpOw0K Pj4gKwkJCXNrYl9yZXNlcnZlKGNvcHlfc2tiLCBFTUFDX1JYX1NLQl9IRUFEUk9PTShkbWFf ZGV2KSArIDIpOw0KPj4gICAgCQkJbWVtY3B5KGNvcHlfc2tiLT5kYXRhIC0gMiwgc2tiLT5k YXRhIC0gMiwgbGVuICsgMik7DQo+PiAgICAJCQllbWFjX3JlY3ljbGVfcnhfc2tiKGRldiwg c2xvdCwgbGVuKTsNCj4+ICAgIAkJCXNrYiA9IGNvcHlfc2tiOw0KPj4gQEAgLTI5OTgsNiAr MzAwMyw3IEBAIHN0YXRpYyBpbnQgZW1hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpvZmRldikNCj4+ICAgIAlzdHJ1Y3QgZW1hY19pbnN0YW5jZSAqZGV2Ow0KPj4gICAgCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+ZGV2Lm9mX25vZGU7DQo+PiAgICAJc3Ry dWN0IGRldmljZV9ub2RlICoqYmxpc3QgPSBOVUxMOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpk bWFfZGV2ID0gJm9mZGV2LT5kZXY7DQo+PiAgICAJaW50IGVyciwgaTsNCj4+ICAgIA0KPj4g ICAgCS8qIFNraXAgdW51c2VkL3Vud2lyZWQgRU1BQ1MuICBXZSBsZWF2ZSB0aGUgY2hlY2sg Zm9yIGFuIHVudXNlZA0KPj4gQEAgLTMwNzcsOCArMzA4Myw4IEBAIHN0YXRpYyBpbnQgZW1h Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikNCj4+ICAgIAkJICAgICAg IG5wLCBkZXYtPm1hbF9kZXYtPmRldi5vZl9ub2RlKTsNCj4+ICAgIAkJZ290byBlcnJfcmVs X2RlcHM7DQo+PiAgICAJfQ0KPj4gLQlkZXYtPnJ4X3NrYl9zaXplID0gZW1hY19yeF9za2Jf c2l6ZShuZGV2LT5tdHUpOw0KPj4gLQlkZXYtPnJ4X3N5bmNfc2l6ZSA9IGVtYWNfcnhfc3lu Y19zaXplKG5kZXYtPm10dSk7DQo+PiArCWRldi0+cnhfc2tiX3NpemUgPSBlbWFjX3J4X3Nr Yl9zaXplKGRtYV9kZXYsIG5kZXYtPm10dSk7DQo+PiArCWRldi0+cnhfc3luY19zaXplID0g ZW1hY19yeF9zeW5jX3NpemUoZG1hX2RldiwgbmRldi0+bXR1KTsNCj4+ICAgIA0KPj4gICAg CS8qIEdldCBwb2ludGVycyB0byBCRCByaW5ncyAqLw0KPj4gICAgCWRldi0+dHhfZGVzYyA9 DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5o IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5oDQo+PiBpbmRleCAzNjlk ZTJjLi44MTA3YzMyIDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJt L2VtYWMvY29yZS5oDQo+PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9j b3JlLmgNCj4+IEBAIC02OCwyMiArNjgsMjIgQEAgc3RhdGljIGlubGluZSBpbnQgZW1hY19y eF9zaXplKGludCBtdHUpDQo+PiAgICAJCXJldHVybiBtYWxfcnhfc2l6ZShFVEhfREFUQV9M RU4gKyBFTUFDX01UVV9PVkVSSEVBRCk7DQo+PiAgICB9DQo+PiAgICANCj4+IC0jZGVmaW5l IEVNQUNfRE1BX0FMSUdOKHgpCQlBTElHTigoeCksIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50 KCkpDQo+PiArI2RlZmluZSBFTUFDX0RNQV9BTElHTihkLCB4KQkJQUxJR04oKHgpLCBkbWFf Z2V0X2NhY2hlX2FsaWdubWVudChkKSkNCj4+ICAgIA0KPj4gLSNkZWZpbmUgRU1BQ19SWF9T S0JfSEVBRFJPT00JCVwNCj4+IC0JRU1BQ19ETUFfQUxJR04oQ09ORklHX0lCTV9FTUFDX1JY X1NLQl9IRUFEUk9PTSkNCj4+ICsjZGVmaW5lIEVNQUNfUlhfU0tCX0hFQURST09NKGQpCQlc DQo+PiArCUVNQUNfRE1BX0FMSUdOKGQsIENPTkZJR19JQk1fRU1BQ19SWF9TS0JfSEVBRFJP T00pDQo+PiAgICANCj4+ICAgIC8qIFNpemUgb2YgUlggc2tiIGZvciB0aGUgZ2l2ZW4gTVRV ICovDQo+PiAtc3RhdGljIGlubGluZSBpbnQgZW1hY19yeF9za2Jfc2l6ZShpbnQgbXR1KQ0K Pj4gK3N0YXRpYyBpbmxpbmUgaW50IGVtYWNfcnhfc2tiX3NpemUoc3RydWN0IGRldmljZSAq ZGV2LCBpbnQgbXR1KQ0KPj4gICAgew0KPj4gICAgCWludCBzaXplID0gbWF4KG10dSArIEVN QUNfTVRVX09WRVJIRUFELCBlbWFjX3J4X3NpemUobXR1KSk7DQo+PiAtCXJldHVybiBFTUFD X0RNQV9BTElHTihzaXplICsgMikgKyBFTUFDX1JYX1NLQl9IRUFEUk9PTTsNCj4+ICsJcmV0 dXJuIEVNQUNfRE1BX0FMSUdOKGRldiwgc2l6ZSArIDIpICsgRU1BQ19SWF9TS0JfSEVBRFJP T007DQo+PiAgICB9DQo+PiAgICANCj4+ICAgIC8qIFJYIERNQSBzeW5jIHNpemUgKi8NCj4+ IC1zdGF0aWMgaW5saW5lIGludCBlbWFjX3J4X3N5bmNfc2l6ZShpbnQgbXR1KQ0KPj4gK3N0 YXRpYyBpbmxpbmUgaW50IGVtYWNfcnhfc3luY19zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwg aW50IG10dSkNCj4+ICAgIHsNCj4+IC0JcmV0dXJuIEVNQUNfRE1BX0FMSUdOKGVtYWNfcnhf c2l6ZShtdHUpICsgMik7DQo+PiArCXJldHVybiBFTUFDX0RNQV9BTElHTihkZXYsIGVtYWNf cnhfc2l6ZShtdHUpICsgMik7DQo+PiAgICB9DQo+PiAgICANCj4+ICAgIC8qIERyaXZlciBz dGF0aXN0Y3MgaXMgc3BsaXQgaW50byB0d28gcGFydHMgdG8gbWFrZSBpdCBtb3JlIGNhY2hl IGZyaWVuZGx5Og0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxh bm94L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9t YWluLmMNCj4+IGluZGV4IGU2MWM5OWUuLmJjMTQ2ZGQgMTAwNjQ0DQo+PiAtLS0gYS9kcml2 ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21haW4uYw0KPj4gKysrIGIvZHJpdmVy cy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMNCj4+IEBAIC0xNjYwLDcgKzE2 NjAsNyBAQCBzdGF0aWMgaW50IG1seDRfaW5pdF9pY20oc3RydWN0IG1seDRfZGV2ICpkZXYs IHN0cnVjdCBtbHg0X2Rldl9jYXAgKmRldl9jYXAsDQo+PiAgICAJICovDQo+PiAgICAJZGV2 LT5jYXBzLnJlc2VydmVkX210dHMgPQ0KPj4gICAgCQlBTElHTihkZXYtPmNhcHMucmVzZXJ2 ZWRfbXR0cyAqIGRldi0+Y2Fwcy5tdHRfZW50cnlfc3osDQo+PiAtCQkgICAgICBkbWFfZ2V0 X2NhY2hlX2FsaWdubWVudCgpKSAvIGRldi0+Y2Fwcy5tdHRfZW50cnlfc3o7DQo+PiArCQkg ICAgICBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgmZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYp KSAvIGRldi0+Y2Fwcy5tdHRfZW50cnlfc3o7DQo+PiAgICANCj4+ICAgIAllcnIgPSBtbHg0 X2luaXRfaWNtX3RhYmxlKGRldiwgJnByaXYtPm1yX3RhYmxlLm10dF90YWJsZSwNCj4+ICAg IAkJCQkgIGluaXRfaGNhLT5tdHRfYmFzZSwNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Nw aS9zcGktcXVwLmMgYi9kcml2ZXJzL3NwaS9zcGktcXVwLmMNCj4+IGluZGV4IDk3NGE4Y2Uu LmU2ZGE2NmUgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL3NwaS9zcGktcXVwLmMNCj4+ICsr KyBiL2RyaXZlcnMvc3BpL3NwaS1xdXAuYw0KPj4gQEAgLTg2Miw3ICs4NjIsNyBAQCBzdGF0 aWMgYm9vbCBzcGlfcXVwX2Nhbl9kbWEoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3Rlciwgc3Ry dWN0IHNwaV9kZXZpY2UgKnNwaSwNCj4+ICAgIAkJCSAgICBzdHJ1Y3Qgc3BpX3RyYW5zZmVy ICp4ZmVyKQ0KPj4gICAgew0KPj4gICAgCXN0cnVjdCBzcGlfcXVwICpxdXAgPSBzcGlfbWFz dGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7DQo+PiAtCXNpemVfdCBkbWFfYWxpZ24gPSBkbWFf Z2V0X2NhY2hlX2FsaWdubWVudCgpOw0KPj4gKwlzaXplX3QgZG1hX2FsaWduID0gZG1hX2dl dF9jYWNoZV9hbGlnbm1lbnQocXVwLT5kZXYpOw0KPj4gICAgCWludCBuX3dvcmRzOw0KPj4g ICAgDQo+PiAgICAJaWYgKHhmZXItPnJ4X2J1Zikgew0KPj4gQEAgLTEwMzgsNyArMTAzOCw3 IEBAIHN0YXRpYyBpbnQgc3BpX3F1cF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQ0KPj4gICAgCW1hc3Rlci0+dHJhbnNmZXJfb25lID0gc3BpX3F1cF90cmFuc2Zlcl9v bmU7DQo+PiAgICAJbWFzdGVyLT5kZXYub2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOw0K Pj4gICAgCW1hc3Rlci0+YXV0b19ydW50aW1lX3BtID0gdHJ1ZTsNCj4+IC0JbWFzdGVyLT5k bWFfYWxpZ25tZW50ID0gZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKTsNCj4+ICsJbWFzdGVy LT5kbWFfYWxpZ25tZW50ID0gZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoZGV2KTsNCj4+ICAg IAltYXN0ZXItPm1heF9kbWFfbGVuID0gU1BJX01BWF9YRkVSOw0KPj4gICAgDQo+PiAgICAJ cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsNCj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3R0eS9zZXJpYWwvbXBzYy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21wc2MuYw0K Pj4gaW5kZXggNjdmZmVjYy4uOGI1ZDBkZSAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvdHR5 L3NlcmlhbC9tcHNjLmMNCj4+ICsrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tcHNjLmMNCj4+ IEBAIC04MSwxOSArODEsMTkgQEANCj4+ICAgICAqIE51bWJlciBvZiBUeCAmIFJ4IGRlc2Ny aXB0b3JzIG11c3QgYmUgcG93ZXJzIG9mIDIuDQo+PiAgICAgKi8NCj4+ICAgICNkZWZpbmUJ TVBTQ19SWFJfRU5UUklFUwkzMg0KPj4gLSNkZWZpbmUJTVBTQ19SWFJFX1NJWkUJCWRtYV9n ZXRfY2FjaGVfYWxpZ25tZW50KCkNCj4+IC0jZGVmaW5lCU1QU0NfUlhSX1NJWkUJCShNUFND X1JYUl9FTlRSSUVTICogTVBTQ19SWFJFX1NJWkUpDQo+PiAtI2RlZmluZQlNUFNDX1JYQkVf U0laRQkJZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKQ0KPj4gLSNkZWZpbmUJTVBTQ19SWEJf U0laRQkJKE1QU0NfUlhSX0VOVFJJRVMgKiBNUFNDX1JYQkVfU0laRSkNCj4+ICsjZGVmaW5l CU1QU0NfUlhSRV9TSVpFKGQpCWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KGQpDQo+PiArI2Rl ZmluZQlNUFNDX1JYUl9TSVpFKGQpCShNUFNDX1JYUl9FTlRSSUVTICogTVBTQ19SWFJFX1NJ WkUoZCkpDQo+PiArI2RlZmluZQlNUFNDX1JYQkVfU0laRShkKQlkbWFfZ2V0X2NhY2hlX2Fs aWdubWVudChkKQ0KPj4gKyNkZWZpbmUJTVBTQ19SWEJfU0laRShkKQkoTVBTQ19SWFJfRU5U UklFUyAqIE1QU0NfUlhCRV9TSVpFKGQpKQ0KPj4gICAgDQo+PiAgICAjZGVmaW5lCU1QU0Nf VFhSX0VOVFJJRVMJMzINCj4+IC0jZGVmaW5lCU1QU0NfVFhSRV9TSVpFCQlkbWFfZ2V0X2Nh Y2hlX2FsaWdubWVudCgpDQo+PiAtI2RlZmluZQlNUFNDX1RYUl9TSVpFCQkoTVBTQ19UWFJf RU5UUklFUyAqIE1QU0NfVFhSRV9TSVpFKQ0KPj4gLSNkZWZpbmUJTVBTQ19UWEJFX1NJWkUJ CWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkNCj4+IC0jZGVmaW5lCU1QU0NfVFhCX1NJWkUJ CShNUFNDX1RYUl9FTlRSSUVTICogTVBTQ19UWEJFX1NJWkUpDQo+PiArI2RlZmluZQlNUFND X1RYUkVfU0laRShkKQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudChkKQ0KPj4gKyNkZWZpbmUJ TVBTQ19UWFJfU0laRShkKQkoTVBTQ19UWFJfRU5UUklFUyAqIE1QU0NfVFhSRV9TSVpFKGQp KQ0KPj4gKyNkZWZpbmUJTVBTQ19UWEJFX1NJWkUoZCkJZG1hX2dldF9jYWNoZV9hbGlnbm1l bnQoZCkNCj4+ICsjZGVmaW5lCU1QU0NfVFhCX1NJWkUoZCkJKE1QU0NfVFhSX0VOVFJJRVMg KiBNUFNDX1RYQkVfU0laRShkKSkNCj4+ICAgIA0KPj4gLSNkZWZpbmUJTVBTQ19ETUFfQUxM T0NfU0laRQkoTVBTQ19SWFJfU0laRSArIE1QU0NfUlhCX1NJWkUgKyBNUFNDX1RYUl9TSVpF IFwNCj4+IC0JCSsgTVBTQ19UWEJfU0laRSArIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkg LyogZm9yIGFsaWdubWVudCAqLykNCj4+ICsjZGVmaW5lCU1QU0NfRE1BX0FMTE9DX1NJWkUo ZCkJKE1QU0NfUlhSX1NJWkUoZCkgKyBNUFNDX1JYQl9TSVpFKGQpICsgTVBTQ19UWFJfU0la RShkKSBcDQo+PiArCQkrIE1QU0NfVFhCX1NJWkUoZCkgKyBkbWFfZ2V0X2NhY2hlX2FsaWdu bWVudChkKSAvKiBmb3IgYWxpZ25tZW50ICovKQ0KPj4gICAgDQo+PiAgICAvKiBSeCBhbmQg VHggUmluZyBlbnRyeSBkZXNjcmlwdG9ycyAtLSBhc3N1bWUgZW50cnkgc2l6ZSBpcyA8PSBj YWNoZWxpbmUgc2l6ZSAqLw0KPj4gICAgc3RydWN0IG1wc2NfcnhfZGVzYyB7DQo+PiBAQCAt NTIwLDIyICs1MjAsMjMgQEAgc3RhdGljIHVpbnQgbXBzY19zZG1hX3R4X2FjdGl2ZShzdHJ1 Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPj4gICAgc3RhdGljIHZvaWQgbXBzY19zZG1hX3N0 YXJ0X3R4KHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpDQo+PiAgICB7DQo+PiAgICAJc3Ry dWN0IG1wc2NfdHhfZGVzYyAqdHhyZSwgKnR4cmVfcDsNCj4+ICsJc3RydWN0IGRldmljZSAq ZG1hX2RldiA9IHBpLT5wb3J0LmRldjsNCj4+ICAgIA0KPj4gICAgCS8qIElmIHR4IGlzbid0 IHJ1bm5pbmcgJiB0aGVyZSdzIGEgZGVzYyByZWFkeSB0byBnbywgc3RhcnQgaXQgKi8NCj4+ ICAgIAlpZiAoIW1wc2Nfc2RtYV90eF9hY3RpdmUocGkpKSB7DQo+PiAgICAJCXR4cmUgPSAo c3RydWN0IG1wc2NfdHhfZGVzYyAqKShwaS0+dHhyDQo+PiAtCQkJCSsgKHBpLT50eHJfdGFp bCAqIE1QU0NfVFhSRV9TSVpFKSk7DQo+PiAtCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5k ZXYsICh2b2lkICopdHhyZSwgTVBTQ19UWFJFX1NJWkUsDQo+PiArCQkJCSsgKHBpLT50eHJf dGFpbCAqIE1QU0NfVFhSRV9TSVpFKGRtYV9kZXYpKSk7DQo+PiArCQlkbWFfY2FjaGVfc3lu YyhwaS0+cG9ydC5kZXYsICh2b2lkICopdHhyZSwgTVBTQ19UWFJFX1NJWkUoZG1hX2Rldiks DQo+PiAgICAJCQkJRE1BX0ZST01fREVWSUNFKTsNCj4+ICAgICNpZiBkZWZpbmVkKENPTkZJ R19QUEMzMikgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkNCj4+ICAg IAkJaWYgKHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+ PiAgICAJCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodWxvbmcpdHhyZSwNCj4+IC0JCQkJ CSh1bG9uZyl0eHJlICsgTVBTQ19UWFJFX1NJWkUpOw0KPj4gKwkJCQkJKHVsb25nKXR4cmUg KyBNUFNDX1RYUkVfU0laRShkbWFfZGV2KSk7DQo+PiAgICAjZW5kaWYNCj4+ICAgIA0KPj4g ICAgCQlpZiAoYmUzMl90b19jcHUodHhyZS0+Y21kc3RhdCkgJiBTRE1BX0RFU0NfQ01EU1RB VF9PKSB7DQo+PiAgICAJCQl0eHJlX3AgPSAoc3RydWN0IG1wc2NfdHhfZGVzYyAqKQ0KPj4g LQkJCQkocGktPnR4cl9wICsgKHBpLT50eHJfdGFpbCAqIE1QU0NfVFhSRV9TSVpFKSk7DQo+ PiArCQkJCShwaS0+dHhyX3AgKyAocGktPnR4cl90YWlsICogTVBTQ19UWFJFX1NJWkUoZG1h X2RldikpKTsNCj4+ICAgIA0KPj4gICAgCQkJbXBzY19zZG1hX3NldF90eF9yaW5nKHBpLCB0 eHJlX3ApOw0KPj4gICAgCQkJbXBzY19zZG1hX2NtZChwaSwgU0RNQV9TRENNX1NURCB8IFNE TUFfU0RDTV9UWEQpOw0KPj4gQEAgLTczOCw3ICs3MzksNyBAQCBzdGF0aWMgdm9pZCBtcHNj X2luaXRfaHcoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4+ICAgIA0KPj4gICAgCW1w c2NfYnJnX2luaXQocGksIHBpLT5icmdfY2xrX3NyYyk7DQo+PiAgICAJbXBzY19icmdfZW5h YmxlKHBpKTsNCj4+IC0JbXBzY19zZG1hX2luaXQocGksIGRtYV9nZXRfY2FjaGVfYWxpZ25t ZW50KCkpOwkvKiBidXJzdCBhIGNhY2hlbGluZSAqLw0KPj4gKwltcHNjX3NkbWFfaW5pdChw aSwgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQocGktPnBvcnQuZGV2KSk7CS8qIGJ1cnN0IGEg Y2FjaGVsaW5lICovDQo+PiAgICAJbXBzY19zZG1hX3N0b3AocGkpOw0KPj4gICAgCW1wc2Nf aHdfaW5pdChwaSk7DQo+PiAgICB9DQo+PiBAQCAtNzQ2LDYgKzc0Nyw3IEBAIHN0YXRpYyB2 b2lkIG1wc2NfaW5pdF9odyhzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPj4gICAgc3Rh dGljIGludCBtcHNjX2FsbG9jX3JpbmdfbWVtKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkp DQo+PiAgICB7DQo+PiAgICAJaW50IHJjID0gMDsNCj4+ICsJc3RydWN0IGRldmljZSAqZG1h X2RldiA9IHBpLT5wb3J0LmRldjsNCj4+ICAgIA0KPj4gICAgCXByX2RlYnVnKCJtcHNjX2Fs bG9jX3JpbmdfbWVtWyVkXTogQWxsb2NhdGluZyByaW5nIG1lbVxuIiwNCj4+ICAgIAkJcGkt PnBvcnQubGluZSk7DQo+PiBAQCAtNzU1LDcgKzc1Nyw3IEBAIHN0YXRpYyBpbnQgbXBzY19h bGxvY19yaW5nX21lbShzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPj4gICAgCQkJcHJp bnRrKEtFUk5fRVJSICJNUFNDOiBJbmFkZXF1YXRlIERNQSBzdXBwb3J0XG4iKTsNCj4+ICAg IAkJCXJjID0gLUVOWElPOw0KPj4gICAgCQl9IGVsc2UgaWYgKChwaS0+ZG1hX3JlZ2lvbiA9 IGRtYV9hbGxvY19hdHRycyhwaS0+cG9ydC5kZXYsDQo+PiAtCQkJCQkJTVBTQ19ETUFfQUxM T0NfU0laRSwNCj4+ICsJCQkJCQlNUFNDX0RNQV9BTExPQ19TSVpFKGRtYV9kZXYpLA0KPj4g ICAgCQkJCQkJJnBpLT5kbWFfcmVnaW9uX3AsIEdGUF9LRVJORUwsDQo+PiAgICAJCQkJCQlE TUFfQVRUUl9OT05fQ09OU0lTVEVOVCkpDQo+PiAgICAJCQkJPT0gTlVMTCkgew0KPj4gQEAg LTc2OSwxMCArNzcxLDEyIEBAIHN0YXRpYyBpbnQgbXBzY19hbGxvY19yaW5nX21lbShzdHJ1 Y3QgbXBzY19wb3J0X2luZm8gKnBpKQ0KPj4gICAgDQo+PiAgICBzdGF0aWMgdm9pZCBtcHNj X2ZyZWVfcmluZ19tZW0oc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4+ICAgIHsNCj4+ ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRldjsNCj4+ICsNCj4+ICAg IAlwcl9kZWJ1ZygibXBzY19mcmVlX3JpbmdfbWVtWyVkXTogRnJlZWluZyByaW5nIG1lbVxu IiwgcGktPnBvcnQubGluZSk7DQo+PiAgICANCj4+ICAgIAlpZiAocGktPmRtYV9yZWdpb24p IHsNCj4+IC0JCWRtYV9mcmVlX2F0dHJzKHBpLT5wb3J0LmRldiwgTVBTQ19ETUFfQUxMT0Nf U0laRSwNCj4+ICsJCWRtYV9mcmVlX2F0dHJzKHBpLT5wb3J0LmRldiwgTVBTQ19ETUFfQUxM T0NfU0laRShkbWFfZGV2KSwNCj4+ICAgIAkJCQlwaS0+ZG1hX3JlZ2lvbiwgcGktPmRtYV9y ZWdpb25fcCwNCj4+ICAgIAkJCQlETUFfQVRUUl9OT05fQ09OU0lTVEVOVCk7DQo+PiAgICAJ CXBpLT5kbWFfcmVnaW9uID0gTlVMTDsNCj4+IEBAIC03ODQsNiArNzg4LDcgQEAgc3RhdGlj IHZvaWQgbXBzY19pbml0X3JpbmdzKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkpDQo+PiAg ICB7DQo+PiAgICAJc3RydWN0IG1wc2NfcnhfZGVzYyAqcnhyZTsNCj4+ICAgIAlzdHJ1Y3Qg bXBzY190eF9kZXNjICp0eHJlOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGkt PnBvcnQuZGV2Ow0KPj4gICAgCWRtYV9hZGRyX3QgZHAsIGRwX3A7DQo+PiAgICAJdTggKmJw LCAqYnBfcDsNCj4+ICAgIAlpbnQgaTsNCj4+IEBAIC03OTIsMTQgKzc5NywxNCBAQCBzdGF0 aWMgdm9pZCBtcHNjX2luaXRfcmluZ3Moc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4+ ICAgIA0KPj4gICAgCUJVR19PTihwaS0+ZG1hX3JlZ2lvbiA9PSBOVUxMKTsNCj4+ICAgIA0K Pj4gLQltZW1zZXQocGktPmRtYV9yZWdpb24sIDAsIE1QU0NfRE1BX0FMTE9DX1NJWkUpOw0K Pj4gKwltZW1zZXQocGktPmRtYV9yZWdpb24sIDAsIE1QU0NfRE1BX0FMTE9DX1NJWkUoZG1h X2RldikpOw0KPj4gICAgDQo+PiAgICAJLyoNCj4+ICAgIAkgKiBEZXNjcmlwdG9ycyAmIGJ1 ZmZlcnMgYXJlIG11bHRpcGxlcyBvZiBjYWNoZWxpbmUgc2l6ZSBhbmQgbXVzdCBiZQ0KPj4g ICAgCSAqIGNhY2hlbGluZSBhbGlnbmVkLg0KPj4gICAgCSAqLw0KPj4gLQlkcCA9IEFMSUdO KCh1MzIpcGktPmRtYV9yZWdpb24sIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KCkpOw0KPj4g LQlkcF9wID0gQUxJR04oKHUzMilwaS0+ZG1hX3JlZ2lvbl9wLCBkbWFfZ2V0X2NhY2hlX2Fs aWdubWVudCgpKTsNCj4+ICsJZHAgPSBBTElHTigodTMyKXBpLT5kbWFfcmVnaW9uLCBkbWFf Z2V0X2NhY2hlX2FsaWdubWVudChkbWFfZGV2KSk7DQo+PiArCWRwX3AgPSBBTElHTigodTMy KXBpLT5kbWFfcmVnaW9uX3AsIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KGRtYV9kZXYpKTsN Cj4+ICAgIA0KPj4gICAgCS8qDQo+PiAgICAJICogUGFydGl0aW9uIGRtYSByZWdpb24gaW50 byByeCByaW5nIGRlc2NyaXB0b3IsIHJ4IGJ1ZmZlcnMsDQo+PiBAQCAtODA3LDIwICs4MTIs MjAgQEAgc3RhdGljIHZvaWQgbXBzY19pbml0X3JpbmdzKHN0cnVjdCBtcHNjX3BvcnRfaW5m byAqcGkpDQo+PiAgICAJICovDQo+PiAgICAJcGktPnJ4ciA9IGRwOw0KPj4gICAgCXBpLT5y eHJfcCA9IGRwX3A7DQo+PiAtCWRwICs9IE1QU0NfUlhSX1NJWkU7DQo+PiAtCWRwX3AgKz0g TVBTQ19SWFJfU0laRTsNCj4+ICsJZHAgKz0gTVBTQ19SWFJfU0laRShkbWFfZGV2KTsNCj4+ ICsJZHBfcCArPSBNUFNDX1JYUl9TSVpFKGRtYV9kZXYpOw0KPj4gICAgDQo+PiAgICAJcGkt PnJ4YiA9ICh1OCAqKWRwOw0KPj4gICAgCXBpLT5yeGJfcCA9ICh1OCAqKWRwX3A7DQo+PiAt CWRwICs9IE1QU0NfUlhCX1NJWkU7DQo+PiAtCWRwX3AgKz0gTVBTQ19SWEJfU0laRTsNCj4+ ICsJZHAgKz0gTVBTQ19SWEJfU0laRShkbWFfZGV2KTsNCj4+ICsJZHBfcCArPSBNUFNDX1JY Ql9TSVpFKGRtYV9kZXYpOw0KPj4gICAgDQo+PiAgICAJcGktPnJ4cl9wb3NuID0gMDsNCj4+ ICAgIA0KPj4gICAgCXBpLT50eHIgPSBkcDsNCj4+ICAgIAlwaS0+dHhyX3AgPSBkcF9wOw0K Pj4gLQlkcCArPSBNUFNDX1RYUl9TSVpFOw0KPj4gLQlkcF9wICs9IE1QU0NfVFhSX1NJWkU7 DQo+PiArCWRwICs9IE1QU0NfVFhSX1NJWkUoZG1hX2Rldik7DQo+PiArCWRwX3AgKz0gTVBT Q19UWFJfU0laRShkbWFfZGV2KTsNCj4+ICAgIA0KPj4gICAgCXBpLT50eGIgPSAodTggKilk cDsNCj4+ICAgIAlwaS0+dHhiX3AgPSAodTggKilkcF9wOw0KPj4gQEAgLTgzNywxOCArODQy LDE4IEBAIHN0YXRpYyB2b2lkIG1wc2NfaW5pdF9yaW5ncyhzdHJ1Y3QgbXBzY19wb3J0X2lu Zm8gKnBpKQ0KPj4gICAgCWZvciAoaSA9IDA7IGkgPCBNUFNDX1JYUl9FTlRSSUVTOyBpKysp IHsNCj4+ICAgIAkJcnhyZSA9IChzdHJ1Y3QgbXBzY19yeF9kZXNjICopZHA7DQo+PiAgICAN Cj4+IC0JCXJ4cmUtPmJ1ZnNpemUgPSBjcHVfdG9fYmUxNihNUFNDX1JYQkVfU0laRSk7DQo+ PiArCQlyeHJlLT5idWZzaXplID0gY3B1X3RvX2JlMTYoTVBTQ19SWEJFX1NJWkUoZG1hX2Rl dikpOw0KPj4gICAgCQlyeHJlLT5ieXRlY250ID0gY3B1X3RvX2JlMTYoMCk7DQo+PiAgICAJ CXJ4cmUtPmNtZHN0YXQgPSBjcHVfdG9fYmUzMihTRE1BX0RFU0NfQ01EU1RBVF9PDQo+PiAg ICAJCQkJfCBTRE1BX0RFU0NfQ01EU1RBVF9FSSB8IFNETUFfREVTQ19DTURTVEFUX0YNCj4+ ICAgIAkJCQl8IFNETUFfREVTQ19DTURTVEFUX0wpOw0KPj4gLQkJcnhyZS0+bGluayA9IGNw dV90b19iZTMyKGRwX3AgKyBNUFNDX1JYUkVfU0laRSk7DQo+PiArCQlyeHJlLT5saW5rID0g Y3B1X3RvX2JlMzIoZHBfcCArIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKTsNCj4+ICAgIAkJ cnhyZS0+YnVmX3B0ciA9IGNwdV90b19iZTMyKGJwX3ApOw0KPj4gICAgDQo+PiAtCQlkcCAr PSBNUFNDX1JYUkVfU0laRTsNCj4+IC0JCWRwX3AgKz0gTVBTQ19SWFJFX1NJWkU7DQo+PiAt CQlicCArPSBNUFNDX1JYQkVfU0laRTsNCj4+IC0JCWJwX3AgKz0gTVBTQ19SWEJFX1NJWkU7 DQo+PiArCQlkcCArPSBNUFNDX1JYUkVfU0laRShkbWFfZGV2KTsNCj4+ICsJCWRwX3AgKz0g TVBTQ19SWFJFX1NJWkUoZG1hX2Rldik7DQo+PiArCQlicCArPSBNUFNDX1JYQkVfU0laRShk bWFfZGV2KTsNCj4+ICsJCWJwX3AgKz0gTVBTQ19SWEJFX1NJWkUoZG1hX2Rldik7DQo+PiAg ICAJfQ0KPj4gICAgCXJ4cmUtPmxpbmsgPSBjcHVfdG9fYmUzMihwaS0+cnhyX3ApOwkvKiBX cmFwIGxhc3QgYmFjayB0byBmaXJzdCAqLw0KPj4gICAgDQo+PiBAQCAtODYxLDIzICs4NjYs MjMgQEAgc3RhdGljIHZvaWQgbXBzY19pbml0X3JpbmdzKHN0cnVjdCBtcHNjX3BvcnRfaW5m byAqcGkpDQo+PiAgICAJZm9yIChpID0gMDsgaSA8IE1QU0NfVFhSX0VOVFJJRVM7IGkrKykg ew0KPj4gICAgCQl0eHJlID0gKHN0cnVjdCBtcHNjX3R4X2Rlc2MgKilkcDsNCj4+ICAgIA0K Pj4gLQkJdHhyZS0+bGluayA9IGNwdV90b19iZTMyKGRwX3AgKyBNUFNDX1RYUkVfU0laRSk7 DQo+PiArCQl0eHJlLT5saW5rID0gY3B1X3RvX2JlMzIoZHBfcCArIE1QU0NfVFhSRV9TSVpF KGRtYV9kZXYpKTsNCj4+ICAgIAkJdHhyZS0+YnVmX3B0ciA9IGNwdV90b19iZTMyKGJwX3Ap Ow0KPj4gICAgDQo+PiAtCQlkcCArPSBNUFNDX1RYUkVfU0laRTsNCj4+IC0JCWRwX3AgKz0g TVBTQ19UWFJFX1NJWkU7DQo+PiAtCQlicCArPSBNUFNDX1RYQkVfU0laRTsNCj4+IC0JCWJw X3AgKz0gTVBTQ19UWEJFX1NJWkU7DQo+PiArCQlkcCArPSBNUFNDX1RYUkVfU0laRShkbWFf ZGV2KTsNCj4+ICsJCWRwX3AgKz0gTVBTQ19UWFJFX1NJWkUoZG1hX2Rldik7DQo+PiArCQli cCArPSBNUFNDX1RYQkVfU0laRShkbWFfZGV2KTsNCj4+ICsJCWJwX3AgKz0gTVBTQ19UWEJF X1NJWkUoZG1hX2Rldik7DQo+PiAgICAJfQ0KPj4gICAgCXR4cmUtPmxpbmsgPSBjcHVfdG9f YmUzMihwaS0+dHhyX3ApOwkvKiBXcmFwIGxhc3QgYmFjayB0byBmaXJzdCAqLw0KPj4gICAg DQo+PiAgICAJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXBpLT5kbWFf cmVnaW9uLA0KPj4gLQkJCU1QU0NfRE1BX0FMTE9DX1NJWkUsIERNQV9CSURJUkVDVElPTkFM KTsNCj4+ICsJCQlNUFNDX0RNQV9BTExPQ19TSVpFKGRtYV9kZXYpLCBETUFfQklESVJFQ1RJ T05BTCk7DQo+PiAgICAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENP TkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpDQo+PiAgICAJCWlmIChwaS0+Y2FjaGVfbWdtdCkg LyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLw0KPj4gICAgCQkJZmx1c2hfZGNhY2hlX3Jh bmdlKCh1bG9uZylwaS0+ZG1hX3JlZ2lvbiwNCj4+ICAgIAkJCQkJKHVsb25nKXBpLT5kbWFf cmVnaW9uDQo+PiAtCQkJCQkrIE1QU0NfRE1BX0FMTE9DX1NJWkUpOw0KPj4gKwkJCQkJKyBN UFNDX0RNQV9BTExPQ19TSVpFKGRtYV9kZXYpKTsNCj4+ICAgICNlbmRpZg0KPj4gICAgDQo+ PiAgICAJcmV0dXJuOw0KPj4gQEAgLTkzNiw2ICs5NDEsNyBAQCBzdGF0aWMgaW50IHNlcmlh bF9wb2xsZWQ7DQo+PiAgICBzdGF0aWMgaW50IG1wc2NfcnhfaW50cihzdHJ1Y3QgbXBzY19w b3J0X2luZm8gKnBpLCB1bnNpZ25lZCBsb25nICpmbGFncykNCj4+ICAgIHsNCj4+ICAgIAlz dHJ1Y3QgbXBzY19yeF9kZXNjICpyeHJlOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2 ID0gcGktPnBvcnQuZGV2Ow0KPj4gICAgCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZwaS0+ cG9ydC5zdGF0ZS0+cG9ydDsNCj4+ICAgIAl1MzIJY21kc3RhdCwgYnl0ZXNfaW4sIGk7DQo+ PiAgICAJaW50CXJjID0gMDsNCj4+IEBAIC05NDQsMTQgKzk1MCwxNCBAQCBzdGF0aWMgaW50 IG1wc2NfcnhfaW50cihzdHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpLCB1bnNpZ25lZCBsb25n ICpmbGFncykNCj4+ICAgIA0KPj4gICAgCXByX2RlYnVnKCJtcHNjX3J4X2ludHJbJWRdOiBI YW5kbGluZyBSeCBpbnRyXG4iLCBwaS0+cG9ydC5saW5lKTsNCj4+ICAgIA0KPj4gLQlyeHJl ID0gKHN0cnVjdCBtcHNjX3J4X2Rlc2MgKikocGktPnJ4ciArIChwaS0+cnhyX3Bvc24qTVBT Q19SWFJFX1NJWkUpKTsNCj4+ICsJcnhyZSA9IChzdHJ1Y3QgbXBzY19yeF9kZXNjICopKHBp LT5yeHIgKyAocGktPnJ4cl9wb3NuKk1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKSk7DQo+PiAg ICANCj4+IC0JZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXJ4cmUsIE1Q U0NfUlhSRV9TSVpFLA0KPj4gKwlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lk ICopcnhyZSwgTVBTQ19SWFJFX1NJWkUoZG1hX2RldiksDQo+PiAgICAJCQlETUFfRlJPTV9E RVZJQ0UpOw0KPj4gICAgI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChD T05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQ0KPj4gICAgCWlmIChwaS0+Y2FjaGVfbWdtdCkg LyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLw0KPj4gICAgCQlpbnZhbGlkYXRlX2RjYWNo ZV9yYW5nZSgodWxvbmcpcnhyZSwNCj4+IC0JCQkJKHVsb25nKXJ4cmUgKyBNUFNDX1JYUkVf U0laRSk7DQo+PiArCQkJCSh1bG9uZylyeHJlICsgTVBTQ19SWFJFX1NJWkUoZG1hX2Rldikp Ow0KPj4gICAgI2VuZGlmDQo+PiAgICANCj4+ICAgIAkvKg0KPj4gQEAgLTk3OSwxMyArOTg1 LDEzIEBAIHN0YXRpYyBpbnQgbXBzY19yeF9pbnRyKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAq cGksIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQ0KPj4gICAgCQkJICovDQo+PiAgICAJCX0NCj4+ ICAgIA0KPj4gLQkJYnAgPSBwaS0+cnhiICsgKHBpLT5yeHJfcG9zbiAqIE1QU0NfUlhCRV9T SVpFKTsNCj4+IC0JCWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKilicCwg TVBTQ19SWEJFX1NJWkUsDQo+PiArCQlicCA9IHBpLT5yeGIgKyAocGktPnJ4cl9wb3NuICog TVBTQ19SWEJFX1NJWkUoZG1hX2RldikpOw0KPj4gKwkJZG1hX2NhY2hlX3N5bmMocGktPnBv cnQuZGV2LCAodm9pZCAqKWJwLCBNUFNDX1JYQkVfU0laRShkbWFfZGV2KSwNCj4+ICAgIAkJ CQlETUFfRlJPTV9ERVZJQ0UpOw0KPj4gICAgI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAm JiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQ0KPj4gICAgCQlpZiAocGkt PmNhY2hlX21nbXQpIC8qIEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8NCj4+ICAgIAkJCWlu dmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bG9uZylicCwNCj4+IC0JCQkJCSh1bG9uZylicCAr IE1QU0NfUlhCRV9TSVpFKTsNCj4+ICsJCQkJCSh1bG9uZylicCArIE1QU0NfUlhCRV9TSVpF KGRtYV9kZXYpKTsNCj4+ICAgICNlbmRpZg0KPj4gICAgDQo+PiAgICAJCS8qDQo+PiBAQCAt MTA1NiwyNCArMTA2MiwyNCBAQCBzdGF0aWMgaW50IG1wc2NfcnhfaW50cihzdHJ1Y3QgbXBz Y19wb3J0X2luZm8gKnBpLCB1bnNpZ25lZCBsb25nICpmbGFncykNCj4+ICAgIAkJCQl8IFNE TUFfREVTQ19DTURTVEFUX0VJIHwgU0RNQV9ERVNDX0NNRFNUQVRfRg0KPj4gICAgCQkJCXwg U0RNQV9ERVNDX0NNRFNUQVRfTCk7DQo+PiAgICAJCXdtYigpOw0KPj4gLQkJZG1hX2NhY2hl X3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXJ4cmUsIE1QU0NfUlhSRV9TSVpFLA0KPj4g KwkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXJ4cmUsIE1QU0NfUlhS RV9TSVpFKGRtYV9kZXYpLA0KPj4gICAgCQkJCURNQV9CSURJUkVDVElPTkFMKTsNCj4+ICAg ICNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hF UkVOVF9DQUNIRSkNCj4+ICAgIAkJaWYgKHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0Mls0Nl0w IFJlcyAjQ09NTS0yICovDQo+PiAgICAJCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVsb25nKXJ4 cmUsDQo+PiAtCQkJCQkodWxvbmcpcnhyZSArIE1QU0NfUlhSRV9TSVpFKTsNCj4+ICsJCQkJ CSh1bG9uZylyeHJlICsgTVBTQ19SWFJFX1NJWkUoZG1hX2RldikpOw0KPj4gICAgI2VuZGlm DQo+PiAgICANCj4+ICAgIAkJLyogQWR2YW5jZSB0byBuZXh0IGRlc2NyaXB0b3IgKi8NCj4+ ICAgIAkJcGktPnJ4cl9wb3NuID0gKHBpLT5yeHJfcG9zbiArIDEpICYgKE1QU0NfUlhSX0VO VFJJRVMgLSAxKTsNCj4+ICAgIAkJcnhyZSA9IChzdHJ1Y3QgbXBzY19yeF9kZXNjICopDQo+ PiAtCQkJKHBpLT5yeHIgKyAocGktPnJ4cl9wb3NuICogTVBTQ19SWFJFX1NJWkUpKTsNCj4+ IC0JCWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKilyeHJlLCBNUFNDX1JY UkVfU0laRSwNCj4+ICsJCQkocGktPnJ4ciArIChwaS0+cnhyX3Bvc24gKiBNUFNDX1JYUkVf U0laRShkbWFfZGV2KSkpOw0KPj4gKwkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAo dm9pZCAqKXJ4cmUsIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpLA0KPj4gICAgCQkJCURNQV9G Uk9NX0RFVklDRSk7DQo+PiAgICAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZp bmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpDQo+PiAgICAJCWlmIChwaS0+Y2FjaGVf bWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLw0KPj4gICAgCQkJaW52YWxpZGF0 ZV9kY2FjaGVfcmFuZ2UoKHVsb25nKXJ4cmUsDQo+PiAtCQkJCQkodWxvbmcpcnhyZSArIE1Q U0NfUlhSRV9TSVpFKTsNCj4+ICsJCQkJCSh1bG9uZylyeHJlICsgTVBTQ19SWFJFX1NJWkUo ZG1hX2RldikpOw0KPj4gICAgI2VuZGlmDQo+PiAgICAJCXJjID0gMTsNCj4+ICAgIAl9DQo+ PiBAQCAtMTA5MSw5ICsxMDk3LDEwIEBAIHN0YXRpYyBpbnQgbXBzY19yeF9pbnRyKHN0cnVj dCBtcHNjX3BvcnRfaW5mbyAqcGksIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQ0KPj4gICAgc3Rh dGljIHZvaWQgbXBzY19zZXR1cF90eF9kZXNjKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGks IHUzMiBjb3VudCwgdTMyIGludHIpDQo+PiAgICB7DQo+PiAgICAJc3RydWN0IG1wc2NfdHhf ZGVzYyAqdHhyZTsNCj4+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRl djsNCj4+ICAgIA0KPj4gICAgCXR4cmUgPSAoc3RydWN0IG1wc2NfdHhfZGVzYyAqKShwaS0+ dHhyDQo+PiAtCQkJKyAocGktPnR4cl9oZWFkICogTVBTQ19UWFJFX1NJWkUpKTsNCj4+ICsJ CQkrIChwaS0+dHhyX2hlYWQgKiBNUFNDX1RYUkVfU0laRShkbWFfZGV2KSkpOw0KPj4gICAg DQo+PiAgICAJdHhyZS0+Ynl0ZWNudCA9IGNwdV90b19iZTE2KGNvdW50KTsNCj4+ICAgIAl0 eHJlLT5zaGFkb3cgPSB0eHJlLT5ieXRlY250Ow0KPj4gQEAgLTExMDIsMTcgKzExMDksMTgg QEAgc3RhdGljIHZvaWQgbXBzY19zZXR1cF90eF9kZXNjKHN0cnVjdCBtcHNjX3BvcnRfaW5m byAqcGksIHUzMiBjb3VudCwgdTMyIGludHIpDQo+PiAgICAJCQl8IFNETUFfREVTQ19DTURT VEFUX0wNCj4+ICAgIAkJCXwgKChpbnRyKSA/IFNETUFfREVTQ19DTURTVEFUX0VJIDogMCkp Ow0KPj4gICAgCXdtYigpOw0KPj4gLQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2 b2lkICopdHhyZSwgTVBTQ19UWFJFX1NJWkUsDQo+PiArCWRtYV9jYWNoZV9zeW5jKHBpLT5w b3J0LmRldiwgKHZvaWQgKil0eHJlLCBNUFNDX1RYUkVfU0laRShkbWFfZGV2KSwNCj4+ICAg IAkJCURNQV9CSURJUkVDVElPTkFMKTsNCj4+ICAgICNpZiBkZWZpbmVkKENPTkZJR19QUEMz MikgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSkNCj4+ICAgIAlpZiAo cGktPmNhY2hlX21nbXQpIC8qIEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8NCj4+ICAgIAkJ Zmx1c2hfZGNhY2hlX3JhbmdlKCh1bG9uZyl0eHJlLA0KPj4gLQkJCQkodWxvbmcpdHhyZSAr IE1QU0NfVFhSRV9TSVpFKTsNCj4+ICsJCQkJKHVsb25nKXR4cmUgKyBNUFNDX1RYUkVfU0la RShkbWFfZGV2KSk7DQo+PiAgICAjZW5kaWYNCj4+ICAgIH0NCj4+ICAgIA0KPj4gICAgc3Rh dGljIHZvaWQgbXBzY19jb3B5X3R4X2RhdGEoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkN Cj4+ICAgIHsNCj4+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRldjsN Cj4+ICAgIAlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcGktPnBvcnQuc3RhdGUtPnhtaXQ7 DQo+PiAgICAJdTggKmJwOw0KPj4gICAgCXUzMiBpOw0KPj4gQEAgLTExMjksMTcgKzExMzcs MTcgQEAgc3RhdGljIHZvaWQgbXBzY19jb3B5X3R4X2RhdGEoc3RydWN0IG1wc2NfcG9ydF9p bmZvICpwaSkNCj4+ICAgIAkJCSAqIENIUl8xLiAgSW5zdGVhZCwganVzdCBwdXQgaXQgaW4t YmFuZCB3aXRoDQo+PiAgICAJCQkgKiBhbGwgdGhlIG90aGVyIFR4IGRhdGEuDQo+PiAgICAJ CQkgKi8NCj4+IC0JCQlicCA9IHBpLT50eGIgKyAocGktPnR4cl9oZWFkICogTVBTQ19UWEJF X1NJWkUpOw0KPj4gKwkJCWJwID0gcGktPnR4YiArIChwaS0+dHhyX2hlYWQgKiBNUFNDX1RY QkVfU0laRShkbWFfZGV2KSk7DQo+PiAgICAJCQkqYnAgPSBwaS0+cG9ydC54X2NoYXI7DQo+ PiAgICAJCQlwaS0+cG9ydC54X2NoYXIgPSAwOw0KPj4gICAgCQkJaSA9IDE7DQo+PiAgICAJ CX0gZWxzZSBpZiAoIXVhcnRfY2lyY19lbXB0eSh4bWl0KQ0KPj4gICAgCQkJCSYmICF1YXJ0 X3R4X3N0b3BwZWQoJnBpLT5wb3J0KSkgew0KPj4gLQkJCWkgPSBtaW4oKHUzMilNUFNDX1RY QkVfU0laRSwNCj4+ICsJCQlpID0gbWluKCh1MzIpTVBTQ19UWEJFX1NJWkUoZG1hX2Rldiks DQo+PiAgICAJCQkJKHUzMil1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSk7DQo+PiAg ICAJCQlpID0gbWluKGksICh1MzIpQ0lSQ19DTlRfVE9fRU5EKHhtaXQtPmhlYWQsIHhtaXQt PnRhaWwsDQo+PiAgICAJCQkJVUFSVF9YTUlUX1NJWkUpKTsNCj4+IC0JCQlicCA9IHBpLT50 eGIgKyAocGktPnR4cl9oZWFkICogTVBTQ19UWEJFX1NJWkUpOw0KPj4gKwkJCWJwID0gcGkt PnR4YiArIChwaS0+dHhyX2hlYWQgKiBNUFNDX1RYQkVfU0laRShkbWFfZGV2KSk7DQo+PiAg ICAJCQltZW1jcHkoYnAsICZ4bWl0LT5idWZbeG1pdC0+dGFpbF0sIGkpOw0KPj4gICAgCQkJ eG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgaSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsN Cj4+ICAgIA0KPj4gQEAgLTExNDksMTIgKzExNTcsMTIgQEAgc3RhdGljIHZvaWQgbXBzY19j b3B5X3R4X2RhdGEoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4+ICAgIAkJCXJldHVy bjsNCj4+ICAgIAkJfQ0KPj4gICAgDQo+PiAtCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5k ZXYsICh2b2lkICopYnAsIE1QU0NfVFhCRV9TSVpFLA0KPj4gKwkJZG1hX2NhY2hlX3N5bmMo cGktPnBvcnQuZGV2LCAodm9pZCAqKWJwLCBNUFNDX1RYQkVfU0laRShkbWFfZGV2KSwNCj4+ ICAgIAkJCQlETUFfQklESVJFQ1RJT05BTCk7DQo+PiAgICAjaWYgZGVmaW5lZChDT05GSUdf UFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpDQo+PiAgICAJ CWlmIChwaS0+Y2FjaGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0tMiAqLw0KPj4g ICAgCQkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bG9uZylicCwNCj4+IC0JCQkJCSh1bG9uZyli cCArIE1QU0NfVFhCRV9TSVpFKTsNCj4+ICsJCQkJCSh1bG9uZylicCArIE1QU0NfVFhCRV9T SVpFKGRtYV9kZXYpKTsNCj4+ICAgICNlbmRpZg0KPj4gICAgCQltcHNjX3NldHVwX3R4X2Rl c2MocGksIGksIDEpOw0KPj4gICAgDQo+PiBAQCAtMTE2Niw2ICsxMTc0LDcgQEAgc3RhdGlj IHZvaWQgbXBzY19jb3B5X3R4X2RhdGEoc3RydWN0IG1wc2NfcG9ydF9pbmZvICpwaSkNCj4+ ICAgIHN0YXRpYyBpbnQgbXBzY190eF9pbnRyKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkp DQo+PiAgICB7DQo+PiAgICAJc3RydWN0IG1wc2NfdHhfZGVzYyAqdHhyZTsNCj4+ICsJc3Ry dWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRldjsNCj4+ICAgIAlpbnQgcmMgPSAw Ow0KPj4gICAgCXVuc2lnbmVkIGxvbmcgaWZsYWdzOw0KPj4gICAgDQo+PiBAQCAtMTE3Mywx NCArMTE4MiwxNCBAQCBzdGF0aWMgaW50IG1wc2NfdHhfaW50cihzdHJ1Y3QgbXBzY19wb3J0 X2luZm8gKnBpKQ0KPj4gICAgDQo+PiAgICAJaWYgKCFtcHNjX3NkbWFfdHhfYWN0aXZlKHBp KSkgew0KPj4gICAgCQl0eHJlID0gKHN0cnVjdCBtcHNjX3R4X2Rlc2MgKikocGktPnR4cg0K Pj4gLQkJCQkrIChwaS0+dHhyX3RhaWwgKiBNUFNDX1RYUkVfU0laRSkpOw0KPj4gKwkJCQkr IChwaS0+dHhyX3RhaWwgKiBNUFNDX1RYUkVfU0laRShkbWFfZGV2KSkpOw0KPj4gICAgDQo+ PiAtCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICopdHhyZSwgTVBTQ19U WFJFX1NJWkUsDQo+PiArCQlkbWFfY2FjaGVfc3luYyhwaS0+cG9ydC5kZXYsICh2b2lkICop dHhyZSwgTVBTQ19UWFJFX1NJWkUoZG1hX2RldiksDQo+PiAgICAJCQkJRE1BX0ZST01fREVW SUNFKTsNCj4+ICAgICNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQoQ09O RklHX05PVF9DT0hFUkVOVF9DQUNIRSkNCj4+ICAgIAkJaWYgKHBpLT5jYWNoZV9tZ210KSAv KiBHVDY0Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+PiAgICAJCQlpbnZhbGlkYXRlX2RjYWNo ZV9yYW5nZSgodWxvbmcpdHhyZSwNCj4+IC0JCQkJCSh1bG9uZyl0eHJlICsgTVBTQ19UWFJF X1NJWkUpOw0KPj4gKwkJCQkJKHVsb25nKXR4cmUgKyBNUFNDX1RYUkVfU0laRShkbWFfZGV2 KSk7DQo+PiAgICAjZW5kaWYNCj4+ICAgIA0KPj4gICAgCQl3aGlsZSAoIShiZTMyX3RvX2Nw dSh0eHJlLT5jbWRzdGF0KSAmIFNETUFfREVTQ19DTURTVEFUX08pKSB7DQo+PiBAQCAtMTE5 MywxMyArMTIwMiwxMyBAQCBzdGF0aWMgaW50IG1wc2NfdHhfaW50cihzdHJ1Y3QgbXBzY19w b3J0X2luZm8gKnBpKQ0KPj4gICAgCQkJCWJyZWFrOw0KPj4gICAgDQo+PiAgICAJCQl0eHJl ID0gKHN0cnVjdCBtcHNjX3R4X2Rlc2MgKikocGktPnR4cg0KPj4gLQkJCQkJKyAocGktPnR4 cl90YWlsICogTVBTQ19UWFJFX1NJWkUpKTsNCj4+ICsJCQkJCSsgKHBpLT50eHJfdGFpbCAq IE1QU0NfVFhSRV9TSVpFKGRtYV9kZXYpKSk7DQo+PiAgICAJCQlkbWFfY2FjaGVfc3luYyhw aS0+cG9ydC5kZXYsICh2b2lkICopdHhyZSwNCj4+IC0JCQkJCU1QU0NfVFhSRV9TSVpFLCBE TUFfRlJPTV9ERVZJQ0UpOw0KPj4gKwkJCQkJTVBTQ19UWFJFX1NJWkUoZG1hX2RldiksIERN QV9GUk9NX0RFVklDRSk7DQo+PiAgICAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFk ZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpDQo+PiAgICAJCQlpZiAocGktPmNh Y2hlX21nbXQpIC8qIEdUNjQyWzQ2XTAgUmVzICNDT01NLTIgKi8NCj4+ICAgIAkJCQlpbnZh bGlkYXRlX2RjYWNoZV9yYW5nZSgodWxvbmcpdHhyZSwNCj4+IC0JCQkJCQkodWxvbmcpdHhy ZSArIE1QU0NfVFhSRV9TSVpFKTsNCj4+ICsJCQkJCQkodWxvbmcpdHhyZSArIE1QU0NfVFhS RV9TSVpFKGRtYV9kZXYpKTsNCj4+ICAgICNlbmRpZg0KPj4gICAgCQl9DQo+PiAgICANCj4+ IEBAIC0xMzYwLDYgKzEzNjksNyBAQCBzdGF0aWMgaW50IG1wc2Nfc3RhcnR1cChzdHJ1Y3Qg dWFydF9wb3J0ICpwb3J0KQ0KPj4gICAgew0KPj4gICAgCXN0cnVjdCBtcHNjX3BvcnRfaW5m byAqcGkgPQ0KPj4gICAgCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IG1wc2NfcG9ydF9p bmZvLCBwb3J0KTsNCj4+ICsJc3RydWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRl djsNCj4+ICAgIAl1MzIgZmxhZyA9IDA7DQo+PiAgICAJaW50IHJjOw0KPj4gICAgDQo+PiBA QCAtMTM4MSw3ICsxMzkxLDcgQEAgc3RhdGljIGludCBtcHNjX3N0YXJ0dXAoc3RydWN0IHVh cnRfcG9ydCAqcG9ydCkNCj4+ICAgIA0KPj4gICAgCQltcHNjX3NkbWFfaW50cl91bm1hc2so cGksIDB4Zik7DQo+PiAgICAJCW1wc2Nfc2RtYV9zZXRfcnhfcmluZyhwaSwgKHN0cnVjdCBt cHNjX3J4X2Rlc2MgKikocGktPnJ4cl9wDQo+PiAtCQkJCQkrIChwaS0+cnhyX3Bvc24gKiBN UFNDX1JYUkVfU0laRSkpKTsNCj4+ICsJCQkJCSsgKHBpLT5yeHJfcG9zbiAqIE1QU0NfUlhS RV9TSVpFKGRtYV9kZXYpKSkpOw0KPj4gICAgCX0NCj4+ICAgIA0KPj4gICAgCXJldHVybiBy YzsNCj4+IEBAIC0xNTU1LDkgKzE1NjUsMTAgQEAgc3RhdGljIHZvaWQgbXBzY19wdXRfcG9s bF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsDQo+PiAgICANCj4+ICAgIHN0YXRpYyBp bnQgbXBzY19nZXRfcG9sbF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpDQo+PiAgICB7 DQo+PiArCXN0cnVjdCBtcHNjX3J4X2Rlc2MgKnJ4cmU7DQo+PiAgICAJc3RydWN0IG1wc2Nf cG9ydF9pbmZvICpwaSA9DQo+PiAgICAJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgbXBz Y19wb3J0X2luZm8sIHBvcnQpOw0KPj4gLQlzdHJ1Y3QgbXBzY19yeF9kZXNjICpyeHJlOw0K Pj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBvcnQuZGV2Ow0KPj4gICAgCXUz MgljbWRzdGF0LCBieXRlc19pbiwgaTsNCj4+ICAgIAl1OAkqYnA7DQo+PiAgICANCj4+IEBA IC0xNTc1LDEzICsxNTg2LDEzIEBAIHN0YXRpYyBpbnQgbXBzY19nZXRfcG9sbF9jaGFyKHN0 cnVjdCB1YXJ0X3BvcnQgKnBvcnQpDQo+PiAgICANCj4+ICAgIAl3aGlsZSAocG9sbF9jbnQg PT0gMCkgew0KPj4gICAgCQlyeHJlID0gKHN0cnVjdCBtcHNjX3J4X2Rlc2MgKikocGktPnJ4 ciArDQo+PiAtCQkgICAgICAgKHBpLT5yeHJfcG9zbipNUFNDX1JYUkVfU0laRSkpOw0KPj4g KwkJICAgICAgIChwaS0+cnhyX3Bvc24qTVBTQ19SWFJFX1NJWkUoZG1hX2RldikpKTsNCj4+ ICAgIAkJZG1hX2NhY2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKXJ4cmUsDQo+PiAt CQkJICAgICAgIE1QU0NfUlhSRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOw0KPj4gKwkJCSAg ICAgICBNUFNDX1JYUkVfU0laRShkbWFfZGV2KSwgRE1BX0ZST01fREVWSUNFKTsNCj4+ICAg ICNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgIWRlZmluZWQoQ09ORklHX05PVF9DT0hF UkVOVF9DQUNIRSkNCj4+ICAgIAkJaWYgKHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0Mls0Nl0w IFJlcyAjQ09NTS0yICovDQo+PiAgICAJCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgodWxv bmcpcnhyZSwNCj4+IC0JCQkodWxvbmcpcnhyZSArIE1QU0NfUlhSRV9TSVpFKTsNCj4+ICsJ CQkodWxvbmcpcnhyZSArIE1QU0NfUlhSRV9TSVpFKGRtYV9kZXYpKTsNCj4+ICAgICNlbmRp Zg0KPj4gICAgCQkvKg0KPj4gICAgCQkgKiBMb29wIHRocm91Z2ggUnggZGVzY3JpcHRvcnMg aGFuZGxpbmcgb25lcyB0aGF0IGhhdmUNCj4+IEBAIC0xNTkxLDEzICsxNjAyLDEzIEBAIHN0 YXRpYyBpbnQgbXBzY19nZXRfcG9sbF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpDQo+ PiAgICAJCSAgICAgICAhKChjbWRzdGF0ID0gYmUzMl90b19jcHUocnhyZS0+Y21kc3RhdCkp ICYNCj4+ICAgIAkJCSBTRE1BX0RFU0NfQ01EU1RBVF9PKSl7DQo+PiAgICAJCQlieXRlc19p biA9IGJlMTZfdG9fY3B1KHJ4cmUtPmJ5dGVjbnQpOw0KPj4gLQkJCWJwID0gcGktPnJ4YiAr IChwaS0+cnhyX3Bvc24gKiBNUFNDX1JYQkVfU0laRSk7DQo+PiArCQkJYnAgPSBwaS0+cnhi ICsgKHBpLT5yeHJfcG9zbiAqIE1QU0NfUlhCRV9TSVpFKGRtYV9kZXYpKTsNCj4+ICAgIAkJ CWRtYV9jYWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKikgYnAsDQo+PiAtCQkJCSAg ICAgICBNUFNDX1JYQkVfU0laRSwgRE1BX0ZST01fREVWSUNFKTsNCj4+ICsJCQkJICAgICAg IE1QU0NfUlhCRV9TSVpFKGRtYV9kZXYpLCBETUFfRlJPTV9ERVZJQ0UpOw0KPj4gICAgI2lm IGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5U X0NBQ0hFKQ0KPj4gICAgCQkJaWYgKHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0Mls0Nl0wIFJl cyAjQ09NTS0yICovDQo+PiAgICAJCQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVsb25n KWJwLA0KPj4gLQkJCQkJKHVsb25nKWJwICsgTVBTQ19SWEJFX1NJWkUpOw0KPj4gKwkJCQkJ KHVsb25nKWJwICsgTVBTQ19SWEJFX1NJWkUoZG1hX2RldikpOw0KPj4gICAgI2VuZGlmDQo+ PiAgICAJCQlpZiAoKHVubGlrZWx5KGNtZHN0YXQgJiAoU0RNQV9ERVNDX0NNRFNUQVRfQlIg fA0KPj4gICAgCQkJIFNETUFfREVTQ19DTURTVEFUX0ZSIHwgU0RNQV9ERVNDX0NNRFNUQVRf T1IpKSkgJiYNCj4+IEBAIC0xNjE5LDI0ICsxNjMwLDI0IEBAIHN0YXRpYyBpbnQgbXBzY19n ZXRfcG9sbF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpDQo+PiAgICAJCQkJCQkgICAg U0RNQV9ERVNDX0NNRFNUQVRfTCk7DQo+PiAgICAJCQl3bWIoKTsNCj4+ICAgIAkJCWRtYV9j YWNoZV9zeW5jKHBpLT5wb3J0LmRldiwgKHZvaWQgKilyeHJlLA0KPj4gLQkJCQkgICAgICAg TVBTQ19SWFJFX1NJWkUsIERNQV9CSURJUkVDVElPTkFMKTsNCj4+ICsJCQkJICAgICAgIE1Q U0NfUlhSRV9TSVpFKGRtYV9kZXYpLCBETUFfQklESVJFQ1RJT05BTCk7DQo+PiAgICAjaWYg ZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRf Q0FDSEUpDQo+PiAgICAJCQlpZiAocGktPmNhY2hlX21nbXQpIC8qIEdUNjQyWzQ2XTAgUmVz ICNDT01NLTIgKi8NCj4+ICAgIAkJCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVsb25nKXJ4cmUs DQo+PiAtCQkJCQkgICAodWxvbmcpcnhyZSArIE1QU0NfUlhSRV9TSVpFKTsNCj4+ICsJCQkJ CSAgICh1bG9uZylyeHJlICsgTVBTQ19SWFJFX1NJWkUoZG1hX2RldikpOw0KPj4gICAgI2Vu ZGlmDQo+PiAgICANCj4+ICAgIAkJCS8qIEFkdmFuY2UgdG8gbmV4dCBkZXNjcmlwdG9yICov DQo+PiAgICAJCQlwaS0+cnhyX3Bvc24gPSAocGktPnJ4cl9wb3NuICsgMSkgJg0KPj4gICAg CQkJCShNUFNDX1JYUl9FTlRSSUVTIC0gMSk7DQo+PiAgICAJCQlyeHJlID0gKHN0cnVjdCBt cHNjX3J4X2Rlc2MgKikocGktPnJ4ciArDQo+PiAtCQkJCSAgICAgICAocGktPnJ4cl9wb3Nu ICogTVBTQ19SWFJFX1NJWkUpKTsNCj4+ICsJCQkJICAgICAgIChwaS0+cnhyX3Bvc24gKiBN UFNDX1JYUkVfU0laRShkbWFfZGV2KSkpOw0KPj4gICAgCQkJZG1hX2NhY2hlX3N5bmMocGkt PnBvcnQuZGV2LCAodm9pZCAqKXJ4cmUsDQo+PiAtCQkJCSAgICAgICBNUFNDX1JYUkVfU0la RSwgRE1BX0ZST01fREVWSUNFKTsNCj4+ICsJCQkJICAgICAgIE1QU0NfUlhSRV9TSVpFKGRt YV9kZXYpLCBETUFfRlJPTV9ERVZJQ0UpOw0KPj4gICAgI2lmIGRlZmluZWQoQ09ORklHX1BQ QzMyKSAmJiAhZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQ0KPj4gICAgCQkJ aWYgKHBpLT5jYWNoZV9tZ210KSAvKiBHVDY0Mls0Nl0wIFJlcyAjQ09NTS0yICovDQo+PiAg ICAJCQkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVsb25nKXJ4cmUsDQo+PiAtCQkJCQkJ KHVsb25nKXJ4cmUgKyBNUFNDX1JYUkVfU0laRSk7DQo+PiArCQkJCQkJKHVsb25nKXJ4cmUg KyBNUFNDX1JYUkVfU0laRShkbWFfZGV2KSk7DQo+PiAgICAjZW5kaWYNCj4+ICAgIAkJfQ0K Pj4gICAgDQo+PiBAQCAtMTcwNiw2ICsxNzE3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB1 YXJ0X29wcyBtcHNjX3BvcHMgPSB7DQo+PiAgICBzdGF0aWMgdm9pZCBtcHNjX2NvbnNvbGVf d3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLCB1aW50IGNvdW50KQ0K Pj4gICAgew0KPj4gICAgCXN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGkgPSAmbXBzY19wb3J0 c1tjby0+aW5kZXhdOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gcGktPnBvcnQu ZGV2Ow0KPj4gICAgCXU4ICpicCwgKmRwLCBhZGRfY3IgPSAwOw0KPj4gICAgCWludCBpOw0K Pj4gICAgCXVuc2lnbmVkIGxvbmcgaWZsYWdzOw0KPj4gQEAgLTE3MjMsOSArMTczNSw5IEBA IHN0YXRpYyB2b2lkIG1wc2NfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNv bnN0IGNoYXIgKnMsIHVpbnQgY291bnQpDQo+PiAgICAJCXVkZWxheSgxMDApOw0KPj4gICAg DQo+PiAgICAJd2hpbGUgKGNvdW50ID4gMCkgew0KPj4gLQkJYnAgPSBkcCA9IHBpLT50eGIg KyAocGktPnR4cl9oZWFkICogTVBTQ19UWEJFX1NJWkUpOw0KPj4gKwkJYnAgPSBkcCA9IHBp LT50eGIgKyAocGktPnR4cl9oZWFkICogTVBTQ19UWEJFX1NJWkUoZG1hX2RldikpOw0KPj4g ICAgDQo+PiAtCQlmb3IgKGkgPSAwOyBpIDwgTVBTQ19UWEJFX1NJWkU7IGkrKykgew0KPj4g KwkJZm9yIChpID0gMDsgaSA8IE1QU0NfVFhCRV9TSVpFKGRtYV9kZXYpOyBpKyspIHsNCj4+ ICAgIAkJCWlmIChjb3VudCA9PSAwKQ0KPj4gICAgCQkJCWJyZWFrOw0KPj4gICAgDQo+PiBA QCAtMTc0NCwxMiArMTc1NiwxMiBAQCBzdGF0aWMgdm9pZCBtcHNjX2NvbnNvbGVfd3JpdGUo c3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLCB1aW50IGNvdW50KQ0KPj4gICAg CQkJY291bnQtLTsNCj4+ICAgIAkJfQ0KPj4gICAgDQo+PiAtCQlkbWFfY2FjaGVfc3luYyhw aS0+cG9ydC5kZXYsICh2b2lkICopYnAsIE1QU0NfVFhCRV9TSVpFLA0KPj4gKwkJZG1hX2Nh Y2hlX3N5bmMocGktPnBvcnQuZGV2LCAodm9pZCAqKWJwLCBNUFNDX1RYQkVfU0laRShkbWFf ZGV2KSwNCj4+ICAgIAkJCQlETUFfQklESVJFQ1RJT05BTCk7DQo+PiAgICAjaWYgZGVmaW5l ZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUp DQo+PiAgICAJCWlmIChwaS0+Y2FjaGVfbWdtdCkgLyogR1Q2NDJbNDZdMCBSZXMgI0NPTU0t MiAqLw0KPj4gICAgCQkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bG9uZylicCwNCj4+IC0JCQkJ CSh1bG9uZylicCArIE1QU0NfVFhCRV9TSVpFKTsNCj4+ICsJCQkJCSh1bG9uZylicCArIE1Q U0NfVFhCRV9TSVpFKGRtYV9kZXYpKTsNCj4+ICAgICNlbmRpZg0KPj4gICAgCQltcHNjX3Nl dHVwX3R4X2Rlc2MocGksIGksIDApOw0KPj4gICAgCQlwaS0+dHhyX2hlYWQgPSAocGktPnR4 cl9oZWFkICsgMSkgJiAoTVBTQ19UWFJfRU5UUklFUyAtIDEpOw0KPj4gQEAgLTIwMjQsNyAr MjAzNiw4IEBAIHN0YXRpYyB2b2lkIG1wc2NfZHJ2X3VubWFwX3JlZ3Moc3RydWN0IG1wc2Nf cG9ydF9pbmZvICpwaSkNCj4+ICAgIHN0YXRpYyB2b2lkIG1wc2NfZHJ2X2dldF9wbGF0Zm9y bV9kYXRhKHN0cnVjdCBtcHNjX3BvcnRfaW5mbyAqcGksDQo+PiAgICAJCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkLCBpbnQgbnVtKQ0KPj4gICAgew0KPj4gLQlzdHJ1Y3QgbXBzY19w ZGF0YQkqcGRhdGE7DQo+PiArCXN0cnVjdCBtcHNjX3BkYXRhICpwZGF0YTsNCj4+ICsJc3Ry dWN0IGRldmljZSAqZG1hX2RldiA9IHBpLT5wb3J0LmRldjsNCj4+ICAgIA0KPj4gICAgCXBk YXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmcGQtPmRldik7DQo+PiAgICANCj4+IEBAIC0yMDMy LDcgKzIwNDUsNyBAQCBzdGF0aWMgdm9pZCBtcHNjX2Rydl9nZXRfcGxhdGZvcm1fZGF0YShz dHJ1Y3QgbXBzY19wb3J0X2luZm8gKnBpLA0KPj4gICAgCXBpLT5wb3J0LmlvdHlwZSA9IFVQ SU9fTUVNOw0KPj4gICAgCXBpLT5wb3J0LmxpbmUgPSBudW07DQo+PiAgICAJcGktPnBvcnQu dHlwZSA9IFBPUlRfTVBTQzsNCj4+IC0JcGktPnBvcnQuZmlmb3NpemUgPSBNUFNDX1RYQkVf U0laRTsNCj4+ICsJcGktPnBvcnQuZmlmb3NpemUgPSBNUFNDX1RYQkVfU0laRShkbWFfZGV2 KTsNCj4+ICAgIAlwaS0+cG9ydC5tZW1iYXNlID0gcGktPm1wc2NfYmFzZTsNCj4+ICAgIAlw aS0+cG9ydC5tYXBiYXNlID0gKHVsb25nKXBpLT5tcHNjX2Jhc2U7DQo+PiAgICAJcGktPnBv cnQub3BzID0gJm1wc2NfcG9wczsNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJp YWwvc2Ftc3VuZy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3NhbXN1bmcuYw0KPj4gaW5kZXgg OGFjYTE4Yy4uOWRmOTE4ZTUgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwv c2Ftc3VuZy5jDQo+PiArKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2Ftc3VuZy5jDQo+PiBA QCAtMjQxLDcgKzI0MSw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV90eF9kbWEoc3RydWN0IHMz YzI0eHhfdWFydF9wb3J0ICpvdXJwb3J0KQ0KPj4gICAgCS8qIEVuYWJsZSB0eCBkbWEgbW9k ZSAqLw0KPj4gICAgCXVjb24gPSByZF9yZWdsKHBvcnQsIFMzQzI0MTBfVUNPTik7DQo+PiAg ICAJdWNvbiAmPSB+KFMzQzY0WFhfVUNPTl9UWEJVUlNUX01BU0sgfCBTM0M2NFhYX1VDT05f VFhNT0RFX01BU0spOw0KPj4gLQl1Y29uIHw9IChkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgp ID49IDE2KSA/DQo+PiArCXVjb24gfD0gKGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHBvcnQt PmRldikgPj0gMTYpID8NCj4+ICAgIAkJUzNDNjRYWF9VQ09OX1RYQlVSU1RfMTYgOiBTM0M2 NFhYX1VDT05fVFhCVVJTVF8xOw0KPj4gICAgCXVjb24gfD0gUzNDNjRYWF9VQ09OX1RYTU9E RV9ETUE7DQo+PiAgICAJd3JfcmVnbChwb3J0LCAgUzNDMjQxMF9VQ09OLCB1Y29uKTsNCj4+ IEBAIC0yOTIsNyArMjkyLDcgQEAgc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9zdGFydF90 eF9kbWEoc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpvdXJwb3J0LA0KPj4gICAgCWlmIChv dXJwb3J0LT50eF9tb2RlICE9IFMzQzI0WFhfVFhfRE1BKQ0KPj4gICAgCQllbmFibGVfdHhf ZG1hKG91cnBvcnQpOw0KPj4gICAgDQo+PiAtCWRtYS0+dHhfc2l6ZSA9IGNvdW50ICYgfihk bWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpIC0gMSk7DQo+PiArCWRtYS0+dHhfc2l6ZSA9IGNv dW50ICYgfihkbWFfZ2V0X2NhY2hlX2FsaWdubWVudChwb3J0LT5kZXYpIC0gMSk7DQo+PiAg ICAJZG1hLT50eF90cmFuc2Zlcl9hZGRyID0gZG1hLT50eF9hZGRyICsgeG1pdC0+dGFpbDsN Cj4+ICAgIA0KPj4gICAgCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKG91cnBvcnQtPnBv cnQuZGV2LCBkbWEtPnR4X3RyYW5zZmVyX2FkZHIsDQo+PiBAQCAtMzMyLDcgKzMzMiw3IEBA IHN0YXRpYyB2b2lkIHMzYzI0eHhfc2VyaWFsX3N0YXJ0X25leHRfdHgoc3RydWN0IHMzYzI0 eHhfdWFydF9wb3J0ICpvdXJwb3J0KQ0KPj4gICAgDQo+PiAgICAJaWYgKCFvdXJwb3J0LT5k bWEgfHwgIW91cnBvcnQtPmRtYS0+dHhfY2hhbiB8fA0KPj4gICAgCSAgICBjb3VudCA8IG91 cnBvcnQtPm1pbl9kbWFfc2l6ZSB8fA0KPj4gLQkgICAgeG1pdC0+dGFpbCAmIChkbWFfZ2V0 X2NhY2hlX2FsaWdubWVudCgpIC0gMSkpDQo+PiArCSAgICB4bWl0LT50YWlsICYgKGRtYV9n ZXRfY2FjaGVfYWxpZ25tZW50KHBvcnQtPmRldikgLSAxKSkNCj4+ICAgIAkJczNjMjR4eF9z ZXJpYWxfc3RhcnRfdHhfcGlvKG91cnBvcnQpOw0KPj4gICAgCWVsc2UNCj4+ICAgIAkJczNj MjR4eF9zZXJpYWxfc3RhcnRfdHhfZG1hKG91cnBvcnQsIGNvdW50KTsNCj4+IEBAIC03MTgs OCArNzE4LDggQEAgc3RhdGljIGlycXJldHVybl90IHMzYzI0eHhfc2VyaWFsX3R4X2NoYXJz KGludCBpcnEsIHZvaWQgKmlkKQ0KPj4gICAgDQo+PiAgICAJaWYgKG91cnBvcnQtPmRtYSAm JiBvdXJwb3J0LT5kbWEtPnR4X2NoYW4gJiYNCj4+ICAgIAkgICAgY291bnQgPj0gb3VycG9y dC0+bWluX2RtYV9zaXplKSB7DQo+PiAtCQlpbnQgYWxpZ24gPSBkbWFfZ2V0X2NhY2hlX2Fs aWdubWVudCgpIC0NCj4+IC0JCQkoeG1pdC0+dGFpbCAmIChkbWFfZ2V0X2NhY2hlX2FsaWdu bWVudCgpIC0gMSkpOw0KPj4gKwkJaW50IGFsaWduID0gZG1hX2dldF9jYWNoZV9hbGlnbm1l bnQocG9ydC0+ZGV2KSAtDQo+PiArCQkJKHhtaXQtPnRhaWwgJiAoZG1hX2dldF9jYWNoZV9h bGlnbm1lbnQocG9ydC0+ZGV2KSAtIDEpKTsNCj4+ICAgIAkJaWYgKGNvdW50LWFsaWduID49 IG91cnBvcnQtPm1pbl9kbWFfc2l6ZSkgew0KPj4gICAgCQkJZG1hX2NvdW50ID0gY291bnQt YWxpZ247DQo+PiAgICAJCQljb3VudCA9IGFsaWduOw0KPj4gQEAgLTg3MCw3ICs4NzAsNyBA QCBzdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3JlcXVlc3RfZG1hKHN0cnVjdCBzM2MyNHh4 X3VhcnRfcG9ydCAqcCkNCj4+ICAgIAlkbWEtPnR4X2NvbmYuZGlyZWN0aW9uCQk9IERNQV9N RU1fVE9fREVWOw0KPj4gICAgCWRtYS0+dHhfY29uZi5kc3RfYWRkcl93aWR0aAk9IERNQV9T TEFWRV9CVVNXSURUSF8xX0JZVEU7DQo+PiAgICAJZG1hLT50eF9jb25mLmRzdF9hZGRyCQk9 IHAtPnBvcnQubWFwYmFzZSArIFMzQzI0MTBfVVRYSDsNCj4+IC0JaWYgKGRtYV9nZXRfY2Fj aGVfYWxpZ25tZW50KCkgPj0gMTYpDQo+PiArCWlmIChkbWFfZ2V0X2NhY2hlX2FsaWdubWVu dChwLT5wb3J0LmRldikgPj0gMTYpDQo+PiAgICAJCWRtYS0+dHhfY29uZi5kc3RfbWF4YnVy c3QgPSAxNjsNCj4+ICAgIAllbHNlDQo+PiAgICAJCWRtYS0+dHhfY29uZi5kc3RfbWF4YnVy c3QgPSAxOw0KPj4gQEAgLTE4NDksNyArMTg0OSw3IEBAIHN0YXRpYyBpbnQgczNjMjR4eF9z ZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4+ICAgIAkgKiBz byBmaW5kIG1pbmltYWwgdHJhbnNmZXIgc2l6ZSBzdWl0YWJsZSBmb3IgRE1BIG1vZGUNCj4+ ICAgIAkgKi8NCj4+ICAgIAlvdXJwb3J0LT5taW5fZG1hX3NpemUgPSBtYXhfdChpbnQsIG91 cnBvcnQtPnBvcnQuZmlmb3NpemUsDQo+PiAtCQkJCSAgICBkbWFfZ2V0X2NhY2hlX2FsaWdu bWVudCgpKTsNCj4+ICsJCQkJICAgIGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KG91cnBvcnQt PnBvcnQuZGV2KSk7DQo+PiAgICANCj4+ICAgIAlkYmcoIiVzOiBpbml0aWFsaXNpbmcgcG9y dCAlcC4uLlxuIiwgX19mdW5jX18sIG91cnBvcnQpOw0KPj4gICAgDQo+PiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9saW51eC9kbWEtbWFw cGluZy5oDQo+PiBpbmRleCAyOWNlOTgxLi4xMzI2MDIzIDEwMDY0NA0KPj4gLS0tIGEvaW5j bHVkZS9saW51eC9kbWEtbWFwcGluZy5oDQo+PiArKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1t YXBwaW5nLmgNCj4+IEBAIC0xMzEsNiArMTMxLDcgQEAgc3RydWN0IGRtYV9tYXBfb3BzIHsN Cj4+ICAgICNpZmRlZiBBUkNIX0hBU19ETUFfR0VUX1JFUVVJUkVEX01BU0sNCj4+ICAgIAl1 NjQgKCpnZXRfcmVxdWlyZWRfbWFzaykoc3RydWN0IGRldmljZSAqZGV2KTsNCj4+ICAgICNl bmRpZg0KPj4gKwlpbnQgKCpnZXRfY2FjaGVfYWxpZ25tZW50KShzdHJ1Y3QgZGV2aWNlICpk ZXYpOw0KPj4gICAgCWludCBpc19waHlzOw0KPj4gICAgfTsNCj4+ICAgIA0KPj4gQEAgLTY5 NywxMiArNjk4LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX3phbGxvY19jb2hlcmVu dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLA0KPj4gICAgfQ0KPj4gICAgDQo+ PiAgICAjaWZkZWYgQ09ORklHX0hBU19ETUENCj4+IC1zdGF0aWMgaW5saW5lIGludCBkbWFf Z2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQ0KPj4gLXsNCj4+IC0jaWZkZWYgQVJDSF9ETUFf TUlOQUxJR04NCj4+IC0JcmV0dXJuIEFSQ0hfRE1BX01JTkFMSUdOOw0KPj4gKw0KPj4gKyNp Zm5kZWYgQVJDSF9ETUFfTUlOQUxJR04NCj4+ICsjZGVmaW5lIEFSQ0hfRE1BX01JTkFMSUdO IDENCj4+ICAgICNlbmRpZg0KPj4gLQlyZXR1cm4gMTsNCj4+ICsNCj4+ICtzdGF0aWMgaW5s aW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ PiArew0KPj4gKwljb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3Bz KGRldik7DQo+PiArCWlmIChkZXYgJiYgb3BzICYmIG9wcy0+Z2V0X2NhY2hlX2FsaWdubWVu dCkNCj4+ICsJCXJldHVybiBvcHMtPmdldF9jYWNoZV9hbGlnbm1lbnQoZGV2KTsNCj4+ICsN Cj4+ICsJcmV0dXJuIEFSQ0hfRE1BX01JTkFMSUdOOyAvKiBjb21wYXRpYmxlIGJlaGF2aW9y ICovDQo+PiAgICB9DQo+PiAgICAjZW5kaWYNCj4+ICAgIA0KPiBCZXN0IHJlZ2FyZHMNCg0K QmVzdCByZWdhcmRzDQotLSANCk1hcmVrIFN6eXByb3dza2ksIFBoRA0KU2Ftc3VuZyBSJkQg SW5zdGl0dXRlIFBvbGFuZA==