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,URIBL_BLOCKED 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 22231C7618F for ; Fri, 26 Jul 2019 20:54:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B926A22BE8 for ; Fri, 26 Jul 2019 20:54:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="s7RFktwF" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726989AbfGZUyQ (ORCPT ); Fri, 26 Jul 2019 16:54:16 -0400 Received: from mail-eopbgr80053.outbound.protection.outlook.com ([40.107.8.53]:41941 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726184AbfGZUyQ (ORCPT ); Fri, 26 Jul 2019 16:54:16 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cEtb3YK3nsD00lvs8Ok/W7HuBPHXrV6SCNMUPhwRrMd7jaNvexIm4g7eRI8bcXeIwprSRyQXI4hO/LFlZP2DEQViq7E3HYS9IOviUkClhmO21iwfySfOILT4eiTESxg7gWG/KXaaya+RhiMgWKvQ5Lx6xCE9tTWLd1/Tj+yG2IGXLhBzHB+DdAt6pfD2pD6++t+RCavYZ+5ewmRpy8CHfbcXa5QoJdHvbwatasYYuqgVajxNcmrQqhCa9yNivBPgdJpmKJm6WdVn9ysPZx9PVIVQRojcReLsbt9XREEaVNxJIDD3XCfnVR9bOVIJlR33mrvu6v02fD6kaaYUW018xg== 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=JMYAOHkP7AtDysybNm3eymGQTwiq9GS3sBBIOdxMAsE=; b=is4TzzZvWyTz174LtRbP2CUBFzMoT+Q/bYK/bzYfiCfouFLV4KZCe4kA+pfrgum1mPm+2lRfdH8ezcH21DbgLBGLhShlgoih1tHCUVd0amT0x9gPcqe5z8QQdJVXZLNZl/wmrBaL5mCPW9EuKYGMiighvVG2q2V91lQMxfS/CAn6GSoQ6wE9Q+JpEfewGx2AE7vboDuMXViCxwrENFTCwBAwqXxK7RRz0oWbjg7zQdt38DqWkEzvshSe/URg3/BqQg1cq6FWSaBkv1Pn/fWgHXNs5G1/7Vns/C/lVQ9nJGej+aDDmR7frCY5CZSTHtqWl/EYUkR2dSZxICWVTa18Nw== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JMYAOHkP7AtDysybNm3eymGQTwiq9GS3sBBIOdxMAsE=; b=s7RFktwFYWaDYUfmCZ+7JaTw8/AmXY08rLhNXF+RaP9sUh0+nmYgIaFQEqVR591TV/lIGOojSFrsEIFYtccwXbxl2rbSb5653SPjrjSU1tl1+15INUdXiscqUqruGcaVJcgRgc4uuG4shVzTgWXYarzhspPd0z3axMXIwlZNgQs= Received: from DB6PR0501MB2759.eurprd05.prod.outlook.com (10.172.227.7) by DB6PR0501MB2535.eurprd05.prod.outlook.com (10.168.77.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2094.17; Fri, 26 Jul 2019 20:52:11 +0000 Received: from DB6PR0501MB2759.eurprd05.prod.outlook.com ([fe80::7148:ecd4:3a7f:f3f]) by DB6PR0501MB2759.eurprd05.prod.outlook.com ([fe80::7148:ecd4:3a7f:f3f%11]) with mapi id 15.20.2094.017; Fri, 26 Jul 2019 20:52:11 +0000 From: Saeed Mahameed To: "antoine.tenart@bootlin.com" , "richardcochran@gmail.com" , "davem@davemloft.net" , "UNGLinuxDriver@microchip.com" , "alexandre.belloni@bootlin.com" CC: "netdev@vger.kernel.org" , "thomas.petazzoni@bootlin.com" , "allan.nielsen@microchip.com" Subject: Re: [PATCH net-next v4 6/6] net: mscc: PTP Hardware Clock (PHC) support Thread-Topic: [PATCH net-next v4 6/6] net: mscc: PTP Hardware Clock (PHC) support Thread-Index: AQHVQvWD7zp7h0HpIU+Vx5q1n2Bqi6bdYg8A Date: Fri, 26 Jul 2019 20:52:10 +0000 Message-ID: <2b70e0fbebf1875c51272f3005271a9aec68f00f.camel@mellanox.com> References: <20190725142707.9313-1-antoine.tenart@bootlin.com> <20190725142707.9313-7-antoine.tenart@bootlin.com> In-Reply-To: <20190725142707.9313-7-antoine.tenart@bootlin.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.32.4 (3.32.4-1.fc30) authentication-results: spf=none (sender IP is ) smtp.mailfrom=saeedm@mellanox.com; x-originating-ip: [209.116.155.178] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d5f9f17b-6eae-4ae6-8141-08d7120b2177 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:DB6PR0501MB2535; x-ms-traffictypediagnostic: DB6PR0501MB2535: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:92; x-forefront-prvs: 01106E96F6 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(39860400002)(346002)(396003)(136003)(366004)(376002)(189003)(199004)(58126008)(486006)(71190400001)(71200400001)(14454004)(68736007)(8676002)(6436002)(99286004)(81166006)(14444005)(64756008)(54906003)(66446008)(81156014)(110136005)(6116002)(30864003)(3846002)(66066001)(476003)(446003)(316002)(2616005)(229853002)(305945005)(86362001)(7736002)(6486002)(11346002)(76176011)(478600001)(53946003)(25786009)(26005)(966005)(186003)(2501003)(118296001)(36756003)(2201001)(6306002)(6246003)(76116006)(66556008)(6506007)(66476007)(2906002)(66946007)(91956017)(8936002)(102836004)(256004)(6512007)(53936002)(4326008)(5660300002)(559001)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:DB6PR0501MB2535;H:DB6PR0501MB2759.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-message-info: Nx2JPwPp0ktNNJAytEQfpI/BElGwACw4kFxo+py0xbs77MuRZAe5WpSjBYoWq/5U2dsa4eEZhiA2lSQWiUn5f5BpliaS5ZDs4M4aFTE6RgN3IohjkWsVEleQcuXfXwnQ962YHTBfw8QRwyX6iDlFFMUXHkRZCxkt/TuwdHc2HDnwAzbJiP/tt/EZYIhowB/Lan2JhVxvu5pfotZTGq8cizlZgjXvhmxAr3uboBjIF8YCJPho2nZ1n6OszyKfap7rnLsmLkGNZUc8BOSGFRL5OnShlIopqo2rJiM4+Az+GkLpDTI8G1GsEddFmEQ4vWEWQ5cM1CncGShRQPWe9rHxQh/mCAbs3sVcHQ+wb8Yvi+Cgn7OAGCKhaSUqHtR791UQDmEvyEPOq1IeokkpSp6f/cV51FHpp69t00zHkU36yeQ= Content-Type: text/plain; charset="utf-8" Content-ID: <348AC9DEEDCF634FA40BF1298E133CDD@eurprd05.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: d5f9f17b-6eae-4ae6-8141-08d7120b2177 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Jul 2019 20:52:10.9665 (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: saeedm@mellanox.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0501MB2535 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org T24gVGh1LCAyMDE5LTA3LTI1IGF0IDE2OjI3ICswMjAwLCBBbnRvaW5lIFRlbmFydCB3cm90ZToN Cj4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIFBUUCBIYXJkd2FyZSBDbG9jayAoUEhDKSB0 byB0aGUgT2NlbG90DQo+IHN3aXRjaCBmb3IgYm90aCBQVFAgMS1zdGVwIGFuZCAyLXN0ZXAgbW9k ZXMuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBBbnRvaW5lIFRlbmFydCA8YW50b2luZS50ZW5hcnRA Ym9vdGxpbi5jb20+DQo+IC0tLQ0KPiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3Qu YyAgICAgICB8IDM5NA0KPiArKysrKysrKysrKysrKysrKysrKysrLQ0KPiAgZHJpdmVycy9uZXQv ZXRoZXJuZXQvbXNjYy9vY2Vsb3QuaCAgICAgICB8ICAzOSArKysNCj4gIGRyaXZlcnMvbmV0L2V0 aGVybmV0L21zY2Mvb2NlbG90X2JvYXJkLmMgfCAxMTEgKysrKysrLQ0KPiAgMyBmaWxlcyBjaGFu Z2VkLCA1MzYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdC5jDQo+IGIvZHJpdmVycy9uZXQvZXRo ZXJuZXQvbXNjYy9vY2Vsb3QuYw0KPiBpbmRleCBiNzFlNGVjYmU0NjkuLmIwOGZjZWM3M2EzMCAx MDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9vY2Vsb3QuYw0KPiArKysg Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdC5jDQo+IEBAIC0xNCw2ICsxNCw3IEBA DQo+ICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvbmV0ZGV2 aWNlLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvcGh5Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcHRw X2Nsb2NrX2tlcm5lbC5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPg0KPiAgI2luY2x1 ZGUgPGxpbnV4L2lvcG9sbC5oPg0KPiAgI2luY2x1ZGUgPG5ldC9hcnAuaD4NCj4gQEAgLTUzOCw3 ICs1MzksNyBAQCBzdGF0aWMgaW50IG9jZWxvdF9wb3J0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UN Cj4gKmRldikNCj4gICAqLw0KPiAgc3RhdGljIGludCBvY2Vsb3RfZ2VuX2lmaCh1MzIgKmlmaCwg c3RydWN0IGZyYW1lX2luZm8gKmluZm8pDQo+ICB7DQo+IC0JaWZoWzBdID0gSUZIX0lOSl9CWVBB U1M7DQo+ICsJaWZoWzBdID0gSUZIX0lOSl9CWVBBU1MgfCAoKDB4MWZmICYgaW5mby0+cmV3X29w KSA8PCAyMSk7DQo+ICAJaWZoWzFdID0gKDB4ZjAwICYgaW5mby0+cG9ydCkgPj4gODsNCj4gIAlp ZmhbMl0gPSAoMHhmZiAmIGluZm8tPnBvcnQpIDw8IDI0Ow0KPiAgCWlmaFszXSA9IChpbmZvLT50 YWdfdHlwZSA8PCAxNikgfCBpbmZvLT52aWQ7DQo+IEBAIC01NDgsNiArNTQ5LDcgQEAgc3RhdGlj IGludCBvY2Vsb3RfZ2VuX2lmaCh1MzIgKmlmaCwgc3RydWN0DQo+IGZyYW1lX2luZm8gKmluZm8p DQo+ICANCj4gIHN0YXRpYyBpbnQgb2NlbG90X3BvcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBzdHJ1Y3QgbmV0X2RldmljZQ0KPiAqZGV2KQ0KPiAgew0KPiArCXN0cnVjdCBza2Jfc2hhcmVk X2luZm8gKnNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsNCj4gIAlzdHJ1Y3Qgb2NlbG90X3BvcnQg KnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiAgCXN0cnVjdCBvY2Vsb3QgKm9jZWxvdCA9IHBv cnQtPm9jZWxvdDsNCj4gIAl1MzIgdmFsLCBpZmhbSUZIX0xFTl07DQo+IEBAIC01NjYsNiArNTY4 LDE0IEBAIHN0YXRpYyBpbnQgb2NlbG90X3BvcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0K PiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiAgCWluZm8ucG9ydCA9IEJJVChwb3J0LT5jaGlw X3BvcnQpOw0KPiAgCWluZm8udGFnX3R5cGUgPSBJRkhfVEFHX1RZUEVfQzsNCj4gIAlpbmZvLnZp ZCA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTsNCj4gKw0KPiArCS8qIENoZWNrIGlmIHRpbWVzdGFt cGluZyBpcyBuZWVkZWQgKi8NCj4gKwlpZiAob2NlbG90LT5wdHAgJiYgc2hpbmZvLT50eF9mbGFn cyAmIFNLQlRYX0hXX1RTVEFNUCkgew0KPiArCQlpbmZvLnJld19vcCA9IHBvcnQtPnB0cF9jbWQ7 DQo+ICsJCWlmIChwb3J0LT5wdHBfY21kID09IElGSF9SRVdfT1BfVFdPX1NURVBfUFRQKQ0KPiAr CQkJaW5mby5yZXdfb3AgfD0gKHBvcnQtPnRzX2lkICAlIDQpIDw8IDM7DQo+ICsJfQ0KPiArDQo+ ICAJb2NlbG90X2dlbl9pZmgoaWZoLCAmaW5mbyk7DQo+ICANCj4gIAlmb3IgKGkgPSAwOyBpIDwg SUZIX0xFTjsgaSsrKQ0KPiBAQCAtNTk2LDExICs2MDYsNTEgQEAgc3RhdGljIGludCBvY2Vsb3Rf cG9ydF94bWl0KHN0cnVjdCBza19idWZmDQo+ICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYp DQo+ICANCj4gIAlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsNCj4gIAlkZXYtPnN0YXRzLnR4X2J5 dGVzICs9IHNrYi0+bGVuOw0KPiAtCWRldl9rZnJlZV9za2JfYW55KHNrYik7DQo+ICsNCj4gKwlp ZiAob2NlbG90LT5wdHAgJiYgc2hpbmZvLT50eF9mbGFncyAmIFNLQlRYX0hXX1RTVEFNUCAmJg0K PiArCSAgICBwb3J0LT5wdHBfY21kID09IElGSF9SRVdfT1BfVFdPX1NURVBfUFRQKSB7DQo+ICsJ CXN0cnVjdCBvY2Vsb3Rfc2tiICpvc2tiID0NCj4gKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBv Y2Vsb3Rfc2tiKSwgR0ZQX0FUT01JQyk7DQo+ICsNCg0KRGV2aWNlIGRyaXZlcnMgbm9ybWFsbHkg cHJlIGFsbG9jYXRlIGRlc2NyaXB0b3IgaW5mbyByaW5nIGFycmF5IHRvDQphdm9pZCBkeW5hbWlj IGF0b21pYyBhbGxvY2F0aW9ucyBvZiBwcml2YXRlIGRhdGEgb24gZGF0YSBwYXRoLg0KDQo+ICsJ CW9za2ItPnNrYiA9IHNrYjsNCj4gKwkJb3NrYi0+aWQgPSBwb3J0LT50c19pZCAlIDQ7DQo+ICsJ CXBvcnQtPnRzX2lkKys7DQoNCm1pc3Npbmcgc2tiX3NoaW5mbyhza2IpLT50eF9mbGFncyB8PSBT S0JUWF9JTl9QUk9HUkVTUzsgPw0Kc2VlIDMuMSBIYXJkd2FyZSBUaW1lc3RhbXBpbmcgSW1wbGVt ZW50YXRpb246IERldmljZSBEcml2ZXJzDQpodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9Eb2N1 bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dA0KDQo+ICsNCj4gKwkJbGlzdF9h ZGRfdGFpbCgmb3NrYi0+aGVhZCwgJnBvcnQtPnNrYnMpOw0KPiArCX0gZWxzZSB7DQo+ICsJCWRl dl9rZnJlZV9za2JfYW55KHNrYik7DQo+ICsJfQ0KPiAgDQo+ICAJcmV0dXJuIE5FVERFVl9UWF9P SzsNCj4gIH0NCj4gIA0KPiArdm9pZCBvY2Vsb3RfZ2V0X2h3dGltZXN0YW1wKHN0cnVjdCBvY2Vs b3QgKm9jZWxvdCwgc3RydWN0IHRpbWVzcGVjNjQNCj4gKnRzKQ0KPiArew0KPiArCXVuc2lnbmVk IGxvbmcgZmxhZ3M7DQo+ICsJdTMyIHZhbDsNCj4gKw0KPiArCXNwaW5fbG9ja19pcnFzYXZlKCZv Y2Vsb3QtPnB0cF9jbG9ja19sb2NrLCBmbGFncyk7DQo+ICsNCj4gKwkvKiBSZWFkIGN1cnJlbnQg UFRQIHRpbWUgdG8gZ2V0IHNlY29uZHMgKi8NCj4gKwl2YWwgPSBvY2Vsb3RfcmVhZF9yaXgob2Nl bG90LCBQVFBfUElOX0NGRywgVE9EX0FDQ19QSU4pOw0KPiArDQo+ICsJdmFsICY9IH4oUFRQX1BJ Tl9DRkdfU1lOQyB8IFBUUF9QSU5fQ0ZHX0FDVElPTl9NQVNLIHwNCj4gUFRQX1BJTl9DRkdfRE9N KTsNCj4gKwl2YWwgfD0gUFRQX1BJTl9DRkdfQUNUSU9OKFBUUF9QSU5fQUNUSU9OX1NBVkUpOw0K PiArCW9jZWxvdF93cml0ZV9yaXgob2NlbG90LCB2YWwsIFBUUF9QSU5fQ0ZHLCBUT0RfQUNDX1BJ Tik7DQo+ICsJdHMtPnR2X3NlYyA9IG9jZWxvdF9yZWFkX3JpeChvY2Vsb3QsIFBUUF9QSU5fVE9E X1NFQ19MU0IsDQo+IFRPRF9BQ0NfUElOKTsNCj4gKw0KPiArCS8qIFJlYWQgcGFja2V0IEhXIHRp bWVzdGFtcCBmcm9tIEZJRk8gKi8NCj4gKwl2YWwgPSBvY2Vsb3RfcmVhZChvY2Vsb3QsIFNZU19Q VFBfVFhTVEFNUCk7DQo+ICsJdHMtPnR2X25zZWMgPSBTWVNfUFRQX1RYU1RBTVBfUFRQX1RYU1RB TVAodmFsKTsNCj4gKw0KPiArCS8qIFNlYyBoYXMgaW5jcmVtZW50ZWQgc2luY2UgdGhlIHRzIHdh cyByZWdpc3RlcmVkICovDQo+ICsJaWYgKCh0cy0+dHZfc2VjICYgMHgxKSAhPSAhISh2YWwgJg0K PiBTWVNfUFRQX1RYU1RBTVBfUFRQX1RYU1RBTVBfU0VDKSkNCj4gKwkJdHMtPnR2X3NlYy0tOw0K PiArDQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2NlbG90LT5wdHBfY2xvY2tfbG9jaywg ZmxhZ3MpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChvY2Vsb3RfZ2V0X2h3dGltZXN0YW1wKTsN Cj4gKw0KDQpXaHkgRVhQT1JUX1NZTUJPTD8gdGhpcyBpcyB0aGUgbGFzdCBwYXRjaCBhbmQgaXQg aXMgdG91Y2hpbmcgb25lDQpkcml2ZXIuDQoNCj4gIHN0YXRpYyBpbnQgb2NlbG90X21jX3Vuc3lu YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZA0KPiBjaGFyICphZGRyKQ0K PiAgew0KPiAgCXN0cnVjdCBvY2Vsb3RfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7DQo+ IEBAIC05MTcsNiArOTY3LDk3IEBAIHN0YXRpYyBpbnQgb2NlbG90X2dldF9wb3J0X3BhcmVudF9p ZChzdHJ1Y3QNCj4gbmV0X2RldmljZSAqZGV2LA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiAgDQo+ ICtzdGF0aWMgaW50IG9jZWxvdF9od3N0YW1wX2dldChzdHJ1Y3Qgb2NlbG90X3BvcnQgKnBvcnQs IHN0cnVjdCBpZnJlcQ0KPiAqaWZyKQ0KPiArew0KPiArCXN0cnVjdCBvY2Vsb3QgKm9jZWxvdCA9 IHBvcnQtPm9jZWxvdDsNCj4gKw0KPiArCXJldHVybiBjb3B5X3RvX3VzZXIoaWZyLT5pZnJfZGF0 YSwgJm9jZWxvdC0+aHd0c3RhbXBfY29uZmlnLA0KPiArCQkJICAgIHNpemVvZihvY2Vsb3QtPmh3 dHN0YW1wX2NvbmZpZykpID8gLUVGQVVMVA0KPiA6IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQgb2NlbG90X2h3c3RhbXBfc2V0KHN0cnVjdCBvY2Vsb3RfcG9ydCAqcG9ydCwgc3RydWN0IGlm cmVxDQo+ICppZnIpDQo+ICt7DQo+ICsJc3RydWN0IG9jZWxvdCAqb2NlbG90ID0gcG9ydC0+b2Nl bG90Ow0KPiArCXN0cnVjdCBod3RzdGFtcF9jb25maWcgY2ZnOw0KPiArDQo+ICsJaWYgKGNvcHlf ZnJvbV91c2VyKCZjZmcsIGlmci0+aWZyX2RhdGEsIHNpemVvZihjZmcpKSkNCj4gKwkJcmV0dXJu IC1FRkFVTFQ7DQo+ICsNCj4gKwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgKi8N Cj4gKwlpZiAoY2ZnLmZsYWdzKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCS8qIFR4 IHR5cGUgc2FuaXR5IGNoZWNrICovDQo+ICsJc3dpdGNoIChjZmcudHhfdHlwZSkgew0KPiArCWNh c2UgSFdUU1RBTVBfVFhfT046DQo+ICsJCXBvcnQtPnB0cF9jbWQgPSBJRkhfUkVXX09QX1RXT19T VEVQX1BUUDsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBIV1RTVEFNUF9UWF9PTkVTVEVQX1NZTkM6 DQo+ICsJCS8qIElGSF9SRVdfT1BfT05FX1NURVBfUFRQIHVwZGF0ZXMgdGhlIGNvcnJlY3Rpb25h bA0KPiBmaWVsZCwgd2UNCj4gKwkJICogbmVlZCB0byB1cGRhdGUgdGhlIG9yaWdpbiB0aW1lLg0K PiArCQkgKi8NCj4gKwkJcG9ydC0+cHRwX2NtZCA9IElGSF9SRVdfT1BfT1JJR0lOX1BUUDsNCj4g KwkJYnJlYWs7DQo+ICsJY2FzZSBIV1RTVEFNUF9UWF9PRkY6DQo+ICsJCXBvcnQtPnB0cF9jbWQg PSAwOw0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4g Kwl9DQo+ICsNCj4gKwltdXRleF9sb2NrKCZvY2Vsb3QtPnB0cF9sb2NrKTsNCj4gKw0KPiArCXN3 aXRjaCAoY2ZnLnJ4X2ZpbHRlcikgew0KPiArCWNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6DQo+ ICsJCWJyZWFrOw0KPiArCWNhc2UgSFdUU1RBTVBfRklMVEVSX0FMTDoNCj4gKwljYXNlIEhXVFNU QU1QX0ZJTFRFUl9TT01FOg0KPiArCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9FVkVO VDoNCj4gKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfU1lOQzoNCj4gKwljYXNlIEhX VFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVROg0KPiArCWNhc2UgSFdUU1RBTVBfRklM VEVSX05UUF9BTEw6DQo+ICsJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOg0K PiArCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOg0KPiArCWNhc2UgSFdUU1RB TVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6DQo+ICsJY2FzZSBIV1RTVEFNUF9GSUxURVJf UFRQX1YyX0wyX0VWRU5UOg0KPiArCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5D Og0KPiArCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVE6DQo+ICsJY2Fz ZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOg0KPiArCWNhc2UgSFdUU1RBTVBfRklMVEVS X1BUUF9WMl9TWU5DOg0KPiArCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6 DQo+ICsJCWNmZy5yeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOw0KPiAr CQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQltdXRleF91bmxvY2soJm9jZWxvdC0+cHRwX2xv Y2spOw0KPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBDb21taXQgYmFj ayB0aGUgcmVzdWx0ICYgc2F2ZSBpdCAqLw0KPiArCW1lbWNweSgmb2NlbG90LT5od3RzdGFtcF9j b25maWcsICZjZmcsIHNpemVvZihjZmcpKTsNCj4gKwltdXRleF91bmxvY2soJm9jZWxvdC0+cHRw X2xvY2spOw0KPiArDQo+ICsJcmV0dXJuIGNvcHlfdG9fdXNlcihpZnItPmlmcl9kYXRhLCAmY2Zn LCBzaXplb2YoY2ZnKSkgPyAtRUZBVUxUDQo+IDogMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBvY2Vsb3RfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIs DQo+IGludCBjbWQpDQo+ICt7DQo+ICsJc3RydWN0IG9jZWxvdF9wb3J0ICpwb3J0ID0gbmV0ZGV2 X3ByaXYoZGV2KTsNCj4gKwlzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QgPSBwb3J0LT5vY2Vsb3Q7DQo+ ICsNCj4gKwkvKiBUaGUgZnVuY3Rpb24gaXMgb25seSB1c2VkIGZvciBQVFAgb3BlcmF0aW9ucyBm b3Igbm93ICovDQo+ICsJaWYgKCFvY2Vsb3QtPnB0cCkNCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQ Ow0KPiArDQo+ICsJc3dpdGNoIChjbWQpIHsNCj4gKwljYXNlIFNJT0NTSFdUU1RBTVA6DQo+ICsJ CXJldHVybiBvY2Vsb3RfaHdzdGFtcF9zZXQocG9ydCwgaWZyKTsNCj4gKwljYXNlIFNJT0NHSFdU U1RBTVA6DQo+ICsJCXJldHVybiBvY2Vsb3RfaHdzdGFtcF9nZXQocG9ydCwgaWZyKTsNCj4gKwlk ZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICBz dGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG9jZWxvdF9wb3J0X25ldGRldl9vcHMg PSB7DQo+ICAJLm5kb19vcGVuCQkJPSBvY2Vsb3RfcG9ydF9vcGVuLA0KPiAgCS5uZG9fc3RvcAkJ CT0gb2NlbG90X3BvcnRfc3RvcCwNCj4gQEAgLTkzMyw2ICsxMDc0LDcgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBuZXRfZGV2aWNlX29wcw0KPiBvY2Vsb3RfcG9ydF9uZXRkZXZfb3BzID0gew0KPiAg CS5uZG9fc2V0X2ZlYXR1cmVzCQk9IG9jZWxvdF9zZXRfZmVhdHVyZXMsDQo+ICAJLm5kb19nZXRf cG9ydF9wYXJlbnRfaWQJCT0gb2NlbG90X2dldF9wb3J0X3BhcmVudF9pZCwNCj4gIAkubmRvX3Nl dHVwX3RjCQkJPSBvY2Vsb3Rfc2V0dXBfdGMsDQo+ICsJLm5kb19kb19pb2N0bAkJCT0gb2NlbG90 X2lvY3RsLA0KPiAgfTsNCj4gIA0KPiAgc3RhdGljIHZvaWQgb2NlbG90X2dldF9zdHJpbmdzKHN0 cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBzc2V0LA0KPiB1OCAqZGF0YSkNCj4gQEAgLTEw MTQsMTIgKzExNTYsMzcgQEAgc3RhdGljIGludCBvY2Vsb3RfZ2V0X3NzZXRfY291bnQoc3RydWN0 DQo+IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpDQo+ICAJcmV0dXJuIG9jZWxvdC0+bnVtX3N0 YXRzOw0KPiAgfQ0KPiAgDQo+ICtzdGF0aWMgaW50IG9jZWxvdF9nZXRfdHNfaW5mbyhzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LA0KPiArCQkJICAgICAgc3RydWN0IGV0aHRvb2xfdHNfaW5mbyAqaW5m bykNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2NlbG90X3BvcnQgKm9jZWxvdF9wb3J0ID0gbmV0ZGV2X3By aXYoZGV2KTsNCj4gKwlzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QgPSBvY2Vsb3RfcG9ydC0+b2NlbG90 Ow0KPiArDQo+ICsJaWYgKCFvY2Vsb3QtPnB0cCkNCj4gKwkJcmV0dXJuIGV0aHRvb2xfb3BfZ2V0 X3RzX2luZm8oZGV2LCBpbmZvKTsNCj4gKw0KPiArCWluZm8tPnBoY19pbmRleCA9IG9jZWxvdC0+ cHRwX2Nsb2NrID8NCj4gKwkJCSAgcHRwX2Nsb2NrX2luZGV4KG9jZWxvdC0+cHRwX2Nsb2NrKSA6 IC0xOw0KPiArCWluZm8tPnNvX3RpbWVzdGFtcGluZyB8PSBTT0ZfVElNRVNUQU1QSU5HX1RYX1NP RlRXQVJFIHwNCj4gKwkJCQkgU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSB8DQo+ICsJCQkJ IFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgfA0KPiArCQkJCSBTT0ZfVElNRVNUQU1QSU5HX1RY X0hBUkRXQVJFIHwNCj4gKwkJCQkgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSB8DQo+ICsJ CQkJIFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOw0KPiArCWluZm8tPnR4X3R5cGVzID0g QklUKEhXVFNUQU1QX1RYX09GRikgfCBCSVQoSFdUU1RBTVBfVFhfT04pIHwNCj4gKwkJCSBCSVQo SFdUU1RBTVBfVFhfT05FU1RFUF9TWU5DKTsNCj4gKwlpbmZvLT5yeF9maWx0ZXJzID0gQklUKEhX VFNUQU1QX0ZJTFRFUl9OT05FKSB8DQo+IEJJVChIV1RTVEFNUF9GSUxURVJfQUxMKTsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xf b3BzIG9jZWxvdF9ldGh0b29sX29wcyA9IHsNCj4gIAkuZ2V0X3N0cmluZ3MJCT0gb2NlbG90X2dl dF9zdHJpbmdzLA0KPiAgCS5nZXRfZXRodG9vbF9zdGF0cwk9IG9jZWxvdF9nZXRfZXRodG9vbF9z dGF0cywNCj4gIAkuZ2V0X3NzZXRfY291bnQJCT0gb2NlbG90X2dldF9zc2V0X2NvdW50LA0KPiAg CS5nZXRfbGlua19rc2V0dGluZ3MJPSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsDQo+ ICAJLnNldF9saW5rX2tzZXR0aW5ncwk9IHBoeV9ldGh0b29sX3NldF9saW5rX2tzZXR0aW5ncywN Cj4gKwkuZ2V0X3RzX2luZm8JCT0gb2NlbG90X2dldF90c19pbmZvLA0KPiAgfTsNCj4gIA0KPiAg c3RhdGljIGludCBvY2Vsb3RfcG9ydF9hdHRyX3N0cF9zdGF0ZV9zZXQoc3RydWN0IG9jZWxvdF9w b3J0DQo+ICpvY2Vsb3RfcG9ydCwNCj4gQEAgLTE2MjksNiArMTc5NiwxOTYgQEAgc3RydWN0IG5v dGlmaWVyX2Jsb2NrDQo+IG9jZWxvdF9zd2l0Y2hkZXZfYmxvY2tpbmdfbmIgX19yZWFkX21vc3Rs eSA9IHsNCj4gIH07DQo+ICBFWFBPUlRfU1lNQk9MKG9jZWxvdF9zd2l0Y2hkZXZfYmxvY2tpbmdf bmIpOw0KPiAgDQo+ICtpbnQgb2NlbG90X3B0cF9nZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19p bmZvICpwdHAsIHN0cnVjdA0KPiB0aW1lc3BlYzY0ICp0cykNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2Nl bG90ICpvY2Vsb3QgPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3Qgb2NlbG90LA0KPiBwdHBfaW5m byk7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKwl0aW1lNjRfdCBzOw0KPiArCXUzMiB2 YWw7DQo+ICsJczY0IG5zOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJm9jZWxvdC0+cHRw X2Nsb2NrX2xvY2ssIGZsYWdzKTsNCj4gKw0KPiArCXZhbCA9IG9jZWxvdF9yZWFkX3JpeChvY2Vs b3QsIFBUUF9QSU5fQ0ZHLCBUT0RfQUNDX1BJTik7DQo+ICsJdmFsICY9IH4oUFRQX1BJTl9DRkdf U1lOQyB8IFBUUF9QSU5fQ0ZHX0FDVElPTl9NQVNLIHwNCj4gUFRQX1BJTl9DRkdfRE9NKTsNCj4g Kwl2YWwgfD0gUFRQX1BJTl9DRkdfQUNUSU9OKFBUUF9QSU5fQUNUSU9OX1NBVkUpOw0KPiArCW9j ZWxvdF93cml0ZV9yaXgob2NlbG90LCB2YWwsIFBUUF9QSU5fQ0ZHLCBUT0RfQUNDX1BJTik7DQo+ ICsNCj4gKwlzID0gb2NlbG90X3JlYWRfcml4KG9jZWxvdCwgUFRQX1BJTl9UT0RfU0VDX01TQiwg VE9EX0FDQ19QSU4pICYNCj4gMHhmZmZmOw0KPiArCXMgPDw9IDMyOw0KPiArCXMgKz0gb2NlbG90 X3JlYWRfcml4KG9jZWxvdCwgUFRQX1BJTl9UT0RfU0VDX0xTQiwgVE9EX0FDQ19QSU4pOw0KPiAr CW5zID0gb2NlbG90X3JlYWRfcml4KG9jZWxvdCwgUFRQX1BJTl9UT0RfTlNFQywgVE9EX0FDQ19Q SU4pOw0KPiArDQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2NlbG90LT5wdHBfY2xvY2tf bG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJLyogRGVhbCB3aXRoIG5lZ2F0aXZlIHZhbHVlcyAqLw0K PiArCWlmIChucyA+PSAweDNmZmZmZmYwICYmIG5zIDw9IDB4M2ZmZmZmZmYpIHsNCj4gKwkJcy0t Ow0KPiArCQlucyAmPSAweGY7DQo+ICsJCW5zICs9IDk5OTk5OTk4NDsNCj4gKwl9DQo+ICsNCj4g KwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYzY0KHRzLCBzLCBucyk7DQo+ICsJcmV0dXJuIDA7DQo+ ICt9DQo+ICtFWFBPUlRfU1lNQk9MKG9jZWxvdF9wdHBfZ2V0dGltZTY0KTsNCj4gKw0KPiArc3Rh dGljIGludCBvY2Vsb3RfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwN Cj4gKwkJCQljb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpDQo+ICt7DQo+ICsJc3RydWN0IG9j ZWxvdCAqb2NlbG90ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IG9jZWxvdCwNCj4gcHRwX2lu Zm8pOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJdTMyIHZhbDsNCj4gKw0KPiArCXNw aW5fbG9ja19pcnFzYXZlKCZvY2Vsb3QtPnB0cF9jbG9ja19sb2NrLCBmbGFncyk7DQo+ICsNCj4g Kwl2YWwgPSBvY2Vsb3RfcmVhZF9yaXgob2NlbG90LCBQVFBfUElOX0NGRywgVE9EX0FDQ19QSU4p Ow0KPiArCXZhbCAmPSB+KFBUUF9QSU5fQ0ZHX1NZTkMgfCBQVFBfUElOX0NGR19BQ1RJT05fTUFT SyB8DQo+IFBUUF9QSU5fQ0ZHX0RPTSk7DQo+ICsJdmFsIHw9IFBUUF9QSU5fQ0ZHX0FDVElPTihQ VFBfUElOX0FDVElPTl9JRExFKTsNCj4gKw0KPiArCW9jZWxvdF93cml0ZV9yaXgob2NlbG90LCB2 YWwsIFBUUF9QSU5fQ0ZHLCBUT0RfQUNDX1BJTik7DQo+ICsNCj4gKwlvY2Vsb3Rfd3JpdGVfcml4 KG9jZWxvdCwgbG93ZXJfMzJfYml0cyh0cy0+dHZfc2VjKSwNCj4gUFRQX1BJTl9UT0RfU0VDX0xT QiwNCj4gKwkJCSBUT0RfQUNDX1BJTik7DQo+ICsJb2NlbG90X3dyaXRlX3JpeChvY2Vsb3QsIHVw cGVyXzMyX2JpdHModHMtPnR2X3NlYyksDQo+IFBUUF9QSU5fVE9EX1NFQ19NU0IsDQo+ICsJCQkg VE9EX0FDQ19QSU4pOw0KPiArCW9jZWxvdF93cml0ZV9yaXgob2NlbG90LCB0cy0+dHZfbnNlYywg UFRQX1BJTl9UT0RfTlNFQywNCj4gVE9EX0FDQ19QSU4pOw0KPiArDQo+ICsJdmFsID0gb2NlbG90 X3JlYWRfcml4KG9jZWxvdCwgUFRQX1BJTl9DRkcsIFRPRF9BQ0NfUElOKTsNCj4gKwl2YWwgJj0g fihQVFBfUElOX0NGR19TWU5DIHwgUFRQX1BJTl9DRkdfQUNUSU9OX01BU0sgfA0KPiBQVFBfUElO X0NGR19ET00pOw0KPiArCXZhbCB8PSBQVFBfUElOX0NGR19BQ1RJT04oUFRQX1BJTl9BQ1RJT05f TE9BRCk7DQo+ICsNCj4gKwlvY2Vsb3Rfd3JpdGVfcml4KG9jZWxvdCwgdmFsLCBQVFBfUElOX0NG RywgVE9EX0FDQ19QSU4pOw0KPiArDQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2NlbG90 LT5wdHBfY2xvY2tfbG9jaywgZmxhZ3MpOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW50IG9jZWxvdF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwg czY0IGRlbHRhKQ0KPiArew0KPiArCWlmIChkZWx0YSA+IC0oTlNFQ19QRVJfU0VDIC8gMikgJiYg ZGVsdGEgPCAoTlNFQ19QRVJfU0VDIC8gMikpDQo+IHsNCj4gKwkJc3RydWN0IG9jZWxvdCAqb2Nl bG90ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0DQo+IG9jZWxvdCwgcHRwX2luZm8pOw0KPiAr CQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCQl1MzIgdmFsOw0KPiArDQo+ICsJCXNwaW5fbG9j a19pcnFzYXZlKCZvY2Vsb3QtPnB0cF9jbG9ja19sb2NrLCBmbGFncyk7DQo+ICsNCj4gKwkJdmFs ID0gb2NlbG90X3JlYWRfcml4KG9jZWxvdCwgUFRQX1BJTl9DRkcsDQo+IFRPRF9BQ0NfUElOKTsN Cj4gKwkJdmFsICY9IH4oUFRQX1BJTl9DRkdfU1lOQyB8IFBUUF9QSU5fQ0ZHX0FDVElPTl9NQVNL IHwNCj4gUFRQX1BJTl9DRkdfRE9NKTsNCj4gKwkJdmFsIHw9IFBUUF9QSU5fQ0ZHX0FDVElPTihQ VFBfUElOX0FDVElPTl9JRExFKTsNCj4gKw0KPiArCQlvY2Vsb3Rfd3JpdGVfcml4KG9jZWxvdCwg dmFsLCBQVFBfUElOX0NGRywNCj4gVE9EX0FDQ19QSU4pOw0KPiArDQo+ICsJCW9jZWxvdF93cml0 ZV9yaXgob2NlbG90LCAwLCBQVFBfUElOX1RPRF9TRUNfTFNCLA0KPiBUT0RfQUNDX1BJTik7DQo+ ICsJCW9jZWxvdF93cml0ZV9yaXgob2NlbG90LCAwLCBQVFBfUElOX1RPRF9TRUNfTVNCLA0KPiBU T0RfQUNDX1BJTik7DQo+ICsJCW9jZWxvdF93cml0ZV9yaXgob2NlbG90LCBkZWx0YSwgUFRQX1BJ Tl9UT0RfTlNFQywNCj4gVE9EX0FDQ19QSU4pOw0KPiArDQo+ICsJCXZhbCA9IG9jZWxvdF9yZWFk X3JpeChvY2Vsb3QsIFBUUF9QSU5fQ0ZHLA0KPiBUT0RfQUNDX1BJTik7DQo+ICsJCXZhbCAmPSB+ KFBUUF9QSU5fQ0ZHX1NZTkMgfCBQVFBfUElOX0NGR19BQ1RJT05fTUFTSyB8DQo+IFBUUF9QSU5f Q0ZHX0RPTSk7DQo+ICsJCXZhbCB8PSBQVFBfUElOX0NGR19BQ1RJT04oUFRQX1BJTl9BQ1RJT05f REVMVEEpOw0KPiArDQo+ICsJCW9jZWxvdF93cml0ZV9yaXgob2NlbG90LCB2YWwsIFBUUF9QSU5f Q0ZHLA0KPiBUT0RfQUNDX1BJTik7DQo+ICsNCj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm b2NlbG90LT5wdHBfY2xvY2tfbG9jaywgZmxhZ3MpOw0KPiArCX0gZWxzZSB7DQo+ICsJCS8qIEZh bGwgYmFjayB1c2luZyBvY2Vsb3RfcHRwX3NldHRpbWU2NCB3aGljaCBpcyBub3QNCj4gZXhhY3Qu ICovDQo+ICsJCXN0cnVjdCB0aW1lc3BlYzY0IHRzOw0KPiArCQl1NjQgbm93Ow0KPiArDQo+ICsJ CW9jZWxvdF9wdHBfZ2V0dGltZTY0KHB0cCwgJnRzKTsNCj4gKw0KPiArCQlub3cgPSBrdGltZV90 b19ucyh0aW1lc3BlYzY0X3RvX2t0aW1lKHRzKSk7DQo+ICsJCXRzID0gbnNfdG9fdGltZXNwZWM2 NChub3cgKyBkZWx0YSk7DQo+ICsNCj4gKwkJb2NlbG90X3B0cF9zZXR0aW1lNjQocHRwLCAmdHMp Ow0KPiArCX0NCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBvY2Vsb3Rf cHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcNCj4gc2NhbGVkX3Bw bSkNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QgPSBjb250YWluZXJfb2YocHRwLCBz dHJ1Y3Qgb2NlbG90LA0KPiBwdHBfaW5mbyk7DQo+ICsJdTMyIHVuaXQgPSAwLCBkaXJlY3Rpb24g PSAwOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJdTY0IGFkaiA9IDA7DQo+ICsNCj4g KwlzcGluX2xvY2tfaXJxc2F2ZSgmb2NlbG90LT5wdHBfY2xvY2tfbG9jaywgZmxhZ3MpOw0KPiAr DQo+ICsJaWYgKCFzY2FsZWRfcHBtKQ0KPiArCQlnb3RvIGRpc2FibGVfYWRqOw0KPiArDQo+ICsJ aWYgKHNjYWxlZF9wcG0gPCAwKSB7DQo+ICsJCWRpcmVjdGlvbiA9IFBUUF9DRkdfQ0xLX0FESl9D RkdfRElSOw0KPiArCQlzY2FsZWRfcHBtID0gLXNjYWxlZF9wcG07DQo+ICsJfQ0KPiArDQo+ICsJ YWRqID0gUFNFQ19QRVJfU0VDIDw8IDE2Ow0KPiArCWRvX2RpdihhZGosIHNjYWxlZF9wcG0pOw0K PiArCWRvX2RpdihhZGosIDEwMDApOw0KPiArDQo+ICsJLyogSWYgdGhlIGFkanVzdG1lbnQgdmFs dWUgaXMgdG9vIGxhcmdlLCB1c2UgbnMgaW5zdGVhZCAqLw0KPiArCWlmIChhZGogPj0gKDFMIDw8 IDMwKSkgew0KPiArCQl1bml0ID0gUFRQX0NGR19DTEtfQURKX0ZSRVFfTlM7DQo+ICsJCWRvX2Rp dihhZGosIDEwMDApOw0KPiArCX0NCj4gKw0KPiArCS8qIFN0aWxsIHRvbyBiaWcgKi8NCj4gKwlp ZiAoYWRqID49ICgxTCA8PCAzMCkpDQo+ICsJCWdvdG8gZGlzYWJsZV9hZGo7DQo+ICsNCj4gKwlv Y2Vsb3Rfd3JpdGUob2NlbG90LCB1bml0IHwgYWRqLCBQVFBfQ0xLX0NGR19BREpfRlJFUSk7DQo+ ICsJb2NlbG90X3dyaXRlKG9jZWxvdCwgUFRQX0NGR19DTEtfQURKX0NGR19FTkEgfCBkaXJlY3Rp b24sDQo+ICsJCSAgICAgUFRQX0NMS19DRkdfQURKX0NGRyk7DQo+ICsNCj4gKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZvY2Vsb3QtPnB0cF9jbG9ja19sb2NrLCBmbGFncyk7DQo+ICsJcmV0dXJu IDA7DQo+ICsNCj4gK2Rpc2FibGVfYWRqOg0KPiArCW9jZWxvdF93cml0ZShvY2Vsb3QsIDAsIFBU UF9DTEtfQ0ZHX0FESl9DRkcpOw0KPiArDQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2Nl bG90LT5wdHBfY2xvY2tfbG9jaywgZmxhZ3MpOw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgc3RydWN0IHB0cF9jbG9ja19pbmZvIG9jZWxvdF9wdHBfY2xvY2tfaW5mbyA9IHsN Cj4gKwkub3duZXIJCT0gVEhJU19NT0RVTEUsDQo+ICsJLm5hbWUJCT0gIm9jZWxvdCBwdHAiLA0K PiArCS5tYXhfYWRqCT0gMHg3ZmZmZmZmZiwNCj4gKwkubl9hbGFybQk9IDAsDQo+ICsJLm5fZXh0 X3RzCT0gMCwNCj4gKwkubl9wZXJfb3V0CT0gMCwNCj4gKwkubl9waW5zCQk9IDAsDQo+ICsJLnBw cwkJPSAwLA0KPiArCS5nZXR0aW1lNjQJPSBvY2Vsb3RfcHRwX2dldHRpbWU2NCwNCj4gKwkuc2V0 dGltZTY0CT0gb2NlbG90X3B0cF9zZXR0aW1lNjQsDQo+ICsJLmFkanRpbWUJPSBvY2Vsb3RfcHRw X2FkanRpbWUsDQo+ICsJLmFkamZpbmUJPSBvY2Vsb3RfcHRwX2FkamZpbmUsDQo+ICt9Ow0KPiAr DQo+ICtzdGF0aWMgaW50IG9jZWxvdF9pbml0X3RpbWVzdGFtcChzdHJ1Y3Qgb2NlbG90ICpvY2Vs b3QpDQo+ICt7DQo+ICsJb2NlbG90LT5wdHBfaW5mbyA9IG9jZWxvdF9wdHBfY2xvY2tfaW5mbzsN Cj4gKwlvY2Vsb3QtPnB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3Rlcigmb2NlbG90LT5wdHBf aW5mbywNCj4gb2NlbG90LT5kZXYpOw0KPiArCWlmIChJU19FUlIob2NlbG90LT5wdHBfY2xvY2sp KQ0KPiArCQlyZXR1cm4gUFRSX0VSUihvY2Vsb3QtPnB0cF9jbG9jayk7DQo+ICsJLyogQ2hlY2sg aWYgUEhDIHN1cHBvcnQgaXMgbWlzc2luZyBhdCB0aGUgY29uZmlndXJhdGlvbiBsZXZlbA0KPiAq Lw0KPiArCWlmICghb2NlbG90LT5wdHBfY2xvY2spDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJ b2NlbG90X3dyaXRlKG9jZWxvdCwgU1lTX1BUUF9DRkdfUFRQX1NUQU1QX1dJRCgzMCksDQo+IFNZ U19QVFBfQ0ZHKTsNCj4gKwlvY2Vsb3Rfd3JpdGUob2NlbG90LCAweGZmZmZmZmZmLCBBTkFfVEFC TEVTX1BUUF9JRF9MT1cpOw0KPiArCW9jZWxvdF93cml0ZShvY2Vsb3QsIDB4ZmZmZmZmZmYsIEFO QV9UQUJMRVNfUFRQX0lEX0hJR0gpOw0KPiArDQo+ICsJb2NlbG90X3dyaXRlKG9jZWxvdCwgUFRQ X0NGR19NSVNDX1BUUF9FTiwgUFRQX0NGR19NSVNDKTsNCj4gKw0KPiArCS8qIFRoZXJlIGlzIG5v IGRldmljZSByZWNvbmZpZ3VyYXRpb24sIFBUUCBSeCBzdGFtcGluZyBpcw0KPiBhbHdheXMNCj4g KwkgKiBlbmFibGVkLg0KPiArCSAqLw0KPiArCW9jZWxvdC0+aHd0c3RhbXBfY29uZmlnLnJ4X2Zp bHRlciA9DQo+IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ7DQo+ICsNCj4gKwlyZXR1cm4g MDsNCj4gK30NCj4gKw0KPiAgaW50IG9jZWxvdF9wcm9iZV9wb3J0KHN0cnVjdCBvY2Vsb3QgKm9j ZWxvdCwgdTggcG9ydCwNCj4gIAkJICAgICAgdm9pZCBfX2lvbWVtICpyZWdzLA0KPiAgCQkgICAg ICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQ0KPiBAQCAtMTY2MSw2ICsyMDE4LDggQEAgaW50IG9j ZWxvdF9wcm9iZV9wb3J0KHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCwgdTgNCj4gcG9ydCwNCj4gIAlv Y2Vsb3RfbWFjdF9sZWFybihvY2Vsb3QsIFBHSURfQ1BVLCBkZXYtPmRldl9hZGRyLCBvY2Vsb3Rf cG9ydC0NCj4gPnB2aWQsDQo+ICAJCQkgIEVOVFJZVFlQRV9MT0NLRUQpOw0KPiAgDQo+ICsJSU5J VF9MSVNUX0hFQUQoJm9jZWxvdF9wb3J0LT5za2JzKTsNCj4gKw0KPiAgCWVyciA9IHJlZ2lzdGVy X25ldGRldihkZXYpOw0KPiAgCWlmIChlcnIpIHsNCj4gIAkJZGV2X2VycihvY2Vsb3QtPmRldiwg InJlZ2lzdGVyX25ldGRldiBmYWlsZWRcbiIpOw0KPiBAQCAtMTY4NCw3ICsyMDQzLDcgQEAgRVhQ T1JUX1NZTUJPTChvY2Vsb3RfcHJvYmVfcG9ydCk7DQo+ICBpbnQgb2NlbG90X2luaXQoc3RydWN0 IG9jZWxvdCAqb2NlbG90KQ0KPiAgew0KPiAgCXUzMiBwb3J0Ow0KPiAtCWludCBpLCBjcHUgPSBv Y2Vsb3QtPm51bV9waHlzX3BvcnRzOw0KPiArCWludCBpLCByZXQsIGNwdSA9IG9jZWxvdC0+bnVt X3BoeXNfcG9ydHM7DQo+ICAJY2hhciBxdWV1ZV9uYW1lWzMyXTsNCj4gIA0KPiAgCW9jZWxvdC0+ bGFncyA9IGRldm1fa2NhbGxvYyhvY2Vsb3QtPmRldiwgb2NlbG90LQ0KPiA+bnVtX3BoeXNfcG9y dHMsDQo+IEBAIC0xNjk5LDYgKzIwNTgsOCBAQCBpbnQgb2NlbG90X2luaXQoc3RydWN0IG9jZWxv dCAqb2NlbG90KQ0KPiAgCQlyZXR1cm4gLUVOT01FTTsNCj4gIA0KPiAgCW11dGV4X2luaXQoJm9j ZWxvdC0+c3RhdHNfbG9jayk7DQo+ICsJbXV0ZXhfaW5pdCgmb2NlbG90LT5wdHBfbG9jayk7DQo+ ICsJc3Bpbl9sb2NrX2luaXQoJm9jZWxvdC0+cHRwX2Nsb2NrX2xvY2spOw0KPiAgCXNucHJpbnRm KHF1ZXVlX25hbWUsIHNpemVvZihxdWV1ZV9uYW1lKSwgIiVzLXN0YXRzIiwNCj4gIAkJIGRldl9u YW1lKG9jZWxvdC0+ZGV2KSk7DQo+ICAJb2NlbG90LT5zdGF0c19xdWV1ZSA9DQo+IGNyZWF0ZV9z aW5nbGV0aHJlYWRfd29ya3F1ZXVlKHF1ZXVlX25hbWUpOw0KPiBAQCAtMTgxMiwxNSArMjE3Myw0 MiBAQCBpbnQgb2NlbG90X2luaXQoc3RydWN0IG9jZWxvdCAqb2NlbG90KQ0KPiAgCUlOSVRfREVM QVlFRF9XT1JLKCZvY2Vsb3QtPnN0YXRzX3dvcmssDQo+IG9jZWxvdF9jaGVja19zdGF0c193b3Jr KTsNCj4gIAlxdWV1ZV9kZWxheWVkX3dvcmsob2NlbG90LT5zdGF0c19xdWV1ZSwgJm9jZWxvdC0+ c3RhdHNfd29yaywNCj4gIAkJCSAgIE9DRUxPVF9TVEFUU19DSEVDS19ERUxBWSk7DQo+ICsNCj4g KwlpZiAob2NlbG90LT5wdHApIHsNCj4gKwkJcmV0ID0gb2NlbG90X2luaXRfdGltZXN0YW1wKG9j ZWxvdCk7DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJCWRldl9lcnIob2NlbG90LT5kZXYsDQo+ICsJ CQkJIlRpbWVzdGFtcCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOw0KPiArCQkJcmV0dXJuIHJl dDsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiAgRVhQT1JUX1NZ TUJPTChvY2Vsb3RfaW5pdCk7DQo+ICANCj4gIHZvaWQgb2NlbG90X2RlaW5pdChzdHJ1Y3Qgb2Nl bG90ICpvY2Vsb3QpDQo+ICB7DQo+ICsJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOw0KPiAr CXN0cnVjdCBvY2Vsb3RfcG9ydCAqcG9ydDsNCj4gKwlzdHJ1Y3Qgb2NlbG90X3NrYiAqZW50cnk7 DQo+ICsJaW50IGk7DQo+ICsNCj4gIAlkZXN0cm95X3dvcmtxdWV1ZShvY2Vsb3QtPnN0YXRzX3F1 ZXVlKTsNCj4gIAltdXRleF9kZXN0cm95KCZvY2Vsb3QtPnN0YXRzX2xvY2spOw0KPiAgCW9jZWxv dF9hY2VfZGVpbml0KCk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgb2NlbG90LT5udW1fcGh5 c19wb3J0czsgaSsrKSB7DQo+ICsJCXBvcnQgPSBvY2Vsb3QtPnBvcnRzW2ldOw0KPiArDQo+ICsJ CWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJnBvcnQtPnNrYnMpIHsNCj4gKwkJCWVudHJ5 ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBvY2Vsb3Rfc2tiLA0KPiBoZWFkKTsNCj4gKw0KPiAr CQkJbGlzdF9kZWwocG9zKTsNCj4gKwkJCWRldl9rZnJlZV9za2JfYW55KGVudHJ5LT5za2IpOw0K PiArCQkJa2ZyZWUoZW50cnkpOw0KPiArCQl9DQo+ICsJfQ0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJP TChvY2Vsb3RfZGVpbml0KTsNCj4gIA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJu ZXQvbXNjYy9vY2Vsb3QuaA0KPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90LmgN Cj4gaW5kZXggNTE1ZGVlNmZhOGE2Li5lNDA3NzNjMDFhNDQgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90LmgNCj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvbXNjYy9vY2Vsb3QuaA0KPiBAQCAtMTEsOSArMTEsMTEgQEANCj4gICNpbmNsdWRlIDxsaW51 eC9iaXRvcHMuaD4NCj4gICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPg0KPiAgI2luY2x1 ZGUgPGxpbnV4L2lmX3ZsYW4uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+DQo+ ICAjaW5jbHVkZSA8bGludXgvcGh5Lmg+DQo+ICAjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPg0K PiAgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L3B0cF9jbG9ja19rZXJuZWwuaD4NCj4gICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCj4gIA0K PiAgI2luY2x1ZGUgIm9jZWxvdF9hbmEuaCINCj4gQEAgLTM5LDYgKzQxLDggQEANCj4gIA0KPiAg I2RlZmluZSBPQ0VMT1RfU1RBVFNfQ0hFQ0tfREVMQVkgKDIgKiBIWikNCj4gIA0KPiArI2RlZmlu ZSBPQ0VMT1RfUFRQX1FVRVVFX1NaCTEyOA0KPiArDQo+ICAjZGVmaW5lIElGSF9MRU4gNA0KPiAg DQo+ICBzdHJ1Y3QgZnJhbWVfaW5mbyB7DQo+IEBAIC00Niw2ICs1MCw4IEBAIHN0cnVjdCBmcmFt ZV9pbmZvIHsNCj4gIAl1MTYgcG9ydDsNCj4gIAl1MTYgdmlkOw0KPiAgCXU4IHRhZ190eXBlOw0K PiArCXUxNiByZXdfb3A7DQo+ICsJdTMyIHRpbWVzdGFtcDsJLyogcmV3X3ZhbCAqLw0KPiAgfTsN Cj4gIA0KPiAgI2RlZmluZSBJRkhfSU5KX0JZUEFTUwlCSVQoMzEpDQo+IEBAIC01NCw2ICs2MCwx MiBAQCBzdHJ1Y3QgZnJhbWVfaW5mbyB7DQo+ICAjZGVmaW5lIElGSF9UQUdfVFlQRV9DIDANCj4g ICNkZWZpbmUgSUZIX1RBR19UWVBFX1MgMQ0KPiAgDQo+ICsjZGVmaW5lIElGSF9SRVdfT1BfTk9P UAkJCTB4MA0KPiArI2RlZmluZSBJRkhfUkVXX09QX0RTQ1AJCQkweDENCj4gKyNkZWZpbmUgSUZI X1JFV19PUF9PTkVfU1RFUF9QVFAJCTB4Mg0KPiArI2RlZmluZSBJRkhfUkVXX09QX1RXT19TVEVQ X1BUUAkJMHgzDQo+ICsjZGVmaW5lIElGSF9SRVdfT1BfT1JJR0lOX1BUUAkJMHg1DQo+ICsNCj4g ICNkZWZpbmUgT0NFTE9UX1NQRUVEXzI1MDAgMA0KPiAgI2RlZmluZSBPQ0VMT1RfU1BFRURfMTAw MCAxDQo+ICAjZGVmaW5lIE9DRUxPVF9TUEVFRF8xMDAgIDINCj4gQEAgLTQwMSw2ICs0MTMsMTMg QEAgZW51bSBvY2Vsb3RfcmVnZmllbGQgew0KPiAgCVJFR0ZJRUxEX01BWA0KPiAgfTsNCj4gIA0K PiArZW51bSBvY2Vsb3RfY2xrX3BpbnMgew0KPiArCUFMVF9QUFNfUElOCT0gMSwNCj4gKwlFWFRf Q0xLX1BJTiwNCj4gKwlBTFRfTERTVF9QSU4sDQo+ICsJVE9EX0FDQ19QSU4NCj4gK307DQo+ICsN Cj4gIHN0cnVjdCBvY2Vsb3RfbXVsdGljYXN0IHsNCj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7 DQo+ICAJdW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXTsNCj4gQEAgLTQ1MCw2ICs0NjksMTMg QEAgc3RydWN0IG9jZWxvdCB7DQo+ICAJdTY0ICpzdGF0czsNCj4gIAlzdHJ1Y3QgZGVsYXllZF93 b3JrIHN0YXRzX3dvcms7DQo+ICAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN0YXRzX3F1ZXVl Ow0KPiArDQo+ICsJdTggcHRwOjE7DQo+ICsJc3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrOw0K PiArCXN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfaW5mbzsNCj4gKwlzdHJ1Y3QgaHd0c3RhbXBf Y29uZmlnIGh3dHN0YW1wX2NvbmZpZzsNCj4gKwlzdHJ1Y3QgbXV0ZXggcHRwX2xvY2s7IC8qIFBy b3RlY3RzIHRoZSBQVFAgaW50ZXJmYWNlIHN0YXRlICovDQo+ICsJc3BpbmxvY2tfdCBwdHBfY2xv Y2tfbG9jazsgLyogUHJvdGVjdHMgdGhlIFBUUCBjbG9jayAqLw0KPiAgfTsNCj4gIA0KPiAgc3Ry dWN0IG9jZWxvdF9wb3J0IHsNCj4gQEAgLTQ3Myw2ICs0OTksMTYgQEAgc3RydWN0IG9jZWxvdF9w b3J0IHsNCj4gIAlzdHJ1Y3QgcGh5ICpzZXJkZXM7DQo+ICANCj4gIAlzdHJ1Y3Qgb2NlbG90X3Bv cnRfdGMgdGM7DQo+ICsNCj4gKwl1OCBwdHBfY21kOw0KPiArCXN0cnVjdCBsaXN0X2hlYWQgc2ti czsNCj4gKwl1OCB0c19pZDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBvY2Vsb3Rfc2tiIHsNCj4g KwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7DQo+ICsJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCj4gKwl1 OCBpZDsNCj4gIH07DQo+ICANCj4gIHUzMiBfX29jZWxvdF9yZWFkX2l4KHN0cnVjdCBvY2Vsb3Qg Km9jZWxvdCwgdTMyIHJlZywgdTMyIG9mZnNldCk7DQo+IEBAIC01MTcsNCArNTUzLDcgQEAgZXh0 ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayBvY2Vsb3RfbmV0ZGV2aWNlX25iOw0KPiAgZXh0ZXJu IHN0cnVjdCBub3RpZmllcl9ibG9jayBvY2Vsb3Rfc3dpdGNoZGV2X25iOw0KPiAgZXh0ZXJuIHN0 cnVjdCBub3RpZmllcl9ibG9jayBvY2Vsb3Rfc3dpdGNoZGV2X2Jsb2NraW5nX25iOw0KPiAgDQo+ ICtpbnQgb2NlbG90X3B0cF9nZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0 cnVjdA0KPiB0aW1lc3BlYzY0ICp0cyk7DQo+ICt2b2lkIG9jZWxvdF9nZXRfaHd0aW1lc3RhbXAo c3RydWN0IG9jZWxvdCAqb2NlbG90LCBzdHJ1Y3QgdGltZXNwZWM2NA0KPiAqdHMpOw0KPiArDQo+ ICAjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21zY2Mvb2NlbG90 X2JvYXJkLmMNCj4gYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9ib2FyZC5jDQo+ IGluZGV4IGRmOGQxNTk5NGE4OS4uMGIxNGU3MTEwZTdmIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJz L25ldC9ldGhlcm5ldC9tc2NjL29jZWxvdF9ib2FyZC5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2V0 aGVybmV0L21zY2Mvb2NlbG90X2JvYXJkLmMNCj4gQEAgLTMxLDYgKzMxLDggQEAgc3RhdGljIGlu dCBvY2Vsb3RfcGFyc2VfaWZoKHUzMiAqX2lmaCwgc3RydWN0DQo+IGZyYW1lX2luZm8gKmluZm8p DQo+ICANCj4gIAlpbmZvLT5sZW4gPSBPQ0VMT1RfQlVGRkVSX0NFTExfU1ogKiB3bGVuICsgbGxl biAtIDgwOw0KPiAgDQo+ICsJaW5mby0+dGltZXN0YW1wID0gSUZIX0VYVFJBQ1RfQklURklFTEQ2 NChpZmhbMF0sIDIxLCAzMik7DQo+ICsNCj4gIAlpbmZvLT5wb3J0ID0gSUZIX0VYVFJBQ1RfQklU RklFTEQ2NChpZmhbMV0sIDQzLCA0KTsNCj4gIA0KPiAgCWluZm8tPnRhZ190eXBlID0gSUZIX0VY VFJBQ1RfQklURklFTEQ2NChpZmhbMV0sIDE2LCAgMSk7DQo+IEBAIC05OCw3ICsxMDAsMTEgQEAg c3RhdGljIGlycXJldHVybl90IG9jZWxvdF94dHJfaXJxX2hhbmRsZXIoaW50DQo+IGlycSwgdm9p ZCAqYXJnKQ0KPiAgCQlpbnQgc3osIGxlbiwgYnVmX2xlbjsNCj4gIAkJdTMyIGlmaFs0XTsNCj4g IAkJdTMyIHZhbDsNCj4gLQkJc3RydWN0IGZyYW1lX2luZm8gaW5mbzsNCj4gKwkJc3RydWN0IGZy YW1lX2luZm8gaW5mbyA9IHt9Ow0KPiArCQlzdHJ1Y3QgdGltZXNwZWM2NCB0czsNCj4gKwkJc3Ry dWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpzaGh3dHN0YW1wczsNCj4gKwkJdTY0IHRvZF9pbl9u czsNCj4gKwkJdTY0IGZ1bGxfdHNfaW5fbnM7DQoNCnJldmVyc2UgeG1hcyB0cmVlLg0KDQo+ICAN Cj4gIAkJZm9yIChpID0gMDsgaSA8IElGSF9MRU47IGkrKykgew0KPiAgCQkJZXJyID0gb2NlbG90 X3J4X2ZyYW1lX3dvcmQob2NlbG90LCBncnAsIHRydWUsDQo+ICZpZmhbaV0pOw0KPiBAQCAtMTQ1 LDYgKzE1MSwyMiBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qgb2NlbG90X3h0cl9pcnFfaGFuZGxlcihp bnQNCj4gaXJxLCB2b2lkICphcmcpDQo+ICAJCQlicmVhazsNCj4gIAkJfQ0KPiAgDQo+ICsJCWlm IChvY2Vsb3QtPnB0cCkgew0KPiArCQkJb2NlbG90X3B0cF9nZXR0aW1lNjQoJm9jZWxvdC0+cHRw X2luZm8sICZ0cyk7DQo+ICsNCj4gKwkJCXRvZF9pbl9ucyA9IGt0aW1lX3NldCh0cy50dl9zZWMs IHRzLnR2X25zZWMpOw0KPiArCQkJaWYgKCh0b2RfaW5fbnMgJiAweGZmZmZmZmZmKSA8IGluZm8u dGltZXN0YW1wKQ0KPiArCQkJCWZ1bGxfdHNfaW5fbnMgPSAoKCh0b2RfaW5fbnMgPj4gMzIpIC0N Cj4gMSkgPDwgMzIpIHwNCj4gKwkJCQkJCWluZm8udGltZXN0YW1wOw0KPiArCQkJZWxzZQ0KPiAr CQkJCWZ1bGxfdHNfaW5fbnMgPSAodG9kX2luX25zICYNCj4gR0VOTUFTS19VTEwoNjMsIDMyKSkg fA0KPiArCQkJCQkJaW5mby50aW1lc3RhbXA7DQo+ICsNCj4gKwkJCXNoaHd0c3RhbXBzID0gc2ti X2h3dHN0YW1wcyhza2IpOw0KPiArCQkJbWVtc2V0KHNoaHd0c3RhbXBzLCAwLCBzaXplb2Yoc3Ry dWN0DQo+IHNrYl9zaGFyZWRfaHd0c3RhbXBzKSk7DQo+ICsJCQlzaGh3dHN0YW1wcy0+aHd0c3Rh bXAgPSBmdWxsX3RzX2luX25zOw0KDQp0aGUgcmlnaHQgd2F5IHRvIHNldCB0aGUgdGltZXN0YW1w IGlzIGJ5IGNhbGxpbmc6IA0Kc2tiX3RzdGFtcF90eChza2IsICZ0c3RhbXApOw0KDQo+ICsJCX0N Cj4gKw0KPiAgCQkvKiBFdmVyeXRoaW5nIHdlIHNlZSBvbiBhbiBpbnRlcmZhY2UgdGhhdCBpcyBp biB0aGUgSFcNCj4gYnJpZGdlDQo+ICAJCSAqIGhhcyBhbHJlYWR5IGJlZW4gZm9yd2FyZGVkLg0K PiAgCQkgKi8NCj4gQEAgLTE2NCw2ICsxODYsNzAgQEAgc3RhdGljIGlycXJldHVybl90IG9jZWxv dF94dHJfaXJxX2hhbmRsZXIoaW50DQo+IGlycSwgdm9pZCAqYXJnKQ0KPiAgCXJldHVybiBJUlFf SEFORExFRDsNCj4gIH0NCj4gIA0KPiArc3RhdGljIGlycXJldHVybl90IG9jZWxvdF9wdHBfcmR5 X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykNCj4gK3sNCj4gKwlpbnQgYnVkZ2V0ID0g T0NFTE9UX1BUUF9RVUVVRV9TWjsNCj4gKwlzdHJ1Y3Qgb2NlbG90ICpvY2Vsb3QgPSBhcmc7DQo+ ICsNCj4gKwlkbyB7DQo+ICsJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1w czsNCj4gKwkJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOw0KPiArCQlzdHJ1Y3Qgc2tfYnVm ZiAqc2tiID0gTlVMTDsNCj4gKwkJc3RydWN0IG9jZWxvdF9za2IgKmVudHJ5Ow0KPiArCQlzdHJ1 Y3Qgb2NlbG90X3BvcnQgKnBvcnQ7DQo+ICsJCXN0cnVjdCB0aW1lc3BlYzY0IHRzOw0KPiArCQl1 MzIgdmFsLCBpZCwgdHhwb3J0Ow0KPiArDQo+ICsJCS8qIFByZXZlbnQgZnJvbSBpbmZpbml0ZSBs b29wICovDQo+ICsJCWlmICh1bmxpa2VseSghLS1idWRnZXQpKQ0KPiArCQkJYnJlYWs7DQoNCndo ZW4gYnVkZ2V0IGdldHMgdG8gMSB5b3UgYnJlYWssIHdoaWxlIHlvdSBzdGlsbCBoYXZlIDEgdG8g Z28gOikNCg0KSSBhc3N1bWUgT0NFTE9UX1BUUF9RVUVVRV9TWiA+IDAsIGp1c3QgbWFrZSB0aGlz IHRoZSBsb29wIGNvbmRpdGlvbiBhbmQNCmF2b2lkIGluZmluaXRlIGxvb3BzIGJ5IGRlc2lnbi4N Cg0KPiArDQo+ICsJCXZhbCA9IG9jZWxvdF9yZWFkKG9jZWxvdCwgU1lTX1BUUF9TVEFUVVMpOw0K PiArDQo+ICsJCS8qIENoZWNrIGlmIGEgdGltZXN0YW1wIGNhbiBiZSByZXRyaWV2ZWQgKi8NCj4g KwkJaWYgKCEodmFsICYgU1lTX1BUUF9TVEFUVVNfUFRQX01FU1NfVkxEKSkNCj4gKwkJCWJyZWFr Ow0KPiArDQo+ICsJCVdBUk5fT04odmFsICYgU1lTX1BUUF9TVEFUVVNfUFRQX09WRkwpOw0KPiAr DQo+ICsJCS8qIFJldHJpZXZlIHRoZSB0cyBJRCBhbmQgVHggcG9ydCAqLw0KPiArCQlpZCA9IFNZ U19QVFBfU1RBVFVTX1BUUF9NRVNTX0lEX1godmFsKTsNCj4gKwkJdHhwb3J0ID0gU1lTX1BUUF9T VEFUVVNfUFRQX01FU1NfVFhQT1JUX1godmFsKTsNCj4gKw0KPiArCQkvKiBSZXRyaWV2ZSBpdHMg YXNzb2NpYXRlZCBza2IgKi8NCj4gKwkJcG9ydCA9IG9jZWxvdC0+cG9ydHNbdHhwb3J0XTsNCj4g Kw0KPiArCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZwb3J0LT5za2JzKSB7DQo+ICsJ CQllbnRyeSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgb2NlbG90X3NrYiwNCj4gaGVhZCk7DQo+ ICsJCQlpZiAoZW50cnktPmlkICE9IGlkKQ0KPiArCQkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCQlz a2IgPSBlbnRyeS0+c2tiOw0KPiArDQo+ICsJCQlsaXN0X2RlbChwb3MpOw0KPiArCQkJa2ZyZWUo ZW50cnkpOw0KPiArCQl9DQo+ICsNCj4gKwkJLyogTmV4dCB0cyAqLw0KPiArCQlvY2Vsb3Rfd3Jp dGUob2NlbG90LCBTWVNfUFRQX05YVF9QVFBfTlhULCBTWVNfUFRQX05YVCk7DQo+ICsNCj4gKwkJ aWYgKHVubGlrZWx5KCFza2IpKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJLyogR2V0IHRo ZSBoL3cgdGltZXN0YW1wICovDQo+ICsJCW9jZWxvdF9nZXRfaHd0aW1lc3RhbXAob2NlbG90LCAm dHMpOw0KPiArDQo+ICsJCS8qIFNldCB0aGUgdGltZXN0YW1wIGludG8gdGhlIHNrYiAqLw0KPiAr CQltZW1zZXQoJnNoaHd0c3RhbXBzLCAwLCBzaXplb2Yoc2hod3RzdGFtcHMpKTsNCj4gKwkJc2ho d3RzdGFtcHMuaHd0c3RhbXAgPSBrdGltZV9zZXQodHMudHZfc2VjLA0KPiB0cy50dl9uc2VjKTsN Cj4gKwkJc2tiX3RzdGFtcF90eChza2IsICZzaGh3dHN0YW1wcyk7DQo+ICsNCj4gKwkJZGV2X2tm cmVlX3NrYl9hbnkoc2tiKTsNCj4gKwl9IHdoaWxlICh0cnVlKTsNCj4gKw0KPiArCXJldHVybiBJ UlFfSEFORExFRDsNCj4gK30NCj4gKw0KPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgbXNjY19vY2Vsb3RfbWF0Y2hbXSA9IHsNCj4gIAl7IC5jb21wYXRpYmxlID0gIm1zY2MsdnNj NzUxNC1zd2l0Y2giIH0sDQo+ICAJeyB9DQo+IEBAIC0xNzIsOCArMjU4LDggQEAgTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgbXNjY19vY2Vsb3RfbWF0Y2gpOw0KPiAgDQo+ICBzdGF0aWMgaW50IG1z Y2Nfb2NlbG90X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICB7DQo+IC0J aW50IGVyciwgaXJxOw0KPiAgCXVuc2lnbmVkIGludCBpOw0KPiArCWludCBlcnIsIGlycV94dHIs IGlycV9wdHBfcmR5Ow0KPiAgCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zf bm9kZTsNCj4gIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnRzLCAqcG9ydG5wOw0KPiAgCXN0cnVj dCBvY2Vsb3QgKm9jZWxvdDsNCg0KcmV2ZXJzZSB4bWFzIHRyZWUNCg0KPiBAQCAtMjMyLDE2ICsz MTgsMzEgQEAgc3RhdGljIGludCBtc2NjX29jZWxvdF9wcm9iZShzdHJ1Y3QNCj4gcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQ0KPiAgCWlmIChlcnIpDQo+ICAJCXJldHVybiBlcnI7DQo+ICANCj4gLQlp cnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAieHRyIik7DQo+IC0JaWYgKGlycSA8 IDApDQo+ICsJaXJxX3h0ciA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJ4dHIiKTsN Cj4gKwlpZiAoaXJxX3h0ciA8IDApDQo+ICAJCXJldHVybiAtRU5PREVWOw0KPiAgDQo+IC0JZXJy ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmcGRldi0+ZGV2LCBpcnEsIE5VTEwsDQo+ICsJ ZXJyID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmcGRldi0+ZGV2LCBpcnFfeHRyLCBOVUxM LA0KPiAgCQkJCQlvY2Vsb3RfeHRyX2lycV9oYW5kbGVyLA0KPiBJUlFGX09ORVNIT1QsDQo+ICAJ CQkJCSJmcmFtZSBleHRyYWN0aW9uIiwgb2NlbG90KTsNCj4gIAlpZiAoZXJyKQ0KPiAgCQlyZXR1 cm4gZXJyOw0KPiAgDQo+ICsNCj4gKwlpcnFfcHRwX3JkeSA9IHBsYXRmb3JtX2dldF9pcnFfYnlu YW1lKHBkZXYsICJwdHBfcmR5Iik7DQo+ICsJaWYgKGlycV9wdHBfcmR5ID4gMCkgew0KPiArCQll cnIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZwZGV2LT5kZXYsDQo+IGlycV9wdHBfcmR5 LCBOVUxMLA0KPiArCQkJCQkJb2NlbG90X3B0cF9yZHlfaXJxX2hhbmQNCj4gbGVyLA0KPiArCQkJ CQkJSVJRRl9PTkVTSE9ULCAicHRwDQo+IHJlYWR5IiwNCj4gKwkJCQkJCW9jZWxvdCk7DQo+ICsJ CWlmIChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJCS8qIENoZWNrIGlmIHdlIGNh biBzdXBwb3J0IFBUUCAqLw0KPiArCQlpZiAob2NlbG90LT50YXJnZXRzW1BUUF0pDQo+ICsJCQlv Y2Vsb3QtPnB0cCA9IDE7DQo+ICsJfQ0KPiArDQo+ICAJcmVnbWFwX2ZpZWxkX3dyaXRlKG9jZWxv dC0+cmVnZmllbGRzW1NZU19SRVNFVF9DRkdfTUVNX0lOSVRdLA0KPiAxKTsNCj4gIAlyZWdtYXBf ZmllbGRfd3JpdGUob2NlbG90LT5yZWdmaWVsZHNbU1lTX1JFU0VUX0NGR19NRU1fRU5BXSwNCj4g MSk7DQo+ICANCg==