From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B862AC433F5 for ; Tue, 19 Oct 2021 11:26:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A561161361 for ; Tue, 19 Oct 2021 11:26:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235211AbhJSL2q (ORCPT ); Tue, 19 Oct 2021 07:28:46 -0400 Received: from frasgout.his.huawei.com ([185.176.79.56]:4006 "EHLO frasgout.his.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230097AbhJSL2p (ORCPT ); Tue, 19 Oct 2021 07:28:45 -0400 Received: from fraeml743-chm.china.huawei.com (unknown [172.18.147.226]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4HYWZl6yK3z67MmF; Tue, 19 Oct 2021 19:23:27 +0800 (CST) Received: from lhreml720-chm.china.huawei.com (10.201.108.71) by fraeml743-chm.china.huawei.com (10.206.15.224) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.15; Tue, 19 Oct 2021 13:26:30 +0200 Received: from lhreml710-chm.china.huawei.com (10.201.108.61) by lhreml720-chm.china.huawei.com (10.201.108.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.15; Tue, 19 Oct 2021 12:26:30 +0100 Received: from lhreml710-chm.china.huawei.com ([169.254.81.184]) by lhreml710-chm.china.huawei.com ([169.254.81.184]) with mapi id 15.01.2308.015; Tue, 19 Oct 2021 12:26:30 +0100 From: Shameerali Kolothum Thodi To: Yishai Hadas , "alex.williamson@redhat.com" , "bhelgaas@google.com" , "jgg@nvidia.com" , "saeedm@nvidia.com" CC: "linux-pci@vger.kernel.org" , "kvm@vger.kernel.org" , "netdev@vger.kernel.org" , "kuba@kernel.org" , "leonro@nvidia.com" , "kwankhede@nvidia.com" , "mgurtovoy@nvidia.com" , "maorg@nvidia.com" Subject: RE: [PATCH V1 mlx5-next 11/13] vfio/mlx5: Implement vfio_pci driver for mlx5 devices Thread-Topic: [PATCH V1 mlx5-next 11/13] vfio/mlx5: Implement vfio_pci driver for mlx5 devices Thread-Index: AQHXwBe44UEbHr+D60+Uqj0Ty2ZNXqvaHB4A///7gYCAABmu4A== Date: Tue, 19 Oct 2021 11:26:29 +0000 Message-ID: <4096a4cd9b3d4496892b815dd653166e@huawei.com> References: <20211013094707.163054-1-yishaih@nvidia.com> <20211013094707.163054-12-yishaih@nvidia.com> <7e7880fe-bb1e-82db-8edb-271832d18827@nvidia.com> In-Reply-To: <7e7880fe-bb1e-82db-8edb-271832d18827@nvidia.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.47.94.106] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWWlzaGFpIEhhZGFzIFtt YWlsdG86eWlzaGFpaEBudmlkaWEuY29tXQ0KPiBTZW50OiAxOSBPY3RvYmVyIDIwMjEgMTE6MzAN Cj4gVG86IFNoYW1lZXJhbGkgS29sb3RodW0gVGhvZGkgPHNoYW1lZXJhbGkua29sb3RodW0udGhv ZGlAaHVhd2VpLmNvbT47DQo+IGFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tOyBiaGVsZ2Fhc0Bn b29nbGUuY29tOyBqZ2dAbnZpZGlhLmNvbTsNCj4gc2FlZWRtQG52aWRpYS5jb20NCj4gQ2M6IGxp bnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IGt2bUB2Z2VyLmtlcm5lbC5vcmc7IG5ldGRldkB2Z2Vy Lmtlcm5lbC5vcmc7DQo+IGt1YmFAa2VybmVsLm9yZzsgbGVvbnJvQG52aWRpYS5jb207IGt3YW5r aGVkZUBudmlkaWEuY29tOw0KPiBtZ3VydG92b3lAbnZpZGlhLmNvbTsgbWFvcmdAbnZpZGlhLmNv bQ0KPiBTdWJqZWN0OiBSZTogW1BBVENIIFYxIG1seDUtbmV4dCAxMS8xM10gdmZpby9tbHg1OiBJ bXBsZW1lbnQgdmZpb19wY2kgZHJpdmVyDQo+IGZvciBtbHg1IGRldmljZXMNCj4gDQo+IE9uIDEw LzE5LzIwMjEgMTI6NTkgUE0sIFNoYW1lZXJhbGkgS29sb3RodW0gVGhvZGkgd3JvdGU6DQo+ID4N Cj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogWWlzaGFpIEhhZGFz IFttYWlsdG86eWlzaGFpaEBudmlkaWEuY29tXQ0KPiA+PiBTZW50OiAxMyBPY3RvYmVyIDIwMjEg MTA6NDcNCj4gPj4gVG86IGFsZXgud2lsbGlhbXNvbkByZWRoYXQuY29tOyBiaGVsZ2Fhc0Bnb29n bGUuY29tOyBqZ2dAbnZpZGlhLmNvbTsNCj4gPj4gc2FlZWRtQG52aWRpYS5jb20NCj4gPj4gQ2M6 IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc7IGt2bUB2Z2VyLmtlcm5lbC5vcmc7DQo+IG5ldGRl dkB2Z2VyLmtlcm5lbC5vcmc7DQo+ID4+IGt1YmFAa2VybmVsLm9yZzsgbGVvbnJvQG52aWRpYS5j b207IGt3YW5raGVkZUBudmlkaWEuY29tOw0KPiA+PiBtZ3VydG92b3lAbnZpZGlhLmNvbTsgeWlz aGFpaEBudmlkaWEuY29tOyBtYW9yZ0BudmlkaWEuY29tDQo+ID4+IFN1YmplY3Q6IFtQQVRDSCBW MSBtbHg1LW5leHQgMTEvMTNdIHZmaW8vbWx4NTogSW1wbGVtZW50IHZmaW9fcGNpIGRyaXZlcg0K PiBmb3INCj4gPj4gbWx4NSBkZXZpY2VzDQo+ID4+DQo+ID4+IFRoaXMgcGF0Y2ggYWRkcyBzdXBw b3J0IGZvciB2ZmlvX3BjaSBkcml2ZXIgZm9yIG1seDUgZGV2aWNlcy4NCj4gPj4NCj4gPj4gSXQg dXNlcyB2ZmlvX3BjaV9jb3JlIHRvIHJlZ2lzdGVyIHRvIHRoZSBWRklPIHN1YnN5c3RlbSBhbmQg dGhlbg0KPiA+PiBpbXBsZW1lbnRzIHRoZSBtbHg1IHNwZWNpZmljIGxvZ2ljIGluIHRoZSBtaWdy YXRpb24gYXJlYS4NCj4gPj4NCj4gPj4gVGhlIG1pZ3JhdGlvbiBpbXBsZW1lbnRhdGlvbiBmb2xs b3dzIHRoZSBkZWZpbml0aW9uIGZyb20gdWFwaS92ZmlvLmggYW5kDQo+ID4+IHVzZXMgdGhlIG1s eDUgVkYtPlBGIGNvbW1hbmQgY2hhbm5lbCB0byBhY2hpZXZlIGl0Lg0KPiA+Pg0KPiA+PiBUaGlz IHBhdGNoIGltcGxlbWVudHMgdGhlIHN1c3BlbmQvcmVzdW1lIGZsb3dzLg0KPiA+Pg0KPiA+PiBT aWduZWQtb2ZmLWJ5OiBZaXNoYWkgSGFkYXMgPHlpc2hhaWhAbnZpZGlhLmNvbT4NCj4gPj4gU2ln bmVkLW9mZi1ieTogTGVvbiBSb21hbm92c2t5IDxsZW9ucm9AbnZpZGlhLmNvbT4NCj4gPj4gLS0t DQo+ID4+ICAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgIHwgICA2ICsNCj4gPj4gICBk cml2ZXJzL3ZmaW8vcGNpL0tjb25maWcgICAgICAgfCAgIDMgKw0KPiA+PiAgIGRyaXZlcnMvdmZp by9wY2kvTWFrZWZpbGUgICAgICB8ICAgMiArDQo+ID4+ICAgZHJpdmVycy92ZmlvL3BjaS9tbHg1 L0tjb25maWcgIHwgIDExICsNCj4gPj4gICBkcml2ZXJzL3ZmaW8vcGNpL21seDUvTWFrZWZpbGUg fCAgIDQgKw0KPiA+PiAgIGRyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMgICB8IDY5Mg0KPiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPj4gICA2IGZpbGVzIGNoYW5nZWQs IDcxOCBpbnNlcnRpb25zKCspDQo+ID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmZp by9wY2kvbWx4NS9LY29uZmlnDQo+ID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmZp by9wY2kvbWx4NS9NYWtlZmlsZQ0KPiA+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Zm aW8vcGNpL21seDUvbWFpbi5jDQo+ID4+DQo+ID4+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBi L01BSU5UQUlORVJTDQo+ID4+IGluZGV4IGFiZGNiY2ZlZjczZC4uZTgyNGJmYWI0YTAxIDEwMDY0 NA0KPiA+PiAtLS0gYS9NQUlOVEFJTkVSUw0KPiA+PiArKysgYi9NQUlOVEFJTkVSUw0KPiA+PiBA QCAtMTk2OTksNiArMTk2OTksMTIgQEAgTDoJa3ZtQHZnZXIua2VybmVsLm9yZw0KPiA+PiAgIFM6 CU1haW50YWluZWQNCj4gPj4gICBGOglkcml2ZXJzL3ZmaW8vcGxhdGZvcm0vDQo+ID4+DQo+ID4+ ICtWRklPIE1MWDUgUENJIERSSVZFUg0KPiA+PiArTToJWWlzaGFpIEhhZGFzIDx5aXNoYWloQG52 aWRpYS5jb20+DQo+ID4+ICtMOglrdm1Admdlci5rZXJuZWwub3JnDQo+ID4+ICtTOglNYWludGFp bmVkDQo+ID4+ICtGOglkcml2ZXJzL3ZmaW8vcGNpL21seDUvDQo+ID4+ICsNCj4gPj4gICBWR0Ff U1dJVENIRVJPTw0KPiA+PiAgIFI6CUx1a2FzIFd1bm5lciA8bHVrYXNAd3VubmVyLmRlPg0KPiA+ PiAgIFM6CU1haW50YWluZWQNCj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvS2Nv bmZpZyBiL2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZw0KPiA+PiBpbmRleCA4NjA0MjRjY2RhMWIu LjE4N2I5YzI1OTk0NCAxMDA2NDQNCj4gPj4gLS0tIGEvZHJpdmVycy92ZmlvL3BjaS9LY29uZmln DQo+ID4+ICsrKyBiL2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZw0KPiA+PiBAQCAtNDMsNCArNDMs NyBAQCBjb25maWcgVkZJT19QQ0lfSUdEDQo+ID4+DQo+ID4+ICAgCSAgVG8gZW5hYmxlIEludGVs IElHRCBhc3NpZ25tZW50IHRocm91Z2ggdmZpby1wY2ksIHNheSBZLg0KPiA+PiAgIGVuZGlmDQo+ ID4+ICsNCj4gPj4gK3NvdXJjZSAiZHJpdmVycy92ZmlvL3BjaS9tbHg1L0tjb25maWciDQo+ID4+ ICsNCj4gPj4gICBlbmRpZg0KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS9NYWtl ZmlsZSBiL2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGUNCj4gPj4gaW5kZXggMzQ5ZDY4ZDI0MmI0 Li5lZDlkNmYyZTA1NTUgMTAwNjQ0DQo+ID4+IC0tLSBhL2RyaXZlcnMvdmZpby9wY2kvTWFrZWZp bGUNCj4gPj4gKysrIGIvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZQ0KPiA+PiBAQCAtNywzICs3 LDUgQEAgb2JqLSQoQ09ORklHX1ZGSU9fUENJX0NPUkUpICs9IHZmaW8tcGNpLWNvcmUubw0KPiA+ PiAgIHZmaW8tcGNpLXkgOj0gdmZpb19wY2kubw0KPiA+PiAgIHZmaW8tcGNpLSQoQ09ORklHX1ZG SU9fUENJX0lHRCkgKz0gdmZpb19wY2lfaWdkLm8NCj4gPj4gICBvYmotJChDT05GSUdfVkZJT19Q Q0kpICs9IHZmaW8tcGNpLm8NCj4gPj4gKw0KPiA+PiArb2JqLSQoQ09ORklHX01MWDVfVkZJT19Q Q0kpICAgICAgICAgICArPSBtbHg1Lw0KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3Bj aS9tbHg1L0tjb25maWcgYi9kcml2ZXJzL3ZmaW8vcGNpL21seDUvS2NvbmZpZw0KPiA+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiA+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmEzY2UwMGFkZDRmZQ0K PiA+PiAtLS0gL2Rldi9udWxsDQo+ID4+ICsrKyBiL2RyaXZlcnMvdmZpby9wY2kvbWx4NS9LY29u ZmlnDQo+ID4+IEBAIC0wLDAgKzEsMTEgQEANCj4gPj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQ0KPiA+PiArY29uZmlnIE1MWDVfVkZJT19QQ0kNCj4gPj4gKwl0cmlz dGF0ZSAiVkZJTyBzdXBwb3J0IGZvciBNTFg1IFBDSSBkZXZpY2VzIg0KPiA+PiArCWRlcGVuZHMg b24gTUxYNV9DT1JFDQo+ID4+ICsJc2VsZWN0IFZGSU9fUENJX0NPUkUNCj4gPj4gKwloZWxwDQo+ ID4+ICsJICBUaGlzIHByb3ZpZGVzIGEgUENJIHN1cHBvcnQgZm9yIE1MWDUgZGV2aWNlcyB1c2lu ZyB0aGUgVkZJTw0KPiA+PiArCSAgZnJhbWV3b3JrLiBUaGUgZGV2aWNlIHNwZWNpZmljIGRyaXZl ciBzdXBwb3J0cyBzdXNwZW5kL3Jlc3VtZQ0KPiA+PiArCSAgb2YgdGhlIE1MWDUgZGV2aWNlLg0K PiA+PiArDQo+ID4+ICsJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBO Lg0KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS9tbHg1L01ha2VmaWxlIGIvZHJp dmVycy92ZmlvL3BjaS9tbHg1L01ha2VmaWxlDQo+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjg5NjI3ZGE3ZmY1DQo+ID4+IC0tLSAvZGV2L251bGwN Cj4gPj4gKysrIGIvZHJpdmVycy92ZmlvL3BjaS9tbHg1L01ha2VmaWxlDQo+ID4+IEBAIC0wLDAg KzEsNCBAQA0KPiA+PiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ ID4+ICtvYmotJChDT05GSUdfTUxYNV9WRklPX1BDSSkgKz0gbWx4NS12ZmlvLXBjaS5vDQo+ID4+ ICttbHg1LXZmaW8tcGNpLXkgOj0gbWFpbi5vIGNtZC5vDQo+ID4+ICsNCj4gPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvdmZpby9wY2kvbWx4NS9tYWluLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL21seDUv bWFpbi5jDQo+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4+IGluZGV4IDAwMDAwMDAwMDAw MC4uZTM2MzAyYjQ0NGE2DQo+ID4+IC0tLSAvZGV2L251bGwNCj4gPj4gKysrIGIvZHJpdmVycy92 ZmlvL3BjaS9tbHg1L21haW4uYw0KPiA+PiBAQCAtMCwwICsxLDY5MiBAQA0KPiA+PiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiA+PiArLyoNCj4gPj4gKyAqIENv cHlyaWdodCAoYykgMjAyMSwgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRFUy4gQWxsIHJp Z2h0cw0KPiByZXNlcnZlZA0KPiA+PiArICovDQo+ID4+ICsNCj4gPj4gKyNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4NCj4gPj4gKyNpbmNsdWRlIDxsaW51eC9ldmVudGZkLmg+DQo+ID4+ICsjaW5j bHVkZSA8bGludXgvZmlsZS5oPg0KPiA+PiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0K PiA+PiArI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+DQo+ID4+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+DQo+ID4+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4NCj4gPj4gKyNpbmNsdWRlIDxs aW51eC9ub3RpZmllci5oPg0KPiA+PiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiA+PiArI2lu Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gPj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5o Pg0KPiA+PiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4NCj4gPj4gKyNpbmNsdWRlIDxsaW51 eC92ZmlvLmg+DQo+ID4+ICsjaW5jbHVkZSA8bGludXgvc2NoZWQvbW0uaD4NCj4gPj4gKyNpbmNs dWRlIDxsaW51eC92ZmlvX3BjaV9jb3JlLmg+DQo+ID4+ICsNCj4gPj4gKyNpbmNsdWRlICJjbWQu aCINCj4gPj4gKw0KPiA+PiArZW51bSB7DQo+ID4+ICsJTUxYNVZGX1BDSV9GUkVFWkVEID0gMSA8 PCAwLA0KPiA+PiArfTsNCj4gPj4gKw0KPiA+PiArZW51bSB7DQo+ID4+ICsJTUxYNVZGX1JFR0lP Tl9QRU5ESU5HX0JZVEVTID0gMSA8PCAwLA0KPiA+PiArCU1MWDVWRl9SRUdJT05fREFUQV9TSVpF ID0gMSA8PCAxLA0KPiA+PiArfTsNCj4gPj4gKw0KPiA+PiArI2RlZmluZSBNTFg1VkZfTUlHX1JF R0lPTl9EQVRBX1NJWkUgU1pfMTI4Sw0KPiA+PiArLyogRGF0YSBzZWN0aW9uIG9mZnNldCBmcm9t IG1pZ3JhdGlvbiByZWdpb24gKi8NCj4gPj4gKyNkZWZpbmUgTUxYNVZGX01JR19SRUdJT05fREFU QV9PRkZTRVQNCj4gPj4gXA0KPiA+PiArCShzaXplb2Yoc3RydWN0IHZmaW9fZGV2aWNlX21pZ3Jh dGlvbl9pbmZvKSkNCj4gPj4gKw0KPiA+PiArI2RlZmluZSBWRklPX0RFVklDRV9NSUdSQVRJT05f T0ZGU0VUKHgpDQo+ID4+IFwNCj4gPj4gKwkob2Zmc2V0b2Yoc3RydWN0IHZmaW9fZGV2aWNlX21p Z3JhdGlvbl9pbmZvLCB4KSkNCj4gPj4gKw0KPiA+PiArc3RydWN0IG1seDV2Zl9wY2lfbWlncmF0 aW9uX2luZm8gew0KPiA+PiArCXUzMiB2ZmlvX2Rldl9zdGF0ZTsgLyogVkZJT19ERVZJQ0VfU1RB VEVfWFhYICovDQo+ID4+ICsJdTMyIGRldl9zdGF0ZTsgLyogZGV2aWNlIG1pZ3JhdGlvbiBzdGF0 ZSAqLw0KPiA+PiArCXUzMiByZWdpb25fc3RhdGU7IC8qIFVzZSBNTFg1VkZfUkVHSU9OX1hYWCAq Lw0KPiA+PiArCXUxNiB2aGNhX2lkOw0KPiA+PiArCXN0cnVjdCBtbHg1X3ZoY2Ffc3RhdGVfZGF0 YSB2aGNhX3N0YXRlX2RhdGE7DQo+ID4+ICt9Ow0KPiA+PiArDQo+ID4+ICtzdHJ1Y3QgbWx4NXZm X3BjaV9jb3JlX2RldmljZSB7DQo+ID4+ICsJc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIGNv cmVfZGV2aWNlOw0KPiA+PiArCXU4IG1pZ3JhdGVfY2FwOjE7DQo+ID4+ICsJLyogcHJvdGVjdCBt aWdhcnRpb24gc3RhdGUgKi8NCj4gPj4gKwlzdHJ1Y3QgbXV0ZXggc3RhdGVfbXV0ZXg7DQo+ID4+ ICsJc3RydWN0IG1seDV2Zl9wY2lfbWlncmF0aW9uX2luZm8gdm1pZzsNCj4gPj4gK307DQo+ID4+ ICsNCj4gPj4gK3N0YXRpYyBpbnQgbWx4NXZmX3BjaV91bnF1aWVzY2VfZGV2aWNlKHN0cnVjdCBt bHg1dmZfcGNpX2NvcmVfZGV2aWNlDQo+ID4+ICptdmRldikNCj4gPj4gK3sNCj4gPj4gKwlyZXR1 cm4gbWx4NXZmX2NtZF9yZXN1bWVfdmhjYShtdmRldi0+Y29yZV9kZXZpY2UucGRldiwNCj4gPj4g KwkJCQkgICAgICBtdmRldi0+dm1pZy52aGNhX2lkLA0KPiA+PiArDQo+ID4+IE1MWDVfUkVTVU1F X1ZIQ0FfSU5fT1BfTU9EX1JFU1VNRV9NQVNURVIpOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtz dGF0aWMgaW50IG1seDV2Zl9wY2lfcXVpZXNjZV9kZXZpY2Uoc3RydWN0IG1seDV2Zl9wY2lfY29y ZV9kZXZpY2UNCj4gKm12ZGV2KQ0KPiA+PiArew0KPiA+PiArCXJldHVybiBtbHg1dmZfY21kX3N1 c3BlbmRfdmhjYSgNCj4gPj4gKwkJbXZkZXYtPmNvcmVfZGV2aWNlLnBkZXYsIG12ZGV2LT52bWln LnZoY2FfaWQsDQo+ID4+ICsJCU1MWDVfU1VTUEVORF9WSENBX0lOX09QX01PRF9TVVNQRU5EX01B U1RFUik7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQgbWx4NXZmX3BjaV91bmZy ZWV6ZV9kZXZpY2Uoc3RydWN0IG1seDV2Zl9wY2lfY29yZV9kZXZpY2UNCj4gPj4gKm12ZGV2KQ0K PiA+PiArew0KPiA+PiArCWludCByZXQ7DQo+ID4+ICsNCj4gPj4gKwlyZXQgPSBtbHg1dmZfY21k X3Jlc3VtZV92aGNhKG12ZGV2LT5jb3JlX2RldmljZS5wZGV2LA0KPiA+PiArCQkJCSAgICAgbXZk ZXYtPnZtaWcudmhjYV9pZCwNCj4gPj4gKw0KPiA+PiBNTFg1X1JFU1VNRV9WSENBX0lOX09QX01P RF9SRVNVTUVfU0xBVkUpOw0KPiA+PiArCWlmIChyZXQpDQo+ID4+ICsJCXJldHVybiByZXQ7DQo+ ID4+ICsNCj4gPj4gKwltdmRldi0+dm1pZy5kZXZfc3RhdGUgJj0gfk1MWDVWRl9QQ0lfRlJFRVpF RDsNCj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludCBt bHg1dmZfcGNpX2ZyZWV6ZV9kZXZpY2Uoc3RydWN0IG1seDV2Zl9wY2lfY29yZV9kZXZpY2UNCj4g Km12ZGV2KQ0KPiA+PiArew0KPiA+PiArCWludCByZXQ7DQo+ID4+ICsNCj4gPj4gKwlyZXQgPSBt bHg1dmZfY21kX3N1c3BlbmRfdmhjYSgNCj4gPj4gKwkJbXZkZXYtPmNvcmVfZGV2aWNlLnBkZXYs IG12ZGV2LT52bWlnLnZoY2FfaWQsDQo+ID4+ICsJCU1MWDVfU1VTUEVORF9WSENBX0lOX09QX01P RF9TVVNQRU5EX1NMQVZFKTsNCj4gPj4gKwlpZiAocmV0KQ0KPiA+PiArCQlyZXR1cm4gcmV0Ow0K PiA+PiArDQo+ID4+ICsJbXZkZXYtPnZtaWcuZGV2X3N0YXRlIHw9IE1MWDVWRl9QQ0lfRlJFRVpF RDsNCj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIGludCBt bHg1dmZfcGNpX3NhdmVfZGV2aWNlX2RhdGEoc3RydWN0IG1seDV2Zl9wY2lfY29yZV9kZXZpY2UN Cj4gPj4gKm12ZGV2KQ0KPiA+PiArew0KPiA+PiArCXUzMiBzdGF0ZV9zaXplID0gMDsNCj4gPj4g KwlpbnQgcmV0Ow0KPiA+PiArDQo+ID4+ICsJaWYgKCEobXZkZXYtPnZtaWcuZGV2X3N0YXRlICYg TUxYNVZGX1BDSV9GUkVFWkVEKSkNCj4gPj4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4+ICsNCj4g Pj4gKwkvKiBJZiB3ZSBhbHJlYWR5IHJlYWQgc3RhdGUgbm8gcmVhc29uIHRvIHJlLXJlYWQgKi8N Cj4gPj4gKwlpZiAobXZkZXYtPnZtaWcudmhjYV9zdGF0ZV9kYXRhLnN0YXRlX3NpemUpDQo+ID4+ ICsJCXJldHVybiAwOw0KPiA+PiArDQo+ID4+ICsJcmV0ID0gbWx4NXZmX2NtZF9xdWVyeV92aGNh X21pZ3JhdGlvbl9zdGF0ZSgNCj4gPj4gKwkJbXZkZXYtPmNvcmVfZGV2aWNlLnBkZXYsIG12ZGV2 LT52bWlnLnZoY2FfaWQsICZzdGF0ZV9zaXplKTsNCj4gPj4gKwlpZiAocmV0KQ0KPiA+PiArCQly ZXR1cm4gcmV0Ow0KPiA+PiArDQo+ID4+ICsJcmV0dXJuIG1seDV2Zl9jbWRfc2F2ZV92aGNhX3N0 YXRlKG12ZGV2LT5jb3JlX2RldmljZS5wZGV2LA0KPiA+PiArCQkJCQkgIG12ZGV2LT52bWlnLnZo Y2FfaWQsIHN0YXRlX3NpemUsDQo+ID4+ICsJCQkJCSAgJm12ZGV2LT52bWlnLnZoY2Ffc3RhdGVf ZGF0YSk7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBpbnQgbWx4NXZmX3BjaV9uZXdf d3JpdGVfd2luZG93KHN0cnVjdCBtbHg1dmZfcGNpX2NvcmVfZGV2aWNlDQo+ID4+ICptdmRldikN Cj4gPj4gK3sNCj4gPj4gKwlzdHJ1Y3QgbWx4NV92aGNhX3N0YXRlX2RhdGEgKnN0YXRlX2RhdGEg PQ0KPiA+PiAmbXZkZXYtPnZtaWcudmhjYV9zdGF0ZV9kYXRhOw0KPiA+PiArCXUzMiBudW1fcGFn ZXNfbmVlZGVkOw0KPiA+PiArCXU2NCBhbGxvY2F0ZWRfcmVhZHk7DQo+ID4+ICsJdTMyIGJ5dGVz X25lZWRlZDsNCj4gPj4gKw0KPiA+PiArCS8qIENoZWNrIGhvdyBtYW55IGJ5dGVzIGFyZSBhdmFp bGFibGUgZnJvbSBwcmV2aW91cyBmbG93cyAqLw0KPiA+PiArCVdBUk5fT04oc3RhdGVfZGF0YS0+ bnVtX3BhZ2VzICogUEFHRV9TSVpFIDwNCj4gPj4gKwkJc3RhdGVfZGF0YS0+d2luX3N0YXJ0X29m ZnNldCk7DQo+ID4+ICsJYWxsb2NhdGVkX3JlYWR5ID0gKHN0YXRlX2RhdGEtPm51bV9wYWdlcyAq IFBBR0VfU0laRSkgLQ0KPiA+PiArCQkJICBzdGF0ZV9kYXRhLT53aW5fc3RhcnRfb2Zmc2V0Ow0K PiA+PiArCVdBUk5fT04oYWxsb2NhdGVkX3JlYWR5ID4gTUxYNVZGX01JR19SRUdJT05fREFUQV9T SVpFKTsNCj4gPj4gKw0KPiA+PiArCWJ5dGVzX25lZWRlZCA9IE1MWDVWRl9NSUdfUkVHSU9OX0RB VEFfU0laRSAtIGFsbG9jYXRlZF9yZWFkeTsNCj4gPj4gKwlpZiAoIWJ5dGVzX25lZWRlZCkNCj4g Pj4gKwkJcmV0dXJuIDA7DQo+ID4+ICsNCj4gPj4gKwludW1fcGFnZXNfbmVlZGVkID0gRElWX1JP VU5EX1VQX1VMTChieXRlc19uZWVkZWQsIFBBR0VfU0laRSk7DQo+ID4+ICsJcmV0dXJuIG1seDV2 Zl9hZGRfbWlncmF0aW9uX3BhZ2VzKHN0YXRlX2RhdGEsIG51bV9wYWdlc19uZWVkZWQpOw0KPiA+ PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgc3NpemVfdA0KPiA+PiArbWx4NXZmX3BjaV9oYW5k bGVfbWlncmF0aW9uX2RhdGFfc2l6ZShzdHJ1Y3QgbWx4NXZmX3BjaV9jb3JlX2RldmljZQ0KPiA+ PiAqbXZkZXYsDQo+ID4+ICsJCQkJICAgICAgY2hhciBfX3VzZXIgKmJ1ZiwgYm9vbCBpc3dyaXRl KQ0KPiA+PiArew0KPiA+PiArCXN0cnVjdCBtbHg1dmZfcGNpX21pZ3JhdGlvbl9pbmZvICp2bWln ID0gJm12ZGV2LT52bWlnOw0KPiA+PiArCXU2NCBkYXRhX3NpemU7DQo+ID4+ICsJaW50IHJldDsN Cj4gPj4gKw0KPiA+PiArCWlmIChpc3dyaXRlKSB7DQo+ID4+ICsJCS8qIGRhdGFfc2l6ZSBpcyB3 cml0YWJsZSBvbmx5IGR1cmluZyByZXN1bWluZyBzdGF0ZSAqLw0KPiA+PiArCQlpZiAodm1pZy0+ dmZpb19kZXZfc3RhdGUgIT0gVkZJT19ERVZJQ0VfU1RBVEVfUkVTVU1JTkcpDQo+ID4+ICsJCQly ZXR1cm4gLUVJTlZBTDsNCj4gPj4gKw0KPiA+PiArCQlyZXQgPSBjb3B5X2Zyb21fdXNlcigmZGF0 YV9zaXplLCBidWYsIHNpemVvZihkYXRhX3NpemUpKTsNCj4gPj4gKwkJaWYgKHJldCkNCj4gPj4g KwkJCXJldHVybiAtRUZBVUxUOw0KPiA+PiArDQo+ID4+ICsJCXZtaWctPnZoY2Ffc3RhdGVfZGF0 YS5zdGF0ZV9zaXplICs9IGRhdGFfc2l6ZTsNCj4gPj4gKwkJdm1pZy0+dmhjYV9zdGF0ZV9kYXRh Lndpbl9zdGFydF9vZmZzZXQgKz0gZGF0YV9zaXplOw0KPiA+PiArCQlyZXQgPSBtbHg1dmZfcGNp X25ld193cml0ZV93aW5kb3cobXZkZXYpOw0KPiA+PiArCQlpZiAocmV0KQ0KPiA+PiArCQkJcmV0 dXJuIHJldDsNCj4gPj4gKw0KPiA+PiArCX0gZWxzZSB7DQo+ID4+ICsJCWlmICh2bWlnLT52Zmlv X2Rldl9zdGF0ZSAhPSBWRklPX0RFVklDRV9TVEFURV9TQVZJTkcpDQo+ID4+ICsJCQlyZXR1cm4g LUVJTlZBTDsNCj4gPj4gKw0KPiA+PiArCQlkYXRhX3NpemUgPSBtaW5fdCh1NjQsIE1MWDVWRl9N SUdfUkVHSU9OX0RBVEFfU0laRSwNCj4gPj4gKwkJCQkgIHZtaWctPnZoY2Ffc3RhdGVfZGF0YS5z dGF0ZV9zaXplIC0NCj4gPj4gKwkJCQkgIHZtaWctPnZoY2Ffc3RhdGVfZGF0YS53aW5fc3RhcnRf b2Zmc2V0KTsNCj4gPj4gKwkJcmV0ID0gY29weV90b191c2VyKGJ1ZiwgJmRhdGFfc2l6ZSwgc2l6 ZW9mKGRhdGFfc2l6ZSkpOw0KPiA+PiArCQlpZiAocmV0KQ0KPiA+PiArCQkJcmV0dXJuIC1FRkFV TFQ7DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsJdm1pZy0+cmVnaW9uX3N0YXRlIHw9IE1MWDVW Rl9SRUdJT05fREFUQV9TSVpFOw0KPiA+PiArCXJldHVybiBzaXplb2YoZGF0YV9zaXplKTsNCj4g Pj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIHNzaXplX3QNCj4gPj4gK21seDV2Zl9wY2lfaGFu ZGxlX21pZ3JhdGlvbl9kYXRhX29mZnNldChzdHJ1Y3QgbWx4NXZmX3BjaV9jb3JlX2RldmljZQ0K PiA+PiAqbXZkZXYsDQo+ID4+ICsJCQkJCWNoYXIgX191c2VyICpidWYsIGJvb2wgaXN3cml0ZSkN Cj4gPj4gK3sNCj4gPj4gKwlzdGF0aWMgY29uc3QgdTY0IGRhdGFfb2Zmc2V0ID0gTUxYNVZGX01J R19SRUdJT05fREFUQV9PRkZTRVQ7DQo+ID4+ICsJaW50IHJldDsNCj4gPj4gKw0KPiA+PiArCS8q IFJPIGZpZWxkICovDQo+ID4+ICsJaWYgKGlzd3JpdGUpDQo+ID4+ICsJCXJldHVybiAtRUZBVUxU Ow0KPiA+PiArDQo+ID4+ICsJcmV0ID0gY29weV90b191c2VyKGJ1ZiwgJmRhdGFfb2Zmc2V0LCBz aXplb2YoZGF0YV9vZmZzZXQpKTsNCj4gPj4gKwlpZiAocmV0KQ0KPiA+PiArCQlyZXR1cm4gLUVG QVVMVDsNCj4gPj4gKw0KPiA+PiArCXJldHVybiBzaXplb2YoZGF0YV9vZmZzZXQpOw0KPiA+PiAr fQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgc3NpemVfdA0KPiA+PiArbWx4NXZmX3BjaV9oYW5kbGVf bWlncmF0aW9uX3BlbmRpbmdfYnl0ZXMoc3RydWN0DQo+IG1seDV2Zl9wY2lfY29yZV9kZXZpY2UN Cj4gPj4gKm12ZGV2LA0KPiA+PiArCQkJCQkgIGNoYXIgX191c2VyICpidWYsIGJvb2wgaXN3cml0 ZSkNCj4gPj4gK3sNCj4gPj4gKwlzdHJ1Y3QgbWx4NXZmX3BjaV9taWdyYXRpb25faW5mbyAqdm1p ZyA9ICZtdmRldi0+dm1pZzsNCj4gPj4gKwl1NjQgcGVuZGluZ19ieXRlczsNCj4gPj4gKwlpbnQg cmV0Ow0KPiA+PiArDQo+ID4+ICsJLyogUk8gZmllbGQgKi8NCj4gPj4gKwlpZiAoaXN3cml0ZSkN Cj4gPj4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4+ICsNCj4gPj4gKwlpZiAodm1pZy0+dmZpb19k ZXZfc3RhdGUgPT0gKFZGSU9fREVWSUNFX1NUQVRFX1NBVklORyB8DQo+ID4+ICsJCQkJICAgICBW RklPX0RFVklDRV9TVEFURV9SVU5OSU5HKSkgew0KPiA+PiArCQkvKiBJbiBwcmUtY29weSBzdGF0 ZSB3ZSBoYXZlIG5vIGRhdGEgdG8gcmV0dXJuIGZvciBub3csDQo+ID4+ICsJCSAqIHJldHVybiAw IHBlbmRpbmcgYnl0ZXMNCj4gPj4gKwkJICovDQo+ID4+ICsJCXBlbmRpbmdfYnl0ZXMgPSAwOw0K PiA+PiArCX0gZWxzZSB7DQo+ID4+ICsJCWlmICghdm1pZy0+dmhjYV9zdGF0ZV9kYXRhLnN0YXRl X3NpemUpDQo+ID4+ICsJCQlyZXR1cm4gMDsNCj4gPj4gKwkJcGVuZGluZ19ieXRlcyA9IHZtaWct PnZoY2Ffc3RhdGVfZGF0YS5zdGF0ZV9zaXplIC0NCj4gPj4gKwkJCQl2bWlnLT52aGNhX3N0YXRl X2RhdGEud2luX3N0YXJ0X29mZnNldDsNCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlyZXQgPSBj b3B5X3RvX3VzZXIoYnVmLCAmcGVuZGluZ19ieXRlcywgc2l6ZW9mKHBlbmRpbmdfYnl0ZXMpKTsN Cj4gPj4gKwlpZiAocmV0KQ0KPiA+PiArCQlyZXR1cm4gLUVGQVVMVDsNCj4gPj4gKw0KPiA+PiAr CS8qIFdpbmRvdyBtb3ZlcyBmb3J3YXJkIG9uY2UgZGF0YSBmcm9tIHByZXZpb3VzIGl0ZXJhdGlv biB3YXMgcmVhZCAqLw0KPiA+PiArCWlmICh2bWlnLT5yZWdpb25fc3RhdGUgJiBNTFg1VkZfUkVH SU9OX0RBVEFfU0laRSkNCj4gPj4gKwkJdm1pZy0+dmhjYV9zdGF0ZV9kYXRhLndpbl9zdGFydF9v ZmZzZXQgKz0NCj4gPj4gKwkJCW1pbl90KHU2NCwgTUxYNVZGX01JR19SRUdJT05fREFUQV9TSVpF LCBwZW5kaW5nX2J5dGVzKTsNCj4gPj4gKw0KPiA+PiArCVdBUk5fT04odm1pZy0+dmhjYV9zdGF0 ZV9kYXRhLndpbl9zdGFydF9vZmZzZXQgPg0KPiA+PiArCQl2bWlnLT52aGNhX3N0YXRlX2RhdGEu c3RhdGVfc2l6ZSk7DQo+ID4+ICsNCj4gPj4gKwkvKiBOZXcgaXRlcmF0aW9uIHN0YXJ0ZWQgKi8N Cj4gPj4gKwl2bWlnLT5yZWdpb25fc3RhdGUgPSBNTFg1VkZfUkVHSU9OX1BFTkRJTkdfQllURVM7 DQo+ID4+ICsJcmV0dXJuIHNpemVvZihwZW5kaW5nX2J5dGVzKTsNCj4gPj4gK30NCj4gPj4gKw0K PiA+PiArc3RhdGljIGludCBtbHg1dmZfbG9hZF9zdGF0ZShzdHJ1Y3QgbWx4NXZmX3BjaV9jb3Jl X2RldmljZSAqbXZkZXYpDQo+ID4+ICt7DQo+ID4+ICsJaWYgKCFtdmRldi0+dm1pZy52aGNhX3N0 YXRlX2RhdGEuc3RhdGVfc2l6ZSkNCj4gPj4gKwkJcmV0dXJuIDA7DQo+ID4+ICsNCj4gPj4gKwly ZXR1cm4gbWx4NXZmX2NtZF9sb2FkX3ZoY2Ffc3RhdGUobXZkZXYtPmNvcmVfZGV2aWNlLnBkZXYs DQo+ID4+ICsJCQkJCSAgbXZkZXYtPnZtaWcudmhjYV9pZCwNCj4gPj4gKwkJCQkJICAmbXZkZXYt PnZtaWcudmhjYV9zdGF0ZV9kYXRhKTsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIHZv aWQgbWx4NXZmX3Jlc2V0X21pZ19zdGF0ZShzdHJ1Y3QgbWx4NXZmX3BjaV9jb3JlX2RldmljZQ0K PiAqbXZkZXYpDQo+ID4+ICt7DQo+ID4+ICsJc3RydWN0IG1seDV2Zl9wY2lfbWlncmF0aW9uX2lu Zm8gKnZtaWcgPSAmbXZkZXYtPnZtaWc7DQo+ID4+ICsNCj4gPj4gKwl2bWlnLT5yZWdpb25fc3Rh dGUgPSAwOw0KPiA+PiArCW1seDV2Zl9yZXNldF92aGNhX3N0YXRlKCZ2bWlnLT52aGNhX3N0YXRl X2RhdGEpOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgaW50IG1seDV2Zl9wY2lfc2V0 X2RldmljZV9zdGF0ZShzdHJ1Y3QgbWx4NXZmX3BjaV9jb3JlX2RldmljZQ0KPiA+PiAqbXZkZXYs DQo+ID4+ICsJCQkJICAgICAgIHUzMiBzdGF0ZSkNCj4gPj4gK3sNCj4gPj4gKwlzdHJ1Y3QgbWx4 NXZmX3BjaV9taWdyYXRpb25faW5mbyAqdm1pZyA9ICZtdmRldi0+dm1pZzsNCj4gPj4gKwl1MzIg b2xkX3N0YXRlID0gdm1pZy0+dmZpb19kZXZfc3RhdGU7DQo+ID4+ICsJaW50IHJldCA9IDA7DQo+ ID4+ICsNCj4gPj4gKwlpZiAodmZpb19pc19zdGF0ZV9pbnZhbGlkKHN0YXRlKSB8fCB2ZmlvX2lz X3N0YXRlX2ludmFsaWQob2xkX3N0YXRlKSkNCj4gPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4+ ICsNCj4gPj4gKwkvKiBSdW5uaW5nIHN3aXRjaGVzIG9mZiAqLw0KPiA+PiArCWlmICgob2xkX3N0 YXRlICYgVkZJT19ERVZJQ0VfU1RBVEVfUlVOTklORykgIT0NCj4gPj4gKwkgICAgKHN0YXRlICYg VkZJT19ERVZJQ0VfU1RBVEVfUlVOTklORykgJiYNCj4gPj4gKwkgICAgKG9sZF9zdGF0ZSAmIFZG SU9fREVWSUNFX1NUQVRFX1JVTk5JTkcpKSB7DQo+ID4+ICsJCXJldCA9IG1seDV2Zl9wY2lfcXVp ZXNjZV9kZXZpY2UobXZkZXYpOw0KPiA+PiArCQlpZiAocmV0KQ0KPiA+PiArCQkJcmV0dXJuIHJl dDsNCj4gPj4gKwkJcmV0ID0gbWx4NXZmX3BjaV9mcmVlemVfZGV2aWNlKG12ZGV2KTsNCj4gPj4g KwkJaWYgKHJldCkgew0KPiA+PiArCQkJdm1pZy0+dmZpb19kZXZfc3RhdGUgPSBWRklPX0RFVklD RV9TVEFURV9JTlZBTElEOw0KPiA+PiArCQkJcmV0dXJuIHJldDsNCj4gPj4gKwkJfQ0KPiA+PiAr CX0NCj4gPj4gKw0KPiA+PiArCS8qIFJlc3VtaW5nIHN3aXRjaGVzIG9mZiAqLw0KPiA+PiArCWlm ICgob2xkX3N0YXRlICYgVkZJT19ERVZJQ0VfU1RBVEVfUkVTVU1JTkcpICE9DQo+ID4+ICsJICAg IChzdGF0ZSAmIFZGSU9fREVWSUNFX1NUQVRFX1JFU1VNSU5HKSAmJg0KPiA+PiArCSAgICAob2xk X3N0YXRlICYgVkZJT19ERVZJQ0VfU1RBVEVfUkVTVU1JTkcpKSB7DQo+ID4+ICsJCS8qIGRlc2Vy aWFsaXplIHN0YXRlIGludG8gdGhlIGRldmljZSAqLw0KPiA+PiArCQlyZXQgPSBtbHg1dmZfbG9h ZF9zdGF0ZShtdmRldik7DQo+ID4+ICsJCWlmIChyZXQpIHsNCj4gPj4gKwkJCXZtaWctPnZmaW9f ZGV2X3N0YXRlID0gVkZJT19ERVZJQ0VfU1RBVEVfSU5WQUxJRDsNCj4gPj4gKwkJCXJldHVybiBy ZXQ7DQo+ID4+ICsJCX0NCj4gPj4gKwl9DQo+ID4+ICsNCj4gPj4gKwkvKiBSZXN1bWluZyBzd2l0 Y2hlcyBvbiAqLw0KPiA+PiArCWlmICgob2xkX3N0YXRlICYgVkZJT19ERVZJQ0VfU1RBVEVfUkVT VU1JTkcpICE9DQo+ID4+ICsJICAgIChzdGF0ZSAmIFZGSU9fREVWSUNFX1NUQVRFX1JFU1VNSU5H KSAmJg0KPiA+PiArCSAgICAoc3RhdGUgJiBWRklPX0RFVklDRV9TVEFURV9SRVNVTUlORykpIHsN Cj4gPj4gKwkJbWx4NXZmX3Jlc2V0X21pZ19zdGF0ZShtdmRldik7DQo+ID4+ICsJCXJldCA9IG1s eDV2Zl9wY2lfbmV3X3dyaXRlX3dpbmRvdyhtdmRldik7DQo+ID4+ICsJCWlmIChyZXQpDQo+ID4+ ICsJCQlyZXR1cm4gcmV0Ow0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCS8qIFNhdmluZyBzd2l0 Y2hlcyBvbiAqLw0KPiA+PiArCWlmICgob2xkX3N0YXRlICYgVkZJT19ERVZJQ0VfU1RBVEVfU0FW SU5HKSAhPQ0KPiA+PiArCSAgICAoc3RhdGUgJiBWRklPX0RFVklDRV9TVEFURV9TQVZJTkcpICYm DQo+ID4+ICsJICAgIChzdGF0ZSAmIFZGSU9fREVWSUNFX1NUQVRFX1NBVklORykpIHsNCj4gPj4g KwkJaWYgKCEoc3RhdGUgJiBWRklPX0RFVklDRV9TVEFURV9SVU5OSU5HKSkgew0KPiA+PiArCQkJ Lyogc2VyaWFsaXplIHBvc3QgY29weSAqLw0KPiA+PiArCQkJcmV0ID0gbWx4NXZmX3BjaV9zYXZl X2RldmljZV9kYXRhKG12ZGV2KTsNCj4gPiBEb2VzIGl0IGFjdHVhbGx5IGdldCBpbnRvIHBvc3Qt Y29weSBoZXJlPyBUaGUgcHJlLWNvcHkgc3RhdGUob2xkX3N0YXRlKQ0KPiA+IGhhcyB0aGUgX1NB VklORyBiaXQgc2V0IGFscmVhZHkgYW5kIHBvc3QtY29weSBzdGF0ZSggbmV3IHN0YXRlKSBhbHNv DQo+ID4gaGFzIF9TQVZJTkcgc2V0LiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgdG8gaGFuZGxlIHRo ZSBwb3N0IGNvcHkgaW4gdGhlIGFib3ZlDQo+ID4gIlJ1bm5pbmcgc3dpdGNoZXMgb2ZmIiBhbmQg Y2hlY2sgZm9yIChzdGF0ZSAmIF9TQVZJTkcpLg0KPiA+DQo+ID4gT3IgQW0gSSBtaXNzaW5nIHNv bWV0aGluZz8NCj4gPg0KPiANCj4gVGhlIGFib3ZlIGNoZWNrcyBmb3IgYSBjaGFuZ2UgaW4gdGhl IFNBVklORyBiaXQsIGlmIGl0IHdhcyB0dXJuZWQgb24gYW5kDQo+IHdlIGFyZSBub3QgUlVOTklO RyBpdCBtZWFucyBwb3N0IGNvcHkuDQo+IA0KPiBUdXJuaW5nIG9uIFNBVklORyB3aGVuIHdlIGFy ZSBSVU5OSU5HIHdpbGwgZW5kLXVwIHdpdGggcmV0dXJuaW5nIHplcm8NCj4gYnl0ZXMgdXBvbiBw ZW5kaW5nIGJ5dGVzIGFzIHdlIGRvbid0IHN1cHBvcnQgZm9yIG5vdyBkaXJ0eSBwYWdlcy4NCj4g DQo+IHNlZSBtbHg1dmZfcGNpX2hhbmRsZV9taWdyYXRpb25fcGVuZGluZ19ieXRlcygpLg0KDQpT byB3aGF0IHlvdSBhcmUgc2F5aW5nIGlzIFFlbXUgd29uJ3Qgc2V0IGEgcHJlLWNvcHkgc3RhdGUg cHJpb3IgdG8gcG9zdCBjb3B5IGhlcmUuDQpJSVJDLCB0aGF0IHdhcyBub3QgdGhlIGNhc2UgaW4g b3VyIHNldHVwIGFuZCBRZW11IGRvZXMgc2V0IHRoZSBzdGF0ZSB0byBwcmUtY29weQ0KKF9SVU5O SU5HIHwgX1NBVklORykgLCByZWFkcyB0aGUgcGVuZGluZ19ieXRlcyBhbmQgdGhlbiBzZXQgaXQg dG8gcG9zdCBjb3B5DQooX1NBVklORykuIA0KDQpUaGFua3MsDQpTaGFtZWVyDQoNCj4gDQo+IFlp c2hhaQ0KDQo=