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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A6906C35242 for ; Fri, 14 Feb 2020 22:13:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5272820726 for ; Fri, 14 Feb 2020 22:13:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="W5EkAUSk" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727458AbgBNWNf (ORCPT ); Fri, 14 Feb 2020 17:13:35 -0500 Received: from mail-eopbgr80082.outbound.protection.outlook.com ([40.107.8.82]:21346 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725946AbgBNWNf (ORCPT ); Fri, 14 Feb 2020 17:13:35 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ffl5Rif7tgnwYQrWvny4z5GkpDsACt2S/XNt1unTrQwNf2ZnqyQ/GRZiFOSUmXmOwmNZv4qyx6P41IlDHpFtU6Vt1BDef/DJkNYugwojb93CXOMzKkCkGNREkJulOrh+7/euGhmdyIPvI3/drV5RgmLWhCu1wcZRMbYyLgYlkGZCAIxUjMx8fb1xqt0+zVpDO/vsP5cFYPxZjszIaQaZUVoRKpVgmtkoIB7EK9qM12cqdGBkzqUGl8o3k/Bp95QitKW/S/m9KPQQnoJhA//EHXQUO+XjMT33nqz8MXAq4bW/CVyBB4iQpQAnMvRmpK/obeTaK+XNO3ZN1+toFqnX4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t0X3NgC3b19hxLZYW11TYrJhTSuEzPdiCcp8XMxR498=; b=EcifHHYJdYbCWQshVEhaB2zJ52vfpfVHVJwI6idQ6S5WLDrlxIHWaWGLp1TmMMD1Ud+UV/gpgSwD2mGBMEFOk7HTli1FT0vG42PBD+GT8wqlLCV7R97HLyQRIeghtTy9ZMlLn4lzldAzzu0yPcFEeoPCfNSd28JdA1BDRbDuLliQNFpHtTiLyiai/Kv4Gv+xb0TjkgGDfQIp1oAZ7/Xj87/n2B+irb5g/aXrnMbqOoNV8HhTdVeJ3TQhBout9qVTqoiW3Bi9dKsdBuvelRORYCtSunljLteCciGtQj7fnBlsBjSkQUTGBnM7Kzde9Wqj3jLtWJ8siAWIUA4VHQaJGw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t0X3NgC3b19hxLZYW11TYrJhTSuEzPdiCcp8XMxR498=; b=W5EkAUSknLg+ZfrQVU1kYyNjkiWIU6M6rdjFDEE6ohGvR1RQOE5V3+JedqpL1LaeFH5qpjdrDrts/XH6bWVlJtKBTfHnnLqT4Fcht9s+EnZrbSjTRTb0lPj9eR14pHuXq3rPob/Ar8Xrr89FiszZ37CINjXknueHttAOYL/3zxw= Received: from AM0PR05MB4866.eurprd05.prod.outlook.com (20.176.214.160) by AM0PR05MB6226.eurprd05.prod.outlook.com (20.178.115.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.23; Fri, 14 Feb 2020 22:13:25 +0000 Received: from AM0PR05MB4866.eurprd05.prod.outlook.com ([fe80::8c4:e45b:ecdc:e02b]) by AM0PR05MB4866.eurprd05.prod.outlook.com ([fe80::8c4:e45b:ecdc:e02b%7]) with mapi id 15.20.2729.025; Fri, 14 Feb 2020 22:13:25 +0000 From: Parav Pandit To: Jeff Kirsher , "davem@davemloft.net" , "gregkh@linuxfoundation.org" CC: Mustafa Ismail , "netdev@vger.kernel.org" , "linux-rdma@vger.kernel.org" , "nhorman@redhat.com" , "sassmann@redhat.com" , "jgg@ziepe.ca" , Shiraz Saleem Subject: Re: [RFC PATCH v4 10/25] RDMA/irdma: Add driver framework definitions Thread-Topic: [RFC PATCH v4 10/25] RDMA/irdma: Add driver framework definitions Thread-Index: AQHV4di3RHBiR8SSKUiBqR+gfJba6qgbREEA Date: Fri, 14 Feb 2020 22:13:25 +0000 Message-ID: <6f01d517-3196-1183-112e-8151b821bd72@mellanox.com> References: <20200212191424.1715577-1-jeffrey.t.kirsher@intel.com> <20200212191424.1715577-11-jeffrey.t.kirsher@intel.com> In-Reply-To: <20200212191424.1715577-11-jeffrey.t.kirsher@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=parav@mellanox.com; x-originating-ip: [208.176.44.194] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 524bb40a-121e-4474-08c7-08d7b19b1c8c x-ms-traffictypediagnostic: AM0PR05MB6226: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2582; x-forefront-prvs: 03137AC81E x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(376002)(39860400002)(136003)(346002)(396003)(366004)(189003)(199004)(110136005)(66476007)(5660300002)(76116006)(7416002)(31686004)(30864003)(91956017)(4326008)(2616005)(6506007)(54906003)(8936002)(8676002)(478600001)(6512007)(81156014)(81166006)(316002)(66946007)(2906002)(71200400001)(66446008)(66556008)(26005)(53546011)(186003)(31696002)(64756008)(86362001)(6486002)(36756003)(559001)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:AM0PR05MB6226;H:AM0PR05MB4866.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 6fBaZaqnK8ryCenZQHV7A8jTr232F8WD5uWTNHTtlVCeW6ZPeqIsuDZF8bztjuvcf624e6pAi9k7FL88YJbI5wB5UACi02XM6wkKPHyTP7ml575EeacNVQrVLsTSaUSHMdQ+H82Mo9Cu8CWDnNVnlfALix32KVrxFF3h0vN0DbfvZFlCJrha5eNZfK4i/ojxNXQCCDJzihDub03eEeoSNQs1FOJbsojlUc798W3WxZIpvQX2kuZO25CBOb3yvuiFrdk7/IWRAg6jQ58zmmVI889WGfojrZWDv0C2XMHSH8OeQolnws21I5G6K71Am5pdaXXwdRY+cHGQgDDhyl8DgDEVnCT7iweH+4Uv0yQQVYCeNXL18yqcNp8b6rPkWgu6OeMO0ay8rPg6aHB9p+VkR7WVlNm5YWCFngzYSdFivbSM43bwFUpnV7a9AjrT/7WR x-ms-exchange-antispam-messagedata: 5GljGgRWkTsZAkM/T8ygo2Hqlz0Pj8iGTOmfI3WARpygHNml1hnbwloDBpaliHAHi+mKOnnfd/6TQvn3Ue8hTQ1/JyVDeH8nahaQszAz/S/x6ShayOye7W6eLjo8P3wu5fXibQWHqn3hfBj/t0yu5w== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 524bb40a-121e-4474-08c7-08d7b19b1c8c X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Feb 2020 22:13:25.1572 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Kq0uFyiBKPeKrJ0fegXtcXUdKx4TPNa9QPs8t+o7dNjTT2alBnHpNyzPNVkPH3VH7/QOe8l0JYCQAmbQMwXldA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB6226 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org T24gMi8xMi8yMDIwIDE6MTQgUE0sIEplZmYgS2lyc2hlciB3cm90ZToNCj4gRnJvbTogTXVzdGFm YSBJc21haWwgPG11c3RhZmEuaXNtYWlsQGludGVsLmNvbT4NCj4gDQo+IFJlZ2lzdGVyIGlyZG1h IGFzIGEgcGxhdGZvcm0gZHJpdmVyIGNhcGFibGUgb2Ygc3VwcG9ydGluZyBwbGF0Zm9ybQ0KPiBk ZXZpY2VzIGZyb20gbXVsdGktZ2VuZXJhdGlvbiBSRE1BIGNhcGFibGUgSW50ZWwgSFcuIEVzdGFi bGlzaCB0aGUNCj4gaW50ZXJmYWNlIHdpdGggYWxsIHN1cHBvcnRlZCBuZXRkZXYgcGVlciBkZXZp Y2VzIGFuZCBpbml0aWFsaXplIEhXLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogTXVzdGFmYSBJc21h aWwgPG11c3RhZmEuaXNtYWlsQGludGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogU2hpcmF6IFNh bGVlbSA8c2hpcmF6LnNhbGVlbUBpbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IEplZmYgS2ly c2hlciA8amVmZnJleS50LmtpcnNoZXJAaW50ZWwuY29tPg0KPiAtLS0NCj4gIGRyaXZlcnMvaW5m aW5pYmFuZC9ody9pcmRtYS9pNDBpd19pZi5jIHwgMjI4ICsrKysrKysrKysNCj4gIGRyaXZlcnMv aW5maW5pYmFuZC9ody9pcmRtYS9pcmRtYV9pZi5jIHwgNDI0ICsrKysrKysrKysrKysrKysrKw0K PiAgZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL21haW4uYyAgICAgfCA1NzIgKysrKysrKysr KysrKysrKysrKysrKysrDQo+ICBkcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvbWFpbi5oICAg ICB8IDU5NSArKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICA0IGZpbGVzIGNoYW5nZWQsIDE4 MTkgaW5zZXJ0aW9ucygrKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaW5maW5pYmFu ZC9ody9pcmRtYS9pNDBpd19pZi5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9pbmZp bmliYW5kL2h3L2lyZG1hL2lyZG1hX2lmLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2luZmluaWJhbmQvaHcvaXJkbWEvbWFpbi5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9pbmZpbmliYW5kL2h3L2lyZG1hL21haW4uaA0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv aW5maW5pYmFuZC9ody9pcmRtYS9pNDBpd19pZi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2ly ZG1hL2k0MGl3X2lmLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAw MDAwLi41ZTY5YjE2YTI2NTgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2luZmlu aWJhbmQvaHcvaXJkbWEvaTQwaXdfaWYuYw0KPiBAQCAtMCwwICsxLDIyOCBAQA0KPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgb3IgTGludXgtT3BlbklCDQo+ICsvKiBDb3B5 cmlnaHQgKGMpIDIwMTUgLSAyMDE5IEludGVsIENvcnBvcmF0aW9uICovDQo+ICsjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmlj ZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L25ldC9pbnRlbC9pNDBlX2NsaWVudC5oPg0KPiArI2lu Y2x1ZGUgPG5ldC9hZGRyY29uZi5oPg0KPiArI2luY2x1ZGUgIm1haW4uaCINCj4gKyNpbmNsdWRl ICJpNDBpd19ody5oIg0KPiArDQo+ICsvKioNCj4gKyAqIGk0MGl3X3JlcXVlc3RfcmVzZXQgLSBS ZXF1ZXN0IGEgcmVzZXQNCj4gKyAqIEByZjogUkRNQSBQQ0kgZnVuY3Rpb24NCj4gKyAqDQo+ICsg Ki8NCj4gK3N0YXRpYyB2b2lkIGk0MGl3X3JlcXVlc3RfcmVzZXQoc3RydWN0IGlyZG1hX3BjaV9m ICpyZikNCj4gK3sNCj4gKwlzdHJ1Y3QgaTQwZV9pbmZvICpsZGV2ID0gcmYtPmxkZXYuaWZfbGRl djsNCj4gKw0KPiArCWxkZXYtPm9wcy0+cmVxdWVzdF9yZXNldChsZGV2LCByZi0+bGRldi5pZl9j bGllbnQsIDEpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGk0MGl3X29wZW4gLSBjbGllbnQg aW50ZXJmYWNlIG9wZXJhdGlvbiBvcGVuIGZvciBpd2FycC91ZGEgZGV2aWNlDQo+ICsgKiBAbGRl djogTEFOIGRldmljZSBpbmZvcm1hdGlvbg0KPiArICogQGNsaWVudDogaXdhcnAgY2xpZW50IGlu Zm9ybWF0aW9uLCBwcm92aWRlZCBkdXJpbmcgcmVnaXN0cmF0aW9uDQo+ICsgKg0KPiArICogQ2Fs bGVkIGJ5IHRoZSBMQU4gZHJpdmVyIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBjbGllbnQNCj4g KyAqIHJlZ2lzdGVyIENyZWF0ZSBkZXZpY2UgcmVzb3VyY2VzLCBzZXQgdXAgcXVldWVzLCBwYmxl IGFuZCBobWMNCj4gKyAqIG9iamVjdHMgYW5kIHJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2l0aCB0aGUg aWIgdmVyYnMgaW50ZXJmYWNlDQo+ICsgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBvdGhlcndp c2UgcmV0dXJuIGVycm9yDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgaTQwaXdfb3BlbihzdHJ1Y3Qg aTQwZV9pbmZvICpsZGV2LCBzdHJ1Y3QgaTQwZV9jbGllbnQgKmNsaWVudCkNCj4gK3sNCj4gKwlz dHJ1Y3QgaXJkbWFfZGV2aWNlICppd2RldiA9IE5VTEw7DQo+ICsJc3RydWN0IGlyZG1hX2hhbmRs ZXIgKmhkbCA9IE5VTEw7DQo+ICsJc3RydWN0IGlyZG1hX3ByaXZfbGRldiAqcGxkZXY7DQo+ICsJ c3RydWN0IGlyZG1hX3NjX2RldiAqZGV2Ow0KPiArCXN0cnVjdCBpcmRtYV9wY2lfZiAqcmY7DQo+ ICsJc3RydWN0IGlyZG1hX2wycGFyYW1zIGwycGFyYW1zID0ge307DQo+ICsJaW50IGVyciA9IC1F SU87DQo+ICsJaW50IGk7DQo+ICsJdTE2IHFzZXQ7DQo+ICsJdTE2IGxhc3RfcXNldCA9IElSRE1B X05PX1FTRVQ7DQo+ICsNCj4gKwloZGwgPSBpcmRtYV9maW5kX2hhbmRsZXIobGRldi0+cGNpZGV2 KTsNCj4gKwlpZiAoaGRsKQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCWhkbCA9IGt6YWxsb2Mo c2l6ZW9mKCpoZGwpLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWhkbCkNCj4gKwkJcmV0dXJuIC1F Tk9NRU07DQo+ICsNCj4gKwlyZiA9ICZoZGwtPnJmOw0KPiArCXJmLT5oZGwgPSBoZGw7DQo+ICsJ ZGV2ID0gJnJmLT5zY19kZXY7DQo+ICsJZGV2LT5iYWNrX2RldiA9IHJmOw0KPiArCXJmLT5yZG1h X3ZlciA9IElSRE1BX0dFTl8xOw0KPiArCWhkbC0+dmRldiA9IGxkZXYtPnZkZXY7DQo+ICsJaXJk bWFfaW5pdF9yZl9jb25maWdfcGFyYW1zKHJmKTsNCj4gKwlyZi0+Z2VuX29wcy5pbml0X2h3ID0g aTQwaXdfaW5pdF9odzsNCj4gKwlyZi0+Z2VuX29wcy5yZXF1ZXN0X3Jlc2V0ID0gaTQwaXdfcmVx dWVzdF9yZXNldDsNCj4gKwlyZi0+aHcuaHdfYWRkciA9IGxkZXYtPmh3X2FkZHI7DQo+ICsJcmYt PnBkZXYgPSBsZGV2LT5wY2lkZXY7DQo+ICsJcmYtPm5ldGRldiA9IGxkZXYtPm5ldGRldjsNCj4g KwlkZXYtPnBjaV9yZXYgPSByZi0+cGRldi0+cmV2aXNpb247DQo+ICsNCj4gKwlwbGRldiA9ICZy Zi0+bGRldjsNCj4gKwloZGwtPmxkZXYgPSBwbGRldjsNCj4gKwlwbGRldi0+aWZfY2xpZW50ID0g Y2xpZW50Ow0KPiArCXBsZGV2LT5pZl9sZGV2ID0gbGRldjsNCj4gKwlwbGRldi0+Zm5fbnVtID0g bGRldi0+ZmlkOw0KPiArCXBsZGV2LT5mdHlwZSA9IGxkZXYtPmZ0eXBlOw0KPiArCXBsZGV2LT5w Zl92c2lfbnVtID0gMDsNCj4gKwlwbGRldi0+bXNpeF9jb3VudCA9IGxkZXYtPm1zaXhfY291bnQ7 DQo+ICsJcGxkZXYtPm1zaXhfZW50cmllcyA9IGxkZXYtPm1zaXhfZW50cmllczsNCj4gKw0KPiAr CWlmIChpcmRtYV9jdHJsX2luaXRfaHcocmYpKSB7DQo+ICsJCWVyciA9IC1FSU87DQo+ICsJCWdv dG8gZXJyX2N0cmxfaW5pdDsNCj4gKwl9DQo+ICsNCj4gKwlpd2RldiA9IGliX2FsbG9jX2Rldmlj ZShpcmRtYV9kZXZpY2UsIGliZGV2KTsNCj4gKwlpZiAoIWl3ZGV2KSB7DQo+ICsJCWVyciA9IC1F Tk9NRU07DQo+ICsJCWdvdG8gZXJyX2liX2FsbG9jOw0KPiArCX0NCj4gKw0KPiArCWl3ZGV2LT5y ZiA9IHJmOw0KPiArCWl3ZGV2LT5oZGwgPSBoZGw7DQo+ICsJaXdkZXYtPmxkZXYgPSAmcmYtPmxk ZXY7DQo+ICsJaXdkZXYtPmluaXRfc3RhdGUgPSBJTklUSUFMX1NUQVRFOw0KPiArCWl3ZGV2LT5y Y3Zfd25kID0gSVJETUFfQ01fREVGQVVMVF9SQ1ZfV05EX1NDQUxFRDsNCj4gKwlpd2Rldi0+cmN2 X3dzY2FsZSA9IElSRE1BX0NNX0RFRkFVTFRfUkNWX1dORF9TQ0FMRTsNCj4gKwlpd2Rldi0+bmV0 ZGV2ID0gbGRldi0+bmV0ZGV2Ow0KPiArCWl3ZGV2LT5jcmVhdGVfaWxxID0gdHJ1ZTsNCj4gKwlp d2Rldi0+dnNpX251bSA9IDA7DQo+ICsNCj4gKwlsMnBhcmFtcy5tdHUgPQ0KPiArCQkobGRldi0+ cGFyYW1zLm10dSkgPyBsZGV2LT5wYXJhbXMubXR1IDogSVJETUFfREVGQVVMVF9NVFU7DQo+ICsJ Zm9yIChpID0gMDsgaSA8IEk0MEVfQ0xJRU5UX01BWF9VU0VSX1BSSU9SSVRZOyBpKyspIHsNCj4g KwkJcXNldCA9IGxkZXYtPnBhcmFtcy5xb3MucHJpb19xb3NbaV0ucXNfaGFuZGxlOw0KPiArCQls MnBhcmFtcy51cDJ0Y1tpXSA9IGxkZXYtPnBhcmFtcy5xb3MucHJpb19xb3NbaV0udGM7DQo+ICsJ CWwycGFyYW1zLnFzX2hhbmRsZV9saXN0W2ldID0gcXNldDsNCj4gKwkJaWYgKGxhc3RfcXNldCA9 PSBJUkRNQV9OT19RU0VUKQ0KPiArCQkJbGFzdF9xc2V0ID0gcXNldDsNCj4gKwkJZWxzZSBpZiAo KHFzZXQgIT0gbGFzdF9xc2V0KSAmJiAocXNldCAhPSBJUkRNQV9OT19RU0VUKSkNCj4gKwkJCWl3 ZGV2LT5kY2IgPSB0cnVlOw0KPiArCX0NCj4gKw0KPiArCWlmIChpcmRtYV9ydF9pbml0X2h3KHJm LCBpd2RldiwgJmwycGFyYW1zKSkgew0KPiArCQllcnIgPSAtRUlPOw0KPiArCQlnb3RvIGVycl9y dF9pbml0Ow0KPiArCX0NCj4gKw0KPiArCWVyciA9IGlyZG1hX2liX3JlZ2lzdGVyX2RldmljZShp d2Rldik7DQo+ICsJaWYgKGVycikNCj4gKwkJZ290byBlcnJfaWJyZWc7DQo+ICsNCj4gKwlpcmRt YV9hZGRfaGFuZGxlcihoZGwpOw0KPiArCWRldl9kYmcocmZkZXZfdG9fZGV2KGRldiksICJJTklU OiBHZW4xIFZTSSBvcGVuIHN1Y2Nlc3MgbGRldj0lcFxuIiwNCj4gKwkJbGRldik7DQo+ICsNCj4g KwlyZXR1cm4gMDsNCj4gKw0KPiArZXJyX2licmVnOg0KPiArCWlyZG1hX3J0X2RlaW5pdF9odyhp d2Rldik7DQo+ICtlcnJfcnRfaW5pdDoNCj4gKwlpYl9kZWFsbG9jX2RldmljZSgmaXdkZXYtPmli ZGV2KTsNCj4gK2Vycl9pYl9hbGxvYzoNCj4gKwlpcmRtYV9jdHJsX2RlaW5pdF9odyhyZik7DQo+ ICtlcnJfY3RybF9pbml0Og0KPiArCWtmcmVlKGhkbCk7DQo+ICsNCj4gKwlyZXR1cm4gZXJyOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGk0MGl3X2wycGFyYW1fY2hhbmdlIC0gaGFuZGxlIG1z cyBjaGFuZ2UNCj4gKyAqIEBsZGV2OiBsYW4gZGV2aWNlIGluZm9ybWF0aW9uDQo+ICsgKiBAY2xp ZW50OiBjbGllbnQgZm9yIHBhcmFtZXRlciBjaGFuZ2UNCj4gKyAqIEBwYXJhbXM6IG5ldyBwYXJh bWV0ZXJzIGZyb20gTDINCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgaTQwaXdfbDJwYXJhbV9jaGFu Z2Uoc3RydWN0IGk0MGVfaW5mbyAqbGRldiwNCj4gKwkJCQkgc3RydWN0IGk0MGVfY2xpZW50ICpj bGllbnQsDQo+ICsJCQkJIHN0cnVjdCBpNDBlX3BhcmFtcyAqcGFyYW1zKQ0KPiArew0KPiArCXN0 cnVjdCBpcmRtYV9sMnBhcmFtcyBsMnBhcmFtcyA9IHt9Ow0KPiArCXN0cnVjdCBpcmRtYV9kZXZp Y2UgKml3ZGV2Ow0KPiArDQo+ICsJaXdkZXYgPSBpcmRtYV9nZXRfZGV2aWNlKGxkZXYtPm5ldGRl dik7DQo+ICsJaWYgKCFpd2RldikNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWYgKGl3ZGV2LT52 c2kubXR1ICE9IHBhcmFtcy0+bXR1KSB7DQo+ICsJCWwycGFyYW1zLm10dV9jaGFuZ2VkID0gdHJ1 ZTsNCj4gKwkJbDJwYXJhbXMubXR1ID0gcGFyYW1zLT5tdHU7DQo+ICsJfQ0KPiArCWlyZG1hX2No YW5nZV9sMnBhcmFtcygmaXdkZXYtPnZzaSwgJmwycGFyYW1zKTsNCj4gKwlpcmRtYV9wdXRfZGV2 aWNlKGl3ZGV2KTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpNDBpd19jbG9zZSAtIGNsaWVu dCBpbnRlcmZhY2Ugb3BlcmF0aW9uIGNsb3NlIGZvciBpd2FycC91ZGEgZGV2aWNlDQo+ICsgKiBA bGRldjogbGFuIGRldmljZSBpbmZvcm1hdGlvbg0KPiArICogQGNsaWVudDogY2xpZW50IHRvIGNs b3NlDQo+ICsgKiBAcmVzZXQ6IGZsYWcgdG8gaW5kaWNhdGUgY2xvc2Ugb24gcmVzZXQNCj4gKyAq DQo+ICsgKiBDYWxsZWQgYnkgdGhlIGxhbiBkcml2ZXIgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9m IGNsaWVudCB1bnJlZ2lzdGVyDQo+ICsgKiBEZXN0cm95IGFuZCBjbGVhbiB1cCB0aGUgZHJpdmVy IHJlc291cmNlcw0KPiArICovDQo+ICtzdGF0aWMgdm9pZCBpNDBpd19jbG9zZShzdHJ1Y3QgaTQw ZV9pbmZvICpsZGV2LCBzdHJ1Y3QgaTQwZV9jbGllbnQgKmNsaWVudCwNCj4gKwkJCWJvb2wgcmVz ZXQpDQo+ICt7DQo+ICsJc3RydWN0IGlyZG1hX2hhbmRsZXIgKmhkbDsNCj4gKwlzdHJ1Y3QgaXJk bWFfcGNpX2YgKnJmOw0KPiArCXN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2Ow0KPiArDQo+ICsJ aGRsID0gaXJkbWFfZmluZF9oYW5kbGVyKGxkZXYtPnBjaWRldik7DQo+ICsJaWYgKCFoZGwpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiArCXJmID0gJmhkbC0+cmY7DQo+ICsJaXdkZXYgPSBsaXN0X2Zp cnN0X2VudHJ5X29yX251bGwoJnJmLT52c2lfZGV2X2xpc3QsIHN0cnVjdCBpcmRtYV9kZXZpY2Us DQo+ICsJCQkJCSBsaXN0KTsNCj4gKwlpZiAocmVzZXQpDQo+ICsJCWl3ZGV2LT5yZXNldCA9IHRy dWU7DQo+ICsNCj4gKwlpcmRtYV9pYl91bnJlZ2lzdGVyX2RldmljZShpd2Rldik7DQo+ICsJaXJk bWFfZGVpbml0X3JmKHJmKTsNCj4gKwlwcl9kZWJ1ZygiSU5JVDogR2VuMSBWU0kgY2xvc2UgY29t cGxldGUgbGRldj0lcFxuIiwgbGRldik7DQo+ICt9DQo+ICsNCj4gKy8qIGNsaWVudCBpbnRlcmZh Y2UgZnVuY3Rpb25zICovDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGk0MGVfY2xpZW50X29wcyBp NDBlX29wcyA9IHsNCj4gKwkub3BlbiA9IGk0MGl3X29wZW4sDQo+ICsJLmNsb3NlID0gaTQwaXdf Y2xvc2UsDQo+ICsJLmwyX3BhcmFtX2NoYW5nZSA9IGk0MGl3X2wycGFyYW1fY2hhbmdlDQo+ICt9 Ow0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGk0MGVfY2xpZW50IGk0MGl3X2NsaWVudCA9IHsNCj4g KwkubmFtZSA9ICJpcmRtYSIsDQo+ICsJLm9wcyA9ICZpNDBlX29wcywNCj4gKwkudHlwZSA9IEk0 MEVfQ0xJRU5UX0lXQVJQLA0KPiArfTsNCj4gKw0KPiAraW50IGk0MGl3X3Byb2JlKHN0cnVjdCB2 aXJ0YnVzX2RldmljZSAqdmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgaTQwZV92aXJ0YnVzX2Rldmlj ZSAqaTQwZV92ZGV2ID0NCj4gKwkJCWNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgaTQwZV92aXJ0 YnVzX2RldmljZSwgdmRldik7DQo+ICsJc3RydWN0IGk0MGVfaW5mbyAqbGRldiA9IGk0MGVfdmRl di0+bGRldjsNCj4gKw0KPiArCWxkZXYtPmNsaWVudCA9ICZpNDBpd19jbGllbnQ7DQo+ICsNCj4g KwlyZXR1cm4gbGRldi0+b3BzLT5jbGllbnRfZGV2aWNlX3JlZ2lzdGVyKGxkZXYpOw0KPiArfQ0K PiArDQo+ICtpbnQgaTQwaXdfcmVtb3ZlKHN0cnVjdCB2aXJ0YnVzX2RldmljZSAqdmRldikNCj4g K3sNCj4gKwlzdHJ1Y3QgaTQwZV92aXJ0YnVzX2RldmljZSAqaTQwZV92ZGV2ID0NCj4gKwkJCWNv bnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgaTQwZV92aXJ0YnVzX2RldmljZSwgdmRldik7DQo+ICsJ c3RydWN0IGk0MGVfaW5mbyAqbGRldiA9IGk0MGVfdmRldi0+bGRldjsNCj4gKw0KPiArCWxkZXYt Pm9wcy0+Y2xpZW50X2RldmljZV91bnJlZ2lzdGVyKGxkZXYpOw0KPiArDQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvaXJkbWFf aWYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9pcmRtYV9pZi5jDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYjUzODgwMWNhMGI5DQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL2lyZG1hX2lmLmMN Cj4gQEAgLTAsMCArMSw0MjQgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wIG9yIExpbnV4LU9wZW5JQg0KPiArLyogQ29weXJpZ2h0IChjKSAyMDE5IEludGVsIENvcnBv cmF0aW9uICovDQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlcGFyYW0uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9uZXQvaW50ZWwvaWlkYy5oPg0K PiArI2luY2x1ZGUgIm1haW4uaCINCj4gKyNpbmNsdWRlICJ3cy5oIg0KPiArI2luY2x1ZGUgImlj cmRtYV9ody5oIg0KPiArDQo+ICsvKioNCj4gKyAqIGlyZG1hX2xhbl9yZWdpc3Rlcl9xc2V0IC0g UmVnaXN0ZXIgcXNldCB3aXRoIExBTiBkcml2ZXINCj4gKyAqIEB2c2k6IHZzaSBzdHJ1Y3R1cmUN Cj4gKyAqIEB0Y19ub2RlOiBUcmFmZmljIGNsYXNzIG5vZGUNCj4gKyAqLw0KPiArc3RhdGljIGVu dW0gaXJkbWFfc3RhdHVzX2NvZGUgaXJkbWFfbGFuX3JlZ2lzdGVyX3FzZXQoc3RydWN0IGlyZG1h X3NjX3ZzaSAqdnNpLA0KPiArCQkJCQkJICAgICAgc3RydWN0IGlyZG1hX3dzX25vZGUgKnRjX25v ZGUpDQo+ICt7DQo+ICsJc3RydWN0IGlyZG1hX2RldmljZSAqaXdkZXYgPSB2c2ktPmJhY2tfdnNp Ow0KPiArCXN0cnVjdCBpaWRjX3BlZXJfZGV2ICpsZGV2ID0gaXdkZXYtPmxkZXYtPmlmX2xkZXY7 DQo+ICsJc3RydWN0IGlpZGNfcmVzIHJkbWFfcXNldF9yZXMgPSB7fTsNCj4gKwlpbnQgcmV0Ow0K PiArDQo+ICsJcmRtYV9xc2V0X3Jlcy5jbnRfcmVxID0gMTsNCj4gKwlyZG1hX3FzZXRfcmVzLnJl c190eXBlID0gSUlEQ19SRE1BX1FTRVRTX1RYU0NIRUQ7DQo+ICsJcmRtYV9xc2V0X3Jlcy5yZXNb MF0ucmVzLnFzZXRzLnFzX2hhbmRsZSA9IHRjX25vZGUtPnFzX2hhbmRsZTsNCj4gKwlyZG1hX3Fz ZXRfcmVzLnJlc1swXS5yZXMucXNldHMudGMgPSB0Y19ub2RlLT50cmFmZmljX2NsYXNzOw0KPiAr CXJkbWFfcXNldF9yZXMucmVzWzBdLnJlcy5xc2V0cy52c2lfaWQgPSB2c2ktPnZzaV9pZHg7DQo+ ICsJcmV0ID0gbGRldi0+b3BzLT5hbGxvY19yZXMobGRldiwgJnJkbWFfcXNldF9yZXMsIDApOw0K PiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2RiZyhyZmRldl90b19kZXYodnNpLT5kZXYpLA0KPiAr CQkJIldTOiBMQU4gYWxsb2NfcmVzIGZvciByZG1hIHFzZXQgZmFpbGVkLlxuIik7DQo+ICsJCXJl dHVybiBJUkRNQV9FUlJfTk9fTUVNT1JZOw0KPiArCX0NCj4gKw0KPiArCXRjX25vZGUtPmwyX3Nj aGVkX25vZGVfaWQgPSByZG1hX3FzZXRfcmVzLnJlc1swXS5yZXMucXNldHMudGVpZDsNCj4gKwl2 c2ktPnFvc1t0Y19ub2RlLT51c2VyX3ByaV0ubDJfc2NoZWRfbm9kZV9pZCA9DQo+ICsJCXJkbWFf cXNldF9yZXMucmVzWzBdLnJlcy5xc2V0cy50ZWlkOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICogaXJkbWFfbGFuX3VucmVnaXN0ZXJfcXNldCAtIFVucmVnaXN0 ZXIgcXNldCB3aXRoIExBTiBkcml2ZXINCj4gKyAqIEB2c2k6IHZzaSBzdHJ1Y3R1cmUNCj4gKyAq IEB0Y19ub2RlOiBUcmFmZmljIGNsYXNzIG5vZGUNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgaXJk bWFfbGFuX3VucmVnaXN0ZXJfcXNldChzdHJ1Y3QgaXJkbWFfc2NfdnNpICp2c2ksDQo+ICsJCQkJ ICAgICAgc3RydWN0IGlyZG1hX3dzX25vZGUgKnRjX25vZGUpDQo+ICt7DQo+ICsJc3RydWN0IGly ZG1hX2RldmljZSAqaXdkZXYgPSB2c2ktPmJhY2tfdnNpOw0KPiArCXN0cnVjdCBpaWRjX3BlZXJf ZGV2ICpsZGV2ID0gaXdkZXYtPmxkZXYtPmlmX2xkZXY7DQo+ICsJc3RydWN0IGlpZGNfcmVzIHJk bWFfcXNldF9yZXMgPSB7fTsNCj4gKw0KPiArCXJkbWFfcXNldF9yZXMucmVzX2FsbG9jYXRlZCA9 IDE7DQo+ICsJcmRtYV9xc2V0X3Jlcy5yZXNfdHlwZSA9IElJRENfUkRNQV9RU0VUU19UWFNDSEVE Ow0KPiArCXJkbWFfcXNldF9yZXMucmVzWzBdLnJlcy5xc2V0cy52c2lfaWQgPSB2c2ktPnZzaV9p ZHg7DQo+ICsJcmRtYV9xc2V0X3Jlcy5yZXNbMF0ucmVzLnFzZXRzLnRlaWQgPSB0Y19ub2RlLT5s Ml9zY2hlZF9ub2RlX2lkOw0KPiArCXJkbWFfcXNldF9yZXMucmVzWzBdLnJlcy5xc2V0cy5xc19o YW5kbGUgPSB0Y19ub2RlLT5xc19oYW5kbGU7DQo+ICsNCj4gKwlpZiAobGRldi0+b3BzLT5mcmVl X3JlcyhsZGV2LCAmcmRtYV9xc2V0X3JlcykpDQo+ICsJCWRldl9kYmcocmZkZXZfdG9fZGV2KHZz aS0+ZGV2KSwNCj4gKwkJCSJXUzogTEFOIGZyZWVfcmVzIGZvciByZG1hIHFzZXQgZmFpbGVkLlxu Iik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaXJkbWFfcHJlcF90Y19jaGFuZ2UgLSBQcmVw YXJlIGZvciBUQyBjaGFuZ2VzDQo+ICsgKiBAbGRldjogUGVlciBkZXZpY2Ugc3RydWN0dXJlDQo+ ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGlyZG1hX3ByZXBfdGNfY2hhbmdlKHN0cnVjdCBpaWRjX3Bl ZXJfZGV2ICpsZGV2KQ0KPiArew0KPiArCXN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2Ow0KPiAr DQo+ICsJaXdkZXYgPSBpcmRtYV9nZXRfZGV2aWNlKGxkZXYtPm5ldGRldik7DQo+ICsJaWYgKCFp d2RldikNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWYgKGl3ZGV2LT52c2kudGNfY2hhbmdlX3Bl bmRpbmcpDQo+ICsJCWdvdG8gZG9uZTsNCj4gKw0KPiArCWl3ZGV2LT52c2kudGNfY2hhbmdlX3Bl bmRpbmcgPSB0cnVlOw0KPiArCWlyZG1hX3NjX3N1c3BlbmRfcmVzdW1lX3FwcygmaXdkZXYtPnZz aSwgSVJETUFfT1BfU1VTUEVORCk7DQo+ICsNCj4gKwkvKiBXYWl0IGZvciBhbGwgcXAncyB0byBz dXNwZW5kICovDQo+ICsJd2FpdF9ldmVudF90aW1lb3V0KGl3ZGV2LT5zdXNwZW5kX3dxLA0KPiAr CQkJICAgIWF0b21pY19yZWFkKCZpd2Rldi0+dnNpLnFwX3N1c3BlbmRfcmVxcyksDQo+ICsJCQkg ICBJUkRNQV9FVkVOVF9USU1FT1VUKTsNCj4gKwlpcmRtYV93c19yZXNldCgmaXdkZXYtPnZzaSk7 DQo+ICtkb25lOg0KPiArCWlyZG1hX3B1dF9kZXZpY2UoaXdkZXYpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBpcmRtYV9sb2dfaW52YWxpZF9tdHUodTE2IG10dSwgc3RydWN0IGlyZG1hX3Nj X2RldiAqZGV2KQ0KPiArew0KPiArCWlmIChtdHUgPCBJUkRNQV9NSU5fTVRVX0lQVjQpDQo+ICsJ CWRldl93YXJuKHJmZGV2X3RvX2RldihkZXYpLA0KPiArCQkJICJNVFUgc2V0dGluZyBbJWRdIHRv byBsb3cgZm9yIFJETUEgdHJhZmZpYy4gTWluaW11bSBNVFUgaXMgNTc2IGZvciBJUHY0XG4iLA0K PiArCQkJIG10dSk7DQo+ICsJZWxzZSBpZiAobXR1IDwgSVJETUFfTUlOX01UVV9JUFY2KQ0KPiAr CQlkZXZfd2FybihyZmRldl90b19kZXYoZGV2KSwNCj4gKwkJCSAiTVRVIHNldHRpbmcgWyVkXSB0 b28gbG93IGZvciBSRE1BIHRyYWZmaWMuIE1pbmltdW0gTVRVIGlzIDEyODAgZm9yIElQdjZcXG4i LA0KPiArCQkJIG10dSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaXJkbWFfZXZlbnRfaGFu ZGxlciAtIENhbGxlZCBieSBMQU4gZHJpdmVyIHRvIG5vdGlmeSBldmVudHMNCj4gKyAqIEBsZGV2 OiBQZWVyIGRldmljZSBzdHJ1Y3R1cmUNCj4gKyAqIEBldmVudDogZXZlbnQgZnJvbSBMQU4gZHJp dmVyDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGlyZG1hX2V2ZW50X2hhbmRsZXIoc3RydWN0IGlp ZGNfcGVlcl9kZXYgKmxkZXYsDQo+ICsJCQkJc3RydWN0IGlpZGNfZXZlbnQgKmV2ZW50KQ0KPiAr ew0KPiArCXN0cnVjdCBpcmRtYV9sMnBhcmFtcyBsMnBhcmFtcyA9IHt9Ow0KPiArCXN0cnVjdCBp cmRtYV9kZXZpY2UgKml3ZGV2Ow0KPiArCWludCBpOw0KPiArDQo+ICsJaXdkZXYgPSBpcmRtYV9n ZXRfZGV2aWNlKGxkZXYtPm5ldGRldik7DQo+ICsJaWYgKCFpd2RldikNCj4gKwkJcmV0dXJuOw0K PiArDQo+ICsJaWYgKCpldmVudC0+dHlwZSAmIEJJVChJSURDX0VWRU5UX0xJTktfQ0hBTkdFKSkg ew0KPiArCQlkZXZfZGJnKHJmZGV2X3RvX2RldigmaXdkZXYtPnJmLT5zY19kZXYpLA0KPiArCQkJ IkNMTlQ6IExJTktfQ0hBTkdFIGV2ZW50XG4iKTsNCj4gKwl9IGVsc2UgaWYgKCpldmVudC0+dHlw ZSAmIEJJVChJSURDX0VWRU5UX01UVV9DSEFOR0UpKSB7DQo+ICsJCWRldl9kYmcocmZkZXZfdG9f ZGV2KCZpd2Rldi0+cmYtPnNjX2RldiksDQo+ICsJCQkiQ0xOVDogbmV3IE1UVSA9ICVkXG4iLCBl dmVudC0+aW5mby5tdHUpOw0KPiArCQlpZiAoaXdkZXYtPnZzaS5tdHUgIT0gZXZlbnQtPmluZm8u bXR1KSB7DQo+ICsJCQlsMnBhcmFtcy5tdHUgPSBldmVudC0+aW5mby5tdHU7DQo+ICsJCQlsMnBh cmFtcy5tdHVfY2hhbmdlZCA9IHRydWU7DQo+ICsJCQlpcmRtYV9sb2dfaW52YWxpZF9tdHUobDJw YXJhbXMubXR1LCAmaXdkZXYtPnJmLT5zY19kZXYpOw0KPiArCQkJaXJkbWFfY2hhbmdlX2wycGFy YW1zKCZpd2Rldi0+dnNpLCAmbDJwYXJhbXMpOw0KPiArCQl9DQo+ICsJfSBlbHNlIGlmICgqZXZl bnQtPnR5cGUgJiBCSVQoSUlEQ19FVkVOVF9UQ19DSEFOR0UpKSB7DQo+ICsJCWlmICghaXdkZXYt PnZzaS50Y19jaGFuZ2VfcGVuZGluZykNCj4gKwkJCWdvdG8gZG9uZTsNCj4gKw0KPiArCQlsMnBh cmFtcy50Y19jaGFuZ2VkID0gdHJ1ZTsNCj4gKwkJZGV2X2RiZyhyZmRldl90b19kZXYoJml3ZGV2 LT5yZi0+c2NfZGV2KSwgIkNMTlQ6IFRDIENoYW5nZVxuIik7DQo+ICsJCWl3ZGV2LT5kY2IgPSBl dmVudC0+aW5mby5wb3J0X3Fvcy5udW1fdGMgPiAxID8gdHJ1ZSA6IGZhbHNlOw0KPiArDQo+ICsJ CWZvciAoaSA9IDA7IGkgPCBJSURDX01BWF9VU0VSX1BSSU9SSVRZOyArK2kpDQo+ICsJCQlsMnBh cmFtcy51cDJ0Y1tpXSA9IGV2ZW50LT5pbmZvLnBvcnRfcW9zLnVwMnRjW2ldOw0KPiArCQlpcmRt YV9jaGFuZ2VfbDJwYXJhbXMoJml3ZGV2LT52c2ksICZsMnBhcmFtcyk7DQo+ICsJfSBlbHNlIGlm ICgqZXZlbnQtPnR5cGUgJiBCSVQoSUlEQ19FVkVOVF9BUElfQ0hBTkdFKSkgew0KPiArCQlkZXZf ZGJnKHJmZGV2X3RvX2RldigmaXdkZXYtPnJmLT5zY19kZXYpLA0KPiArCQkJIkNMTlQ6IEFQSV9D SEFOR0VcbiIpOw0KPiArCX0NCj4gKw0KPiArZG9uZToNCj4gKwlpcmRtYV9wdXRfZGV2aWNlKGl3 ZGV2KTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpcmRtYV9vcGVuIC0gY2xpZW50IGludGVy ZmFjZSBvcGVyYXRpb24gb3BlbiBmb3IgUkRNQSBkZXZpY2UNCj4gKyAqIEBsZGV2OiBMQU4gZGV2 aWNlIGluZm9ybWF0aW9uDQo+ICsgKg0KPiArICogQ2FsbGVkIGJ5IHRoZSBMQU4gZHJpdmVyIGR1 cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBjbGllbnQNCj4gKyAqIHJlZ2lzdGVyLg0KPiArICovDQo+ ICtzdGF0aWMgaW50IGlyZG1hX29wZW4oc3RydWN0IGlpZGNfcGVlcl9kZXYgKmxkZXYpDQo+ICt7 DQo+ICsJc3RydWN0IGlyZG1hX2hhbmRsZXIgKmhkbDsNCj4gKwlzdHJ1Y3QgaXJkbWFfZGV2aWNl ICppd2RldjsNCj4gKwlzdHJ1Y3QgaXJkbWFfc2NfZGV2ICpkZXY7DQo+ICsJc3RydWN0IGlpZGNf ZXZlbnQgZXZlbnRzID0ge307DQo+ICsJc3RydWN0IGlyZG1hX3BjaV9mICpyZjsNCj4gKwlzdHJ1 Y3QgaXJkbWFfcHJpdl9sZGV2ICpwbGRldjsNCj4gKwlzdHJ1Y3QgaXJkbWFfbDJwYXJhbXMgbDJw YXJhbXMgPSB7fTsNCj4gKwlpbnQgaSwgcmV0Ow0KPiArDQo+ICsJaGRsID0gaXJkbWFfZmluZF9o YW5kbGVyKGxkZXYtPnBkZXYpOw0KPiArCWlmICghaGRsKQ0KPiArCQlyZXR1cm4gLUVOT0RFVjsN Cj4gKw0KPiArCXJmID0gJmhkbC0+cmY7DQo+ICsJaWYgKHJmLT5pbml0X3N0YXRlICE9IENFUTBf Q1JFQVRFRCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpd2RldiA9IGliX2FsbG9j X2RldmljZShpcmRtYV9kZXZpY2UsIGliZGV2KTsNCj4gKwlpZiAoIWl3ZGV2KQ0KPiArCQlyZXR1 cm4gLUVOT01FTTsNCj4gKw0KPiArCXBsZGV2ID0gJnJmLT5sZGV2Ow0KPiArCXBsZGV2LT5wZl92 c2lfbnVtID0gbGRldi0+cGZfdnNpX251bTsNCj4gKwlkZXYgPSAmaGRsLT5yZi5zY19kZXY7DQo+ ICsNCj4gKwlpd2Rldi0+aGRsID0gaGRsOw0KPiArCWl3ZGV2LT5yZiA9IHJmOw0KPiArCWl3ZGV2 LT5sZGV2ID0gJnJmLT5sZGV2Ow0KPiArCWl3ZGV2LT5wdXNoX21vZGUgPSAwOw0KPiArCWl3ZGV2 LT5yY3Zfd25kID0gSVJETUFfQ01fREVGQVVMVF9SQ1ZfV05EX1NDQUxFRDsNCj4gKwlpd2Rldi0+ cmN2X3dzY2FsZSA9IElSRE1BX0NNX0RFRkFVTFRfUkNWX1dORF9TQ0FMRTsNCj4gKwlpd2Rldi0+ bmV0ZGV2ID0gbGRldi0+bmV0ZGV2Ow0KPiArCWl3ZGV2LT5jcmVhdGVfaWxxID0gdHJ1ZTsNCj4g KwlpZiAocmYtPnByb3RvY29sX3VzZWQgPT0gSVJETUFfUk9DRV9QUk9UT0NPTF9PTkxZKSB7DQo+ ICsJCWl3ZGV2LT5yb2NlX21vZGUgPSB0cnVlOw0KPiArCQlpd2Rldi0+Y3JlYXRlX2lscSA9IGZh bHNlOw0KPiArCX0NCj4gKwlsMnBhcmFtcy5tdHUgPSBsZGV2LT5uZXRkZXYtPm10dTsNCj4gKwls MnBhcmFtcy5udW1fdGMgPSBsZGV2LT5pbml0aWFsX3Fvc19pbmZvLm51bV90YzsNCj4gKwlsMnBh cmFtcy5udW1fYXBwcyA9IGxkZXYtPmluaXRpYWxfcW9zX2luZm8ubnVtX2FwcHM7DQo+ICsJbDJw YXJhbXMudnNpX3ByaW9fdHlwZSA9IGxkZXYtPmluaXRpYWxfcW9zX2luZm8udnNpX3ByaW9yaXR5 X3R5cGU7DQo+ICsJbDJwYXJhbXMudnNpX3JlbF9idyA9IGxkZXYtPmluaXRpYWxfcW9zX2luZm8u dnNpX3JlbGF0aXZlX2J3Ow0KPiArCWZvciAoaSA9IDA7IGkgPCBsMnBhcmFtcy5udW1fdGM7IGkr Kykgew0KPiArCQlsMnBhcmFtcy50Y19pbmZvW2ldLmVncmVzc192aXJ0X3VwID0NCj4gKwkJCWxk ZXYtPmluaXRpYWxfcW9zX2luZm8udGNfaW5mb1tpXS5lZ3Jlc3NfdmlydF91cDsNCj4gKwkJbDJw YXJhbXMudGNfaW5mb1tpXS5pbmdyZXNzX3ZpcnRfdXAgPQ0KPiArCQkJbGRldi0+aW5pdGlhbF9x b3NfaW5mby50Y19pbmZvW2ldLmluZ3Jlc3NfdmlydF91cDsNCj4gKwkJbDJwYXJhbXMudGNfaW5m b1tpXS5wcmlvX3R5cGUgPQ0KPiArCQkJbGRldi0+aW5pdGlhbF9xb3NfaW5mby50Y19pbmZvW2ld LnByaW9fdHlwZTsNCj4gKwkJbDJwYXJhbXMudGNfaW5mb1tpXS5yZWxfYncgPQ0KPiArCQkJbGRl di0+aW5pdGlhbF9xb3NfaW5mby50Y19pbmZvW2ldLnJlbF9idzsNCj4gKwkJbDJwYXJhbXMudGNf aW5mb1tpXS50Y19jdHggPQ0KPiArCQkJbGRldi0+aW5pdGlhbF9xb3NfaW5mby50Y19pbmZvW2ld LnRjX2N0eDsNCj4gKwl9DQo+ICsJZm9yIChpID0gMDsgaSA8IElJRENfTUFYX1VTRVJfUFJJT1JJ VFk7IGkrKykNCj4gKwkJbDJwYXJhbXMudXAydGNbaV0gPSBsZGV2LT5pbml0aWFsX3Fvc19pbmZv LnVwMnRjW2ldOw0KPiArDQo+ICsJaXdkZXYtPnZzaV9udW0gPSBsZGV2LT5wZl92c2lfbnVtOw0K PiArCWxkZXYtPm9wcy0+dXBkYXRlX3ZzaV9maWx0ZXIobGRldiwgSUlEQ19SRE1BX0ZJTFRFUl9C T1RILCB0cnVlKTsNCj4gKw0KPiArCWlmIChpcmRtYV9ydF9pbml0X2h3KHJmLCBpd2RldiwgJmwy cGFyYW1zKSkgew0KPiArCQlpYl9kZWFsbG9jX2RldmljZSgmaXdkZXYtPmliZGV2KTsNCj4gKwkJ cmV0dXJuIC1FSU87DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gaXJkbWFfaWJfcmVnaXN0ZXJfZGV2 aWNlKGl3ZGV2KTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCWlyZG1hX3J0X2RlaW5pdF9odyhpd2Rl dik7DQo+ICsJCWliX2RlYWxsb2NfZGV2aWNlKCZpd2Rldi0+aWJkZXYpOw0KPiArCQlyZXR1cm4g cmV0Ow0KPiArCX0NCj4gKw0KPiArCWV2ZW50cy5yZXBvcnRlciA9IGxkZXY7DQo+ICsJc2V0X2Jp dChJSURDX0VWRU5UX0xJTktfQ0hBTkdFLCBldmVudHMudHlwZSk7DQo+ICsJc2V0X2JpdChJSURD X0VWRU5UX01UVV9DSEFOR0UsIGV2ZW50cy50eXBlKTsNCj4gKwlzZXRfYml0KElJRENfRVZFTlRf VENfQ0hBTkdFLCBldmVudHMudHlwZSk7DQo+ICsJc2V0X2JpdChJSURDX0VWRU5UX0FQSV9DSEFO R0UsIGV2ZW50cy50eXBlKTsNCj4gKw0KPiArCWxkZXYtPm9wcy0+cmVnX2Zvcl9ub3RpZmljYXRp b24obGRldiwgJmV2ZW50cyk7DQo+ICsJZGV2X2RiZyhyZmRldl90b19kZXYoZGV2KSwNCj4gKwkJ IklOSVQ6IEdlbjIgVlNJWyVkXSBvcGVuIHN1Y2Nlc3MgbGRldj0lcFxuIiwgbGRldi0+cGZfdnNp X251bSwNCj4gKwkJbGRldik7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgKiBpcmRtYV9jbG9zZSAtIGNsaWVudCBpbnRlcmZhY2Ugb3BlcmF0aW9uIGNsb3NlIGZv ciBpd2FycC91ZGEgZGV2aWNlDQo+ICsgKiBAbGRldjogTEFOIGRldmljZSBpbmZvcm1hdGlvbg0K PiArICogQHJlYXNvbjogcmVhc29uIGZvciBjbG9zaW5nDQo+ICsgKg0KPiArICogQ2FsbGVkIGJ5 IHRoZSBMQU4gZHJpdmVyIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBjbGllbnQNCj4gKyAqIHVu cmVnaXN0ZXIgRGVzdHJveSBhbmQgY2xlYW4gdXAgdGhlIGRyaXZlciByZXNvdXJjZXMNCj4gKyAq Lw0KPiArc3RhdGljIHZvaWQgaXJkbWFfY2xvc2Uoc3RydWN0IGlpZGNfcGVlcl9kZXYgKmxkZXYs DQo+ICsJCQllbnVtIGlpZGNfY2xvc2VfcmVhc29uIHJlYXNvbikNCj4gK3sNCj4gKwlzdHJ1Y3Qg aXJkbWFfaGFuZGxlciAqaGRsOw0KPiArCXN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2Ow0KPiAr CXN0cnVjdCBpcmRtYV9wY2lfZiAqcmY7DQo+ICsNCj4gKwloZGwgPSBpcmRtYV9maW5kX2hhbmRs ZXIobGRldi0+cGRldik7DQo+ICsJaWYgKCFoZGwpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCXJm ID0gJmhkbC0+cmY7DQo+ICsJaXdkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJnJmLT52 c2lfZGV2X2xpc3QsIHN0cnVjdCBpcmRtYV9kZXZpY2UsDQo+ICsJCQkJCSBsaXN0KTsNCj4gKwlp ZiAoIWl3ZGV2KQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlpZiAocmVhc29uID09IElJRENfUkVB U09OX0dMT0JSX1JFUSB8fCByZWFzb24gPT0gSUlEQ19SRUFTT05fQ09SRVJfUkVRIHx8DQo+ICsJ ICAgIHJlYXNvbiA9PSBJSURDX1JFQVNPTl9QRlJfUkVRIHx8IHJmLT5yZXNldCkgew0KPiArCQlp d2Rldi0+cmVzZXQgPSB0cnVlOw0KPiArCQlyZi0+cmVzZXQgPSB0cnVlOw0KPiArCX0NCj4gKw0K PiArCWlyZG1hX2liX3VucmVnaXN0ZXJfZGV2aWNlKGl3ZGV2KTsNCj4gKwlsZGV2LT5vcHMtPnVw ZGF0ZV92c2lfZmlsdGVyKGxkZXYsIElJRENfUkRNQV9GSUxURVJfQk9USCwgZmFsc2UpOw0KPiAr CWlmIChyZi0+cmVzZXQpDQo+ICsJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmYtPnJzdF93b3Jr LCByZi0+cnN0X3RvICogSFopOw0KPiArDQo+ICsJcHJfZGVidWcoIklOSVQ6IEdlbjIgVlNJWyVk XSBjbG9zZSBjb21wbGV0ZSBsZGV2PSVwXG4iLA0KPiArCQkgbGRldi0+cGZfdnNpX251bSwgbGRl dik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaXJkbWFfcmVtb3ZlIC0gR0VOXzIgZGV2aWNl IHJlbW92ZSgpDQo+ICsgKiBAdmRldjogdmlydGJ1cyBkZXZpY2UNCj4gKyAqDQo+ICsgKiBDYWxs ZWQgb24gbW9kdWxlIHVubG9hZC4NCj4gKyAqLw0KPiAraW50IGlyZG1hX3JlbW92ZShzdHJ1Y3Qg dmlydGJ1c19kZXZpY2UgKnZkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGlpZGNfdmlydGJ1c19vYmpl Y3QgKnZvID0NCj4gKwkJCWNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgaWlkY192aXJ0YnVzX29i amVjdCwgdmRldik7DQo+ICsJc3RydWN0IGlpZGNfcGVlcl9kZXYgKmxkZXYgPSB2by0+cGVlcl9k ZXY7DQo+ICsJc3RydWN0IGlyZG1hX2hhbmRsZXIgKmhkbDsNCj4gKw0KPiArCWhkbCA9IGlyZG1h X2ZpbmRfaGFuZGxlcihsZGV2LT5wZGV2KTsNCj4gKwlpZiAoIWhkbCkNCj4gKwkJcmV0dXJuIDA7 DQo+ICsNCj4gKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmhkbC0+cmYucnN0X3dvcmspOw0K PiArCWxkZXYtPm9wcy0+cGVlcl91bnJlZ2lzdGVyKGxkZXYpOw0KPiArDQo+ICsJaXJkbWFfZGVp bml0X3JmKCZoZGwtPnJmKTsNCj4gKwlwcl9kZWJ1ZygiSU5JVDogR2VuMiBkZXZpY2UgcmVtb3Zl IHN1Y2Nlc3MgbGRldj0lcFxuIiwgbGRldik7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpaWRjX3BlZXJfb3BzIGlyZG1hX3BlZXJfb3BzID0g ew0KPiArCS5jbG9zZSA9IGlyZG1hX2Nsb3NlLA0KPiArCS5ldmVudF9oYW5kbGVyID0gaXJkbWFf ZXZlbnRfaGFuZGxlciwNCj4gKwkub3BlbiA9IGlyZG1hX29wZW4sDQo+ICsJLnByZXBfdGNfY2hh bmdlID0gaXJkbWFfcHJlcF90Y19jaGFuZ2UsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgc3RydWN0 IGlpZGNfcGVlcl9kcnYgaXJkbWFfcGVlcl9kcnYgPSB7DQo+ICsJLmRyaXZlcl9pZCA9IElJRENf UEVFUl9SRE1BX0RSSVZFUiwNCj4gKwkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLA0KPiArfTsNCj4g Kw0KPiArLyoqDQo+ICsgKiBpY3JkbWFfcmVxdWVzdF9yZXNldCAtIFJlcXVlc3QgYSByZXNldA0K PiArICogQHJmOiBSRE1BIFBDSSBmdW5jdGlvbg0KPiArICovDQo+ICtzdGF0aWMgdm9pZCBpY3Jk bWFfcmVxdWVzdF9yZXNldChzdHJ1Y3QgaXJkbWFfcGNpX2YgKnJmKQ0KPiArew0KPiArCXN0cnVj dCBpaWRjX3BlZXJfZGV2ICpsZGV2ID0gcmYtPmxkZXYuaWZfbGRldjsNCj4gKw0KPiArCWRldl93 YXJuKHJmZGV2X3RvX2RldigmcmYtPnNjX2RldiksICJSZXF1ZXN0aW5nIGEgYSByZXNldFxuIik7 DQo+ICsJbGRldi0+b3BzLT5yZXF1ZXN0X3Jlc2V0KGxkZXYsIElJRENfUEVFUl9QRlIpOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIGlyZG1hX3Byb2JlIC0gR0VOXzIgZGV2aWNlIHByb2JlKCkN Cj4gKyAqIEB2ZGV2OiB2aXJ0YnVzIGRldmljZQ0KPiArICoNCj4gKyAqIENyZWF0ZSBkZXZpY2Ug cmVzb3VyY2VzLCBzZXQgdXAgcXVldWVzLCBwYmxlIGFuZCBobWMgb2JqZWN0cy4NCj4gKyAqIFJl dHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSByZXR1cm4gZXJyb3INCj4gKyAqLw0KPiAr aW50IGlyZG1hX3Byb2JlKHN0cnVjdCB2aXJ0YnVzX2RldmljZSAqdmRldikNCj4gK3sNCj4gKwlz dHJ1Y3QgaWlkY192aXJ0YnVzX29iamVjdCAqdm8gPQ0KPiArCQkJY29udGFpbmVyX29mKHZkZXYs IHN0cnVjdCBpaWRjX3ZpcnRidXNfb2JqZWN0LCB2ZGV2KTsNCj4gKwlzdHJ1Y3QgaWlkY19wZWVy X2RldiAqbGRldiA9IHZvLT5wZWVyX2RldjsNCj4gKwlzdHJ1Y3QgaXJkbWFfaGFuZGxlciAqaGRs Ow0KPiArCXN0cnVjdCBpcmRtYV9wY2lfZiAqcmY7DQo+ICsJc3RydWN0IGlyZG1hX3NjX2RldiAq ZGV2Ow0KPiArCXN0cnVjdCBpcmRtYV9wcml2X2xkZXYgKnBsZGV2Ow0KPiArCWludCBlcnI7DQo+ ICsNCj4gKwloZGwgPSBpcmRtYV9maW5kX2hhbmRsZXIobGRldi0+cGRldik7DQo+ICsJaWYgKGhk bCkNCj4gKwkJcmV0dXJuIC1FQlVTWTsNCj4gKw0KPiArCWhkbCA9IGt6YWxsb2Moc2l6ZW9mKCpo ZGwpLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWhkbCkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ ICsNCj4gKwlyZiA9ICZoZGwtPnJmOw0KPiArCXBsZGV2ID0gJnJmLT5sZGV2Ow0KPiArCWhkbC0+ bGRldiA9IHBsZGV2Ow0KPiArCWhkbC0+dmRldiA9IHZkZXY7DQo+ICsJcmYtPmhkbCA9IGhkbDsN Cj4gKwlkZXYgPSAmcmYtPnNjX2RldjsNCj4gKwlkZXYtPmJhY2tfZGV2ID0gcmY7DQo+ICsJcmYt Pmdlbl9vcHMuaW5pdF9odyA9IGljcmRtYV9pbml0X2h3Ow0KPiArCXJmLT5nZW5fb3BzLnJlcXVl c3RfcmVzZXQgPSBpY3JkbWFfcmVxdWVzdF9yZXNldDsNCj4gKwlyZi0+Z2VuX29wcy5yZWdpc3Rl cl9xc2V0ID0gaXJkbWFfbGFuX3JlZ2lzdGVyX3FzZXQ7DQo+ICsJcmYtPmdlbl9vcHMudW5yZWdp c3Rlcl9xc2V0ID0gaXJkbWFfbGFuX3VucmVnaXN0ZXJfcXNldDsNCj4gKwlwbGRldi0+aWZfbGRl diA9IGxkZXY7DQo+ICsJcmYtPnJkbWFfdmVyID0gSVJETUFfR0VOXzI7DQo+ICsJaXJkbWFfaW5p dF9yZl9jb25maWdfcGFyYW1zKHJmKTsNCj4gKwlJTklUX0RFTEFZRURfV09SSygmcmYtPnJzdF93 b3JrLCBpcmRtYV9yZXNldF90YXNrKTsNCj4gKwlkZXYtPnBjaV9yZXYgPSBsZGV2LT5wZGV2LT5y ZXZpc2lvbjsNCj4gKwlyZi0+ZGVmYXVsdF92c2kudnNpX2lkeCA9IGxkZXYtPnBmX3ZzaV9udW07 DQo+ICsJLyogc2F2ZSBpbmZvcm1hdGlvbiBmcm9tIGxkZXYgdG8gcHJpdl9sZGV2Ki8NCj4gKwlw bGRldi0+Zm5fbnVtID0gUENJX0ZVTkMobGRldi0+cGRldi0+ZGV2Zm4pOw0KPiArCXJmLT5ody5o d19hZGRyID0gbGRldi0+aHdfYWRkcjsNCj4gKwlyZi0+cGRldiA9IGxkZXYtPnBkZXY7DQo+ICsJ cmYtPm5ldGRldiA9IGxkZXYtPm5ldGRldjsNCj4gKwlwbGRldi0+ZnR5cGUgPSBsZGV2LT5mdHlw ZTsNCj4gKwlwbGRldi0+bXNpeF9jb3VudCA9IGxkZXYtPm1zaXhfY291bnQ7DQo+ICsJcGxkZXYt Pm1zaXhfZW50cmllcyA9IGxkZXYtPm1zaXhfZW50cmllczsNCj4gKwlpcmRtYV9hZGRfaGFuZGxl cihoZGwpOw0KPiArCWlmIChpcmRtYV9jdHJsX2luaXRfaHcocmYpKSB7DQo+ICsJCWVyciA9IC1F SU87DQo+ICsJCWdvdG8gZXJyX2N0cmxfaW5pdDsNCj4gKwl9DQo+ICsJbGRldi0+cGVlcl9vcHMg PSAmaXJkbWFfcGVlcl9vcHM7DQo+ICsJbGRldi0+cGVlcl9kcnYgPSAmaXJkbWFfcGVlcl9kcnY7 DQo+ICsJZXJyID0gbGRldi0+b3BzLT5wZWVyX3JlZ2lzdGVyKGxkZXYpOw0KPiArCWlmIChlcnIp DQo+ICsJCWdvdG8gZXJyX3BlZXJfcmVnOw0KPiArDQo+ICsJZGV2X2RiZyhyZmRldl90b19kZXYo ZGV2KSwNCj4gKwkJIklOSVQ6IEdlbjIgZGV2aWNlIHByb2JlIHN1Y2Nlc3MgbGRldj0lcFxuIiwg bGRldik7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gKw0KPiArZXJyX3BlZXJfcmVnOg0KPiArCWly ZG1hX2N0cmxfZGVpbml0X2h3KHJmKTsNCj4gK2Vycl9jdHJsX2luaXQ6DQo+ICsJaXJkbWFfZGVs X2hhbmRsZXIocmYtPmhkbCk7DQo+ICsJa2ZyZWUocmYtPmhkbCk7DQo+ICsNCj4gKwlyZXR1cm4g ZXJyOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogaXJkbWFfbGFuX3ZzaV9yZWFkeSAtIGNoZWNr IHRvIHNlZSBpZiBsYW4gcmVzZXQgZG9uZQ0KPiArICogQHZkZXY6IHZpcnRidXMgZGV2aWNlDQo+ ICsgKi8NCj4gK2Jvb2wgaXJkbWFfbGFuX3ZzaV9yZWFkeShzdHJ1Y3QgdmlydGJ1c19kZXZpY2Ug KnZkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGlpZGNfdmlydGJ1c19vYmplY3QgKnZvID0NCj4gKwkJ CWNvbnRhaW5lcl9vZih2ZGV2LCBzdHJ1Y3QgaWlkY192aXJ0YnVzX29iamVjdCwgdmRldik7DQo+ ICsJc3RydWN0IGlpZGNfcGVlcl9kZXYgKmxkZXYgPSB2by0+cGVlcl9kZXY7DQo+ICsNCj4gKwly ZXR1cm4gbGRldi0+b3BzLT5pc192c2lfcmVhZHkobGRldikgPyB0cnVlIDogZmFsc2U7DQo+ICt9 DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvbWFpbi5jIGIvZHJp dmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL21haW4uYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCAwMDAwMDAwMDAwMDAuLmFhN2YyYjJmNDk2Yg0KPiAtLS0gL2Rldi9udWxsDQo+ICsr KyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS9tYWluLmMNCj4gQEAgLTAsMCArMSw1NzIg QEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIG9yIExpbnV4LU9wZW5J Qg0KPiArLyogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbiAqLw0K PiArI2luY2x1ZGUgIm1haW4uaCINCj4gKw0KPiArYm9vbCBpcmRtYV91cGxvYWRfY29udGV4dDsN Cj4gKw0KPiArTU9EVUxFX0FMSUFTKCJpNDBpdyIpOw0KPiArTU9EVUxFX0FVVEhPUigiSW50ZWwg Q29ycG9yYXRpb24sIDxlMTAwMC1yZG1hQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4iKTsNCj4gK01P RFVMRV9ERVNDUklQVElPTigiSW50ZWwoUikgRXRoZXJuZXQgUHJvdG9jb2wgRHJpdmVyIGZvciBS RE1BIik7DQo+ICtNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7DQo+ICsNCj4gK0xJU1Rf SEVBRChpcmRtYV9oYW5kbGVycyk7DQo+ICtERUZJTkVfU1BJTkxPQ0soaXJkbWFfaGFuZGxlcl9s b2NrKTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpcmRtYV9pbmV0YWRk cl9ub3RpZmllciA9IHsNCj4gKwkubm90aWZpZXJfY2FsbCA9IGlyZG1hX2luZXRhZGRyX2V2ZW50 DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGlyZG1hX2luZXRh ZGRyNl9ub3RpZmllciA9IHsNCj4gKwkubm90aWZpZXJfY2FsbCA9IGlyZG1hX2luZXQ2YWRkcl9l dmVudA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpcmRtYV9u ZXRfbm90aWZpZXIgPSB7DQo+ICsJLm5vdGlmaWVyX2NhbGwgPSBpcmRtYV9uZXRfZXZlbnQNCj4g K307DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaXJkbWFfbmV0ZGV2aWNl X25vdGlmaWVyID0gew0KPiArCS5ub3RpZmllcl9jYWxsID0gaXJkbWFfbmV0ZGV2aWNlX2V2ZW50 DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHNldF9wcm90b2NvbF91c2VkIC0gc2V0IHByb3Rv Y29sX3VzZWQgYWdhaW5zdCBIVyBnZW5lcmF0aW9uIGFuZCByb2NlX2VuYSBmbGFnDQo+ICsgKiBA cmY6IFJETUEgUENJIGZ1bmN0aW9uDQo+ICsgKiBAcm9jZV9lbmE6IFJvQ0UgZW5hYmxlZCBmbGFn DQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIHNldF9wcm90b2NvbF91c2VkKHN0cnVjdCBpcmRtYV9w Y2lfZiAqcmYsIGJvb2wgcm9jZV9lbmEpDQo+ICt7DQo+ICsJc3dpdGNoIChyZi0+cmRtYV92ZXIp IHsNCj4gKwljYXNlIElSRE1BX0dFTl8yOg0KPiArCQlyZi0+cHJvdG9jb2xfdXNlZCA9IHJvY2Vf ZW5hID8gSVJETUFfUk9DRV9QUk9UT0NPTF9PTkxZIDoNCj4gKwkJCQkJICAgICAgIElSRE1BX0lX QVJQX1BST1RPQ09MX09OTFk7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgSVJETUFfR0VOXzE6DQo+ ICsJCXJmLT5wcm90b2NvbF91c2VkID0gSVJETUFfSVdBUlBfUFJPVE9DT0xfT05MWTsNCj4gKwkJ YnJlYWs7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICt2b2lkIGlyZG1hX2luaXRfcmZfY29uZmlnX3Bh cmFtcyhzdHJ1Y3QgaXJkbWFfcGNpX2YgKnJmKQ0KPiArew0KPiArCXN0cnVjdCBpcmRtYV9kbF9w cml2ICpkbF9wcml2Ow0KPiArDQo+ICsJcmYtPnJzcmNfcHJvZmlsZSA9IElSRE1BX0hNQ19QUk9G SUxFX0RFRkFVTFQ7DQo+ICsJZGxfcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmcmYtPmhkbC0+dmRl di0+ZGV2KTsNCj4gKwlyZi0+bGltaXRzX3NlbCA9IGRsX3ByaXYtPmxpbWl0c19zZWw7DQo+ICsJ c2V0X3Byb3RvY29sX3VzZWQocmYsIGRsX3ByaXYtPnJvY2VfZW5hKTsNCj4gKwlyZi0+cnN0X3Rv ID0gSVJETUFfUlNUX1RJTUVPVVRfSFo7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBpcmRtYV9k ZWluaXRfcmYgLSBDbGVhbiB1cCByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBSRg0KPiArICogQHJm OiBSRE1BIFBDSSBmdW5jdGlvbg0KPiArICovDQo+ICt2b2lkIGlyZG1hX2RlaW5pdF9yZihzdHJ1 Y3QgaXJkbWFfcGNpX2YgKnJmKQ0KPiArew0KPiArCWlyZG1hX2N0cmxfZGVpbml0X2h3KHJmKTsN Cj4gKwlpcmRtYV9kZWxfaGFuZGxlcihyZi0+aGRsKTsNCj4gKwlrZnJlZShyZi0+aGRsKTsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgKiBpcmRtYV9maW5kX2ljZV9oYW5kbGVyIC0gZmluZCBhIGhh bmRsZXIgZ2l2ZW4gYSBjbGllbnQgaW5mbw0KPiArICogQHBkZXY6IHBvaW50ZXIgdG8gcGNpIGRl diBpbmZvDQo+ICsgKi8NCj4gK3N0cnVjdCBpcmRtYV9oYW5kbGVyICppcmRtYV9maW5kX2hhbmRs ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQo+ICt7DQo+ICsJc3RydWN0IGlyZG1hX2hhbmRsZXIg KmhkbDsNCj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNh dmUoJmlyZG1hX2hhbmRsZXJfbG9jaywgZmxhZ3MpOw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkg KGhkbCwgJmlyZG1hX2hhbmRsZXJzLCBsaXN0KSB7DQo+ICsJCWlmIChoZGwtPnJmLnBkZXYtPmRl dmZuID09IHBkZXYtPmRldmZuICYmDQo+ICsJCSAgICBoZGwtPnJmLnBkZXYtPmJ1cy0+bnVtYmVy ID09IHBkZXYtPmJ1cy0+bnVtYmVyKSB7DQo+ICsJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZp cmRtYV9oYW5kbGVyX2xvY2ssIGZsYWdzKTsNCj4gKwkJCXJldHVybiBoZGw7DQo+ICsJCX0NCj4g Kwl9DQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJkbWFfaGFuZGxlcl9sb2NrLCBmbGFn cyk7DQo+ICsNCj4gKwlyZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpcmRt YV9hZGRfaGFuZGxlciAtIGFkZCBhIGhhbmRsZXIgdG8gdGhlIGxpc3QNCj4gKyAqIEBoZGw6IGhh bmRsZXIgdG8gYmUgYWRkZWQgdG8gdGhlIGhhbmRsZXIgbGlzdA0KPiArICovDQo+ICt2b2lkIGly ZG1hX2FkZF9oYW5kbGVyKHN0cnVjdCBpcmRtYV9oYW5kbGVyICpoZGwpDQo+ICt7DQo+ICsJdW5z aWduZWQgbG9uZyBmbGFnczsNCj4gKw0KPiArCXNwaW5fbG9ja19pcnFzYXZlKCZpcmRtYV9oYW5k bGVyX2xvY2ssIGZsYWdzKTsNCj4gKwlsaXN0X2FkZCgmaGRsLT5saXN0LCAmaXJkbWFfaGFuZGxl cnMpOw0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyZG1hX2hhbmRsZXJfbG9jaywgZmxh Z3MpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGlyZG1hX2RlbF9oYW5kbGVyIC0gZGVsZXRl IGEgaGFuZGxlciBmcm9tIHRoZSBsaXN0DQo+ICsgKiBAaGRsOiBoYW5kbGVyIHRvIGJlIGRlbGV0 ZWQgZnJvbSB0aGUgaGFuZGxlciBsaXN0DQo+ICsgKi8NCj4gK3ZvaWQgaXJkbWFfZGVsX2hhbmRs ZXIoc3RydWN0IGlyZG1hX2hhbmRsZXIgKmhkbCkNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIGZs YWdzOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmlyZG1hX2hhbmRsZXJfbG9jaywgZmxh Z3MpOw0KPiArCWxpc3RfZGVsKCZoZGwtPmxpc3QpOw0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmlyZG1hX2hhbmRsZXJfbG9jaywgZmxhZ3MpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAq IGlyZG1hX3JlZ2lzdGVyX25vdGlmaWVycyAtIHJlZ2lzdGVyIHRjcCBpcCBub3RpZmllcnMNCj4g KyAqLw0KPiArdm9pZCBpcmRtYV9yZWdpc3Rlcl9ub3RpZmllcnModm9pZCkNCj4gK3sNCj4gKwly ZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmaXJkbWFfaW5ldGFkZHJfbm90aWZpZXIpOw0KPiAr CXJlZ2lzdGVyX2luZXQ2YWRkcl9ub3RpZmllcigmaXJkbWFfaW5ldGFkZHI2X25vdGlmaWVyKTsN Cj4gKwlyZWdpc3Rlcl9uZXRldmVudF9ub3RpZmllcigmaXJkbWFfbmV0X25vdGlmaWVyKTsNCj4g KwlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlyZG1hX25ldGRldmljZV9ub3RpZmllcik7 DQo+ICt9DQo+ICsNCj4gK3ZvaWQgaXJkbWFfdW5yZWdpc3Rlcl9ub3RpZmllcnModm9pZCkNCj4g K3sNCj4gKwl1bnJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKCZpcmRtYV9uZXRfbm90aWZpZXIp Ow0KPiArCXVucmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJmlyZG1hX2luZXRhZGRyX25vdGlm aWVyKTsNCj4gKwl1bnJlZ2lzdGVyX2luZXQ2YWRkcl9ub3RpZmllcigmaXJkbWFfaW5ldGFkZHI2 X25vdGlmaWVyKTsNCj4gKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXJkbWFfbmV0 ZGV2aWNlX25vdGlmaWVyKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpcmRtYV9hZGRfaXB2 Nl9hZGRyIC0gYWRkIGlwdjYgYWRkcmVzcyB0byB0aGUgaHcgYXJwIHRhYmxlDQo+ICsgKiBAaXdk ZXY6IGlyZG1hIGRldmljZQ0KPiArICovDQo+ICtzdGF0aWMgdm9pZCBpcmRtYV9hZGRfaXB2Nl9h ZGRyKHN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2KQ0KPiArew0KPiArCXN0cnVjdCBuZXRfZGV2 aWNlICppcF9kZXY7DQo+ICsJc3RydWN0IGluZXQ2X2RldiAqaWRldjsNCj4gKwlzdHJ1Y3QgaW5l dDZfaWZhZGRyICppZnAsICp0bXA7DQo+ICsJdTMyIGxvY2FsX2lwYWRkcjZbNF07DQo+ICsNCj4g KwlyY3VfcmVhZF9sb2NrKCk7DQo+ICsJZm9yX2VhY2hfbmV0ZGV2X3JjdSAoJmluaXRfbmV0LCBp cF9kZXYpIHsNCj4gKwkJaWYgKCgocmRtYV92bGFuX2Rldl92bGFuX2lkKGlwX2RldikgPCAweEZG RkYgJiYNCj4gKwkJICAgICAgcmRtYV92bGFuX2Rldl9yZWFsX2RldihpcF9kZXYpID09IGl3ZGV2 LT5uZXRkZXYpIHx8DQo+ICsJCSAgICAgIGlwX2RldiA9PSBpd2Rldi0+bmV0ZGV2KSAmJiBpcF9k ZXYtPmZsYWdzICYgSUZGX1VQKSB7DQo+ICsJCQlpZGV2ID0gX19pbjZfZGV2X2dldChpcF9kZXYp Ow0KPiArCQkJaWYgKCFpZGV2KSB7DQo+ICsJCQkJZGV2X2VycihyZmRldl90b19kZXYoJml3ZGV2 LT5yZi0+c2NfZGV2KSwNCj4gKwkJCQkJImlwdjYgaW5ldCBkZXZpY2Ugbm90IGZvdW5kXG4iKTsN Cj4gKwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSAo aWZwLCB0bXAsICZpZGV2LT5hZGRyX2xpc3QsDQo+ICsJCQkJCQkgIGlmX2xpc3QpIHsNCj4gKwkJ CQlkZXZfZGJnKHJmZGV2X3RvX2RldigmaXdkZXYtPnJmLT5zY19kZXYpLA0KPiArCQkJCQkiSU5J VDogSVA9JXBJNiwgdmxhbl9pZD0lZCwgTUFDPSVwTVxuIiwNCj4gKwkJCQkJJmlmcC0+YWRkciwN Cj4gKwkJCQkJcmRtYV92bGFuX2Rldl92bGFuX2lkKGlwX2RldiksDQo+ICsJCQkJCWlwX2Rldi0+ ZGV2X2FkZHIpOw0KPiArDQo+ICsJCQkJaXJkbWFfY29weV9pcF9udG9obChsb2NhbF9pcGFkZHI2 LA0KPiArCQkJCQkJICAgIGlmcC0+YWRkci5pbjZfdS51Nl9hZGRyMzIpOw0KPiArCQkJCWlyZG1h X21hbmFnZV9hcnBfY2FjaGUoaXdkZXYtPnJmLA0KPiArCQkJCQkJICAgICAgIGlwX2Rldi0+ZGV2 X2FkZHIsDQo+ICsJCQkJCQkgICAgICAgbG9jYWxfaXBhZGRyNiwgZmFsc2UsDQo+ICsJCQkJCQkg ICAgICAgSVJETUFfQVJQX0FERCk7DQo+ICsJCQl9DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmN1X3Jl YWRfdW5sb2NrKCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaXJkbWFfYWRkX2lwdjRfYWRk ciAtIGFkZCBpcHY0IGFkZHJlc3MgdG8gdGhlIGh3IGFycCB0YWJsZQ0KPiArICogQGl3ZGV2OiBp cmRtYSBkZXZpY2UNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgaXJkbWFfYWRkX2lwdjRfYWRkcihz dHJ1Y3QgaXJkbWFfZGV2aWNlICppd2RldikNCj4gK3sNCj4gKwlzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2Ow0KPiArCXN0cnVjdCBpbl9kZXZpY2UgKmlkZXY7DQo+ICsJdTMyIGlwX2FkZHI7DQo+ICsN Cj4gKwlyY3VfcmVhZF9sb2NrKCk7DQo+ICsJZm9yX2VhY2hfbmV0ZGV2X3JjdSAoJmluaXRfbmV0 LCBkZXYpIHsNCj4gKwkJaWYgKCgocmRtYV92bGFuX2Rldl92bGFuX2lkKGRldikgPCAweEZGRkYg JiYNCj4gKwkJICAgICAgcmRtYV92bGFuX2Rldl9yZWFsX2RldihkZXYpID09IGl3ZGV2LT5uZXRk ZXYpIHx8DQo+ICsJCSAgICAgIGRldiA9PSBpd2Rldi0+bmV0ZGV2KSAmJiBkZXYtPmZsYWdzICYg SUZGX1VQKSB7DQo+ICsJCQljb25zdCBzdHJ1Y3QgaW5faWZhZGRyICppZmE7DQo+ICsNCj4gKwkJ CWlkZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldik7DQo+ICsJCQlpZiAoIWlkZXYpDQo+ICsJCQkJ Y29udGludWU7DQo+ICsJCQlpbl9kZXZfZm9yX2VhY2hfaWZhX3JjdShpZmEsIGlkZXYpIHsNCj4g KwkJCQlkZXZfZGJnKHJmZGV2X3RvX2RldigmaXdkZXYtPnJmLT5zY19kZXYpLA0KPiArCQkJCQki Q006IElQPSVwSTQsIHZsYW5faWQ9JWQsIE1BQz0lcE1cbiIsDQo+ICsJCQkJCSZpZmEtPmlmYV9h ZGRyZXNzLA0KPiArCQkJCQlyZG1hX3ZsYW5fZGV2X3ZsYW5faWQoZGV2KSwNCj4gKwkJCQkJZGV2 LT5kZXZfYWRkcik7DQo+ICsNCj4gKwkJCQlpcF9hZGRyID0gbnRvaGwoaWZhLT5pZmFfYWRkcmVz cyk7DQo+ICsJCQkJaXJkbWFfbWFuYWdlX2FycF9jYWNoZShpd2Rldi0+cmYsIGRldi0+ZGV2X2Fk ZHIsDQo+ICsJCQkJCQkgICAgICAgJmlwX2FkZHIsIHRydWUsDQo+ICsJCQkJCQkgICAgICAgSVJE TUFfQVJQX0FERCk7DQo+ICsJCQl9DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmN1X3JlYWRfdW5sb2Nr KCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaXJkbWFfYWRkX2lwIC0gYWRkIGlwIGFkZHJl c3Nlcw0KPiArICogQGl3ZGV2OiBpcmRtYSBkZXZpY2UNCj4gKyAqDQo+ICsgKiBBZGQgaXB2NC9p cHY2IGFkZHJlc3NlcyB0byB0aGUgYXJwIGNhY2hlDQo+ICsgKi8NCj4gK3ZvaWQgaXJkbWFfYWRk X2lwKHN0cnVjdCBpcmRtYV9kZXZpY2UgKml3ZGV2KQ0KPiArew0KPiArCWlyZG1hX2FkZF9pcHY0 X2FkZHIoaXdkZXYpOw0KPiArCWlyZG1hX2FkZF9pcHY2X2FkZHIoaXdkZXYpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IGlyZG1hX2RldmxpbmtfcnNyY19saW1pdHNfdmFsaWRhdGUoc3RydWN0 IGRldmxpbmsgKmRsLCB1MzIgaWQsDQo+ICsJCQkJCSAgICAgIHVuaW9uIGRldmxpbmtfcGFyYW1f dmFsdWUgdmFsLA0KPiArCQkJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sp DQo+ICt7DQo+ICsJdTggdmFsdWUgPSB2YWwudnU4Ow0KPiArDQo+ICsJaWYgKHZhbHVlID4gNSkg ew0KPiArCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAicmVzb3VyY2UgbGltaXRzIHNlbGVj dG9yIHJhbmdlIGlzICgwLTUpIik7DQo+ICsJCXJldHVybiAtRVJBTkdFOw0KPiArCX0NCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGlyZG1hX2RldmxpbmtfZW5h YmxlX3JvY2VfdmFsaWRhdGUoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsDQo+ICsJCQkJCSAg ICAgIHVuaW9uIGRldmxpbmtfcGFyYW1fdmFsdWUgdmFsLA0KPiArCQkJCQkgICAgICBzdHJ1Y3Qg bmV0bGlua19leHRfYWNrICpleHRhY2spDQo+ICt7DQo+ICsJc3RydWN0IGlyZG1hX2RsX3ByaXYg KnByaXYgPSBkZXZsaW5rX3ByaXYoZGwpOw0KPiArCWNvbnN0IHN0cnVjdCB2aXJ0YnVzX2Rldl9p ZCAqdmlkID0gcHJpdi0+dmRldi0+bWF0Y2hlZF9lbGVtZW50Ow0KPiArCXU4IGdlbl92ZXIgPSB2 aWQtPmRyaXZlcl9kYXRhOw0KPiArCWJvb2wgdmFsdWUgPSB2YWwudmJvb2w7DQo+ICsNCj4gKwlp ZiAodmFsdWUgJiYgZ2VuX3ZlciA9PSBJUkRNQV9HRU5fMSkgew0KPiArCQlOTF9TRVRfRVJSX01T R19NT0QoZXh0YWNrLCAiUm9DRSBub3Qgc3VwcG9ydGVkIG9uIGRldmljZSIpOw0KPiArCQlyZXR1 cm4gLUVPUE5PVFNVUFA7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgaXJkbWFfZGV2bGlua191cGxvYWRfY3R4X2dldChzdHJ1Y3QgZGV2bGluayAq ZGV2bGluaywgdTMyIGlkLA0KPiArCQkJCQlzdHJ1Y3QgZGV2bGlua19wYXJhbV9nc2V0X2N0eCAq Y3R4KQ0KPiArew0KPiArCWN0eC0+dmFsLnZib29sID0gaXJkbWFfdXBsb2FkX2NvbnRleHQ7DQo+ ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXJkbWFfZGV2bGlua191cGxv YWRfY3R4X3NldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgdTMyIGlkLA0KPiArCQkJCQlzdHJ1 Y3QgZGV2bGlua19wYXJhbV9nc2V0X2N0eCAqY3R4KQ0KPiArew0KPiArCWlyZG1hX3VwbG9hZF9j b250ZXh0ID0gY3R4LT52YWwudmJvb2w7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK2Vu dW0gaXJkbWFfZGxfcGFyYW1faWQgew0KPiArCUlSRE1BX0RFVkxJTktfUEFSQU1fSURfQkFTRSA9 IERFVkxJTktfUEFSQU1fR0VORVJJQ19JRF9NQVgsDQo+ICsJSVJETUFfREVWTElOS19QQVJBTV9J RF9MSU1JVFNfU0VMRUNUT1IsDQo+ICsJSVJETUFfREVWTElOS19QQVJBTV9JRF9VUExPQURfQ09O VEVYVCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19wYXJhbSBp cmRtYV9kZXZsaW5rX3BhcmFtc1tdID0gew0KPiArCS8qIENvbW1vbiAqLw0KPiArCURFVkxJTktf UEFSQU1fRFJJVkVSKElSRE1BX0RFVkxJTktfUEFSQU1fSURfTElNSVRTX1NFTEVDVE9SLA0KPiAr CQkJICAgICAicmVzb3VyY2VfbGltaXRzX3NlbGVjdG9yIiwgREVWTElOS19QQVJBTV9UWVBFX1U4 LA0KPiArCQkJICAgICAgQklUKERFVkxJTktfUEFSQU1fQ01PREVfRFJJVkVSSU5JVCksDQo+ICsJ CQkgICAgICBOVUxMLCBOVUxMLCBpcmRtYV9kZXZsaW5rX3JzcmNfbGltaXRzX3ZhbGlkYXRlKSwN Cj4gKwlERVZMSU5LX1BBUkFNX0RSSVZFUihJUkRNQV9ERVZMSU5LX1BBUkFNX0lEX1VQTE9BRF9D T05URVhULA0KPiArCQkJICAgICAidXBsb2FkX2NvbnRleHQiLCBERVZMSU5LX1BBUkFNX1RZUEVf Qk9PTCwNCj4gKwkJCSAgICAgQklUKERFVkxJTktfUEFSQU1fQ01PREVfUlVOVElNRSksDQo+ICsJ CQkgICAgIGlyZG1hX2RldmxpbmtfdXBsb2FkX2N0eF9nZXQsDQo+ICsJCQkgICAgIGlyZG1hX2Rl dmxpbmtfdXBsb2FkX2N0eF9zZXQsIE5VTEwpLA0KPiArCURFVkxJTktfUEFSQU1fR0VORVJJQyhF TkFCTEVfUk9DRSwgQklUKERFVkxJTktfUEFSQU1fQ01PREVfRFJJVkVSSU5JVCksDQo+ICsJCQkg ICAgICBOVUxMLCBOVUxMLCBpcmRtYV9kZXZsaW5rX2VuYWJsZV9yb2NlX3ZhbGlkYXRlKQ0KPiAr fTsNCj4gKw0KPiArc3RhdGljIGludCBpcmRtYV9kZXZsaW5rX3JlbG9hZF9kb3duKHN0cnVjdCBk ZXZsaW5rICpkZXZsaW5rLCBib29sIG5ldG5zX2NoYW5nZSwNCj4gKwkJCQkgICAgIHN0cnVjdCBu ZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykNCj4gK3sNCj4gKwlzdHJ1Y3QgaXJkbWFfZGxfcHJpdiAq cHJpdiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTsNCj4gKwljb25zdCBzdHJ1Y3QgdmlydGJ1c19k ZXZfaWQgKmlkID0gcHJpdi0+dmRldi0+bWF0Y2hlZF9lbGVtZW50Ow0KPiArCXU4IGdlbl92ZXIg PSBpZC0+ZHJpdmVyX2RhdGE7DQo+ICsNCj4gKwlzd2l0Y2ggKGdlbl92ZXIpIHsNCj4gKwljYXNl IElSRE1BX0dFTl8yOg0KPiArCQlpcmRtYV9yZW1vdmUocHJpdi0+dmRldik7DQo+ICsJCWJyZWFr Ow0KPiArCWNhc2UgSVJETUFfR0VOXzE6DQo+ICsJCWk0MGl3X3JlbW92ZShwcml2LT52ZGV2KTsN Cj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsJfQ0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaXJkbWFfZGV2bGlu a19yZWxvYWRfdXAoc3RydWN0IGRldmxpbmsgKmRldmxpbmssDQo+ICsJCQkJICAgc3RydWN0IG5l dGxpbmtfZXh0X2FjayAqZXh0YWNrKQ0KPiArew0KPiArCXN0cnVjdCBpcmRtYV9kbF9wcml2ICpw cml2ID0gZGV2bGlua19wcml2KGRldmxpbmspOw0KPiArCXVuaW9uIGRldmxpbmtfcGFyYW1fdmFs dWUgc2F2ZWRfdmFsdWU7DQo+ICsJY29uc3Qgc3RydWN0IHZpcnRidXNfZGV2X2lkICppZCA9IHBy aXYtPnZkZXYtPm1hdGNoZWRfZWxlbWVudDsNCg0KTGlrZSBpcmRtYV9wcm9iZSgpLCBzdHJ1Y3Qg aWlkY192aXJ0YnVzX29iamVjdCAqdm8gaXMgYWNjZXNpYmxlIGZvciB0aGUNCmdpdmVuIHByaXYu DQpQbGVhc2UgdXNlIHN0cnVjdCBpaWRjX3ZpcnRidXNfb2JqZWN0IGZvciBhbnkgc2hhcmluZyBi ZXR3ZWVuIHR3byBkcml2ZXJzLg0KbWF0Y2hlZF9lbGVtZW50IG1vZGlmaWNhdGlvbiBpbnNpZGUg dGhlIHZpcnRidXMgbWF0Y2goKSBmdW5jdGlvbiBhbmQNCmFjY2Vzc2luZyBwb2ludGVyIHRvIHNv bWUgZHJpdmVyIGRhdGEgYmV0d2VlbiB0d28gZHJpdmVyIHRocm91Z2ggdGhpcw0KbWF0Y2hlZF9l bGVtZW50IGlzIG5vdCBhcHByb3ByaWF0ZS4NCg==