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=-8.3 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 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 2684BC11D3D for ; Thu, 27 Feb 2020 20:45:18 +0000 (UTC) Received: from ml01.01.org (ml01.01.org [198.145.21.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E6836246A0 for ; Thu, 27 Feb 2020 20:45:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E6836246A0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.ibm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvdimm-bounces@lists.01.org Received: from ml01.vlan13.01.org (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 7FBA810FC3635; Thu, 27 Feb 2020 12:46:09 -0800 (PST) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com; envelope-from=fbarrat@linux.ibm.com; receiver= Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id CC7F610FC362C for ; Thu, 27 Feb 2020 12:46:07 -0800 (PST) Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 01RKjDQa103834 for ; Thu, 27 Feb 2020 15:45:15 -0500 Received: from e06smtp01.uk.ibm.com (e06smtp01.uk.ibm.com [195.75.94.97]) by mx0a-001b2d01.pphosted.com with ESMTP id 2ydq6jqe8t-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 27 Feb 2020 15:45:15 -0500 Received: from localhost by e06smtp01.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 27 Feb 2020 20:44:53 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp01.uk.ibm.com (192.168.101.131) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Thu, 27 Feb 2020 20:44:45 -0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 01RKihpi60620978 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 27 Feb 2020 20:44:43 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 66D85A4040; Thu, 27 Feb 2020 20:44:43 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4D19DA404D; Thu, 27 Feb 2020 20:44:42 +0000 (GMT) Received: from pic2.home (unknown [9.145.9.51]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Thu, 27 Feb 2020 20:44:42 +0000 (GMT) Subject: Re: [PATCH v3 10/27] powerpc: Add driver for OpenCAPI Persistent Memory To: "Alastair D'Silva" , alastair@d-silva.org References: <20200221032720.33893-1-alastair@au1.ibm.com> <20200221032720.33893-11-alastair@au1.ibm.com> From: Frederic Barrat Date: Thu, 27 Feb 2020 21:44:42 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <20200221032720.33893-11-alastair@au1.ibm.com> Content-Language: en-US X-TM-AS-GCONF: 00 x-cbid: 20022720-4275-0000-0000-000003A61EC8 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20022720-4276-0000-0000-000038BA7C15 Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-02-27_07:2020-02-26,2020-02-27 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 adultscore=0 spamscore=0 impostorscore=0 suspectscore=2 bulkscore=0 mlxlogscore=999 clxscore=1015 priorityscore=1501 malwarescore=0 mlxscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2002270141 Message-ID-Hash: GATTZPVOPJBJZPDQ3CTBPKS7L7BAG7CE X-Message-ID-Hash: GATTZPVOPJBJZPDQ3CTBPKS7L7BAG7CE X-MailFrom: fbarrat@linux.ibm.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation CC: "Aneesh Kumar K . V" , Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , Andrew Donnellan , Arnd Bergmann , Greg Kroah-Hartman , Andrew Morton , Mauro Carvalho Chehab , "David S. Miller" , Rob Herring , Anton Blanchard , Krzysztof Kozlowski , Mahesh Salgaonkar , Madhavan Srinivasan , =?UTF-8?Q?C=c3=a9dric_Le_Goater?= , Anju T Sudhakar , Hari Bathini , Thomas Gleixner , Greg Kurz , Nicholas Piggin , Masahiro Yamada , Alexey Kardashevskiy , linux-kernel@vger.kernel.org, linuxppc-de v@lists.ozlabs.org, linux-nvdimm@lists.01.org, linux-mm@kvack.org X-Mailman-Version: 3.1.1 Precedence: list List-Id: "Linux-nvdimm developer list." Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 DQoNCkxlIDIxLzAyLzIwMjAgw6AgMDQ6MjcsIEFsYXN0YWlyIEQnU2lsdmEgYSDDqWNyaXTCoDoN Cj4gRnJvbTogQWxhc3RhaXIgRCdTaWx2YSA8YWxhc3RhaXJAZC1zaWx2YS5vcmc+DQo+IA0KPiBU aGlzIGRyaXZlciBleHBvc2VzIExQQyBtZW1vcnkgb24gT3BlbkNBUEkgcG1lbSBjYXJkcw0KPiBh cyBhbiBOVkRJTU0sIGFsbG93aW5nIHRoZSBleGlzdGluZyBudnJhbSBpbmZyYXN0cnVjdHVyZQ0K PiB0byBiZSB1c2VkLg0KPiANCj4gTmFtZXNwYWNlIG1ldGFkYXRhIGlzIHN0b3JlZCBvbiB0aGUg bWVkaWEgaXRzZWxmLCBzbw0KPiBzY21fcmVzZXJ2ZV9tZXRhZGF0YSgpIG1hcHMgMSBzZWN0aW9u J3Mgd29ydGggb2YgUE1FTSBzdG9yYWdlDQo+IGF0IHRoZSBzdGFydCB0byBob2xkIHRoaXMuIFRo ZSByZXN0IG9mIHRoZSBQTUVNIHJhbmdlIGlzIHJlZ2lzdGVyZWQNCj4gd2l0aCBsaWJudmRpbW0g YXMgYW4gbnZkaW1tLiBzY21fbmRjdGxfY29uZmlnX3JlYWQvd3JpdGUvc2l6ZSgpIHByb3ZpZGUN Cj4gY2FsbGJhY2tzIHRvIGxpYm52ZGltbSB0byBhY2Nlc3MgdGhlIG1ldGFkYXRhLg0KPiANCj4g U2lnbmVkLW9mZi1ieTogQWxhc3RhaXIgRCdTaWx2YSA8YWxhc3RhaXJAZC1zaWx2YS5vcmc+DQo+ IC0tLQ0KPiAgIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnICAgICAgICB8 ICAgMyArDQo+ICAgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L01ha2VmaWxlICAgICAg IHwgICAxICsNCj4gICBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9LY29uZmln ICAgfCAgMTUgKw0KPiAgIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wbWVtL01ha2Vm aWxlICB8ICAgNyArDQo+ICAgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BtZW0vb2N4 bC5jICAgIHwgNDczICsrKysrKysrKysrKysrKysrKw0KPiAgIC4uLi9wbGF0Zm9ybXMvcG93ZXJu di9wbWVtL29jeGxfaW50ZXJuYWwuaCAgICB8ICAyOCArKw0KPiAgIDYgZmlsZXMgY2hhbmdlZCwg NTI3IGluc2VydGlvbnMoKykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9wb3dlcnBjL3Bs YXRmb3Jtcy9wb3dlcm52L3BtZW0vS2NvbmZpZw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNo L3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9NYWtlZmlsZQ0KPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9vY3hsLmMNCj4gICBj cmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BtZW0vb2N4 bF9pbnRlcm5hbC5oDQo+IA0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9w b3dlcm52L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZw0K PiBpbmRleCA5Mzg4MDNlYWIwYWQuLmZjODk3NmFmMGU1MiAxMDA2NDQNCj4gLS0tIGEvYXJjaC9w b3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWcNCj4gKysrIGIvYXJjaC9wb3dlcnBjL3Bs YXRmb3Jtcy9wb3dlcm52L0tjb25maWcNCj4gQEAgLTUwLDMgKzUwLDYgQEAgY29uZmlnIFBQQ19W QVMNCj4gICBjb25maWcgU0NPTV9ERUJVR0ZTDQo+ICAgCWJvb2wgIkV4cG9zZSBTQ09NIGNvbnRy b2xsZXJzIHZpYSBkZWJ1Z2ZzIg0KPiAgIAlkZXBlbmRzIG9uIERFQlVHX0ZTDQo+ICsNCj4gK3Nv dXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BtZW0vS2NvbmZpZyINCj4gKw0K PiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L01ha2VmaWxlIGIv YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L01ha2VmaWxlDQo+IGluZGV4IGMwZjgxMjAw NDVjMy4uMGJiZDcyOTg4YjZmIDEwMDY0NA0KPiAtLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1z L3Bvd2VybnYvTWFrZWZpbGUNCj4gKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52 L01ha2VmaWxlDQo+IEBAIC0yMSwzICsyMSw0IEBAIG9iai0kKENPTkZJR19QUENfVkFTKQkrPSB2 YXMubyB2YXMtd2luZG93Lm8gdmFzLWRlYnVnLm8NCj4gICBvYmotJChDT05GSUdfT0NYTF9CQVNF KQkrPSBvY3hsLm8NCj4gICBvYmotJChDT05GSUdfU0NPTV9ERUJVR0ZTKSArPSBvcGFsLXhzY29t Lm8NCj4gICBvYmotJChDT05GSUdfUFBDX1NFQ1VSRV9CT09UKSArPSBvcGFsLXNlY3Zhci5vDQo+ ICtvYmotJChDT05GSUdfTElCTlZESU1NKSArPSBwbWVtLw0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9w b3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BtZW0vS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0 Zm9ybXMvcG93ZXJudi9wbWVtL0tjb25maWcNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggMDAwMDAwMDAwMDAwLi5jNWQ5Mjc1MjA5MjANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9h cmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9LY29uZmlnDQo+IEBAIC0wLDAgKzEs MTUgQEANCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiAraWYg TElCTlZESU1NDQo+ICsNCj4gK2NvbmZpZyBPQ1hMX1BNRU0NCj4gKwl0cmlzdGF0ZSAiT3BlbkNB UEkgUGVyc2lzdGVudCBNZW1vcnkiDQo+ICsJZGVwZW5kcyBvbiBMSUJOVkRJTU0gJiYgUFBDX1BP V0VSTlYgJiYgUENJICYmIEVFSCAmJiBaT05FX0RFVklDRSAmJiBPQ1hMDQo+ICsJaGVscA0KPiAr CSAgRXhwb3NlcyBkZXZpY2VzIHRoYXQgaW1wbGVtZW50IHRoZSBPcGVuQ0FQSSBTdG9yYWdlIENs YXNzIE1lbW9yeQ0KPiArCSAgc3BlY2lmaWNhdGlvbiBhcyBwZXJzaXN0ZW50IG1lbW9yeSByZWdp b25zLiBZb3UgbWF5IGFsc28gd2FudA0KPiArCSAgREVWX0RBWCwgREVWX0RBWF9QTUVNICYgRlNf REFYIGlmIHlvdSBwbGFuIG9uIHVzaW5nIERBWCBkZXZpY2VzDQo+ICsJICBzdGFja2VkIG9uIHRv cCBvZiB0aGlzIGRyaXZlci4NCj4gKw0KPiArCSAgU2VsZWN0IE4gaWYgdW5zdXJlLg0KPiArDQo+ ICtlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3Bt ZW0vTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9NYWtlZmls ZQ0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjFjNTVjNDE5 MzE3NQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93 ZXJudi9wbWVtL01ha2VmaWxlDQo+IEBAIC0wLDAgKzEsNyBAQA0KPiArIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMA0KPiArDQo+ICtjY2ZsYWdzLSQoQ09ORklHX1BQQ19XRVJST1Ip CSs9IC1XZXJyb3INCj4gKw0KPiArb2JqLSQoQ09ORklHX09DWExfUE1FTSkgKz0gb2N4bHBtZW0u bw0KPiArDQo+ICtvY3hscG1lbS15IDo9IG9jeGwubw0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dl cnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BtZW0vb2N4bC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jt cy9wb3dlcm52L3BtZW0vb2N4bC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw MDAwMDAwMDAwMC4uM2M0ZWViNWRjYzBmDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvYXJjaC9w b3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BtZW0vb2N4bC5jDQo+IEBAIC0wLDAgKzEsNDczIEBA DQo+ICsvLyBTUERYLUxpY2Vuc2UtSWQNCj4gKy8vIENvcHlyaWdodCAyMDE5IElCTSBDb3JwLg0K PiArDQo+ICsvKg0KPiArICogQSBkcml2ZXIgZm9yIE9wZW5DQVBJIGRldmljZXMgdGhhdCBpbXBs ZW1lbnQgdGhlIFN0b3JhZ2UgQ2xhc3MNCj4gKyAqIE1lbW9yeSBzcGVjaWZpY2F0aW9uLg0KPiAr ICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gKyNpbmNsdWRlIDxtaXNj L29jeGwuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9uZGN0bC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L21tX3R5cGVzLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbWVtb3J5X2hvdHBsdWcuaD4NCj4gKyNp bmNsdWRlICJvY3hsX2ludGVybmFsLmgiDQo+ICsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVj dCBwY2lfZGV2aWNlX2lkIG9jeGxwbWVtX3BjaV90YmxbXSA9IHsNCj4gKwl7IFBDSV9ERVZJQ0Uo UENJX1ZFTkRPUl9JRF9JQk0sIDB4MDYyNSksIH0sDQo+ICsJeyB9DQo+ICt9Ow0KPiArDQo+ICtN T0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgb2N4bHBtZW1fcGNpX3RibCk7DQo+ICsNCj4gKyNkZWZp bmUgTlVNX01JTk9SUyAyNTYgLy8gVG90YWwgdG8gcmVzZXJ2ZQ0KPiArDQo+ICtzdGF0aWMgZGV2 X3Qgb2N4bHBtZW1fZGV2Ow0KPiArc3RhdGljIHN0cnVjdCBjbGFzcyAqb2N4bHBtZW1fY2xhc3M7 DQo+ICtzdGF0aWMgc3RydWN0IG11dGV4IG1pbm9yc19pZHJfbG9jazsNCj4gK3N0YXRpYyBzdHJ1 Y3QgaWRyIG1pbm9yc19pZHI7DQo+ICsNCj4gKy8qKg0KPiArICogbmRjdGxfY29uZmlnX3dyaXRl KCkgLSBIYW5kbGUgYSBORF9DTURfU0VUX0NPTkZJR19EQVRBIGNvbW1hbmQgZnJvbSBuZGN0bA0K PiArICogQG9jeGxwbWVtOiB0aGUgZGV2aWNlIG1ldGFkYXRhDQo+ICsgKiBAY29tbWFuZDogdGhl IGluY29taW5nIGRhdGEgdG8gd3JpdGUNCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdh dGl2ZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgbmRjdGxfY29uZmlnX3dyaXRl KHN0cnVjdCBvY3hscG1lbSAqb2N4bHBtZW0sDQo+ICsJCQkgICAgICBzdHJ1Y3QgbmRfY21kX3Nl dF9jb25maWdfaGRyICpjb21tYW5kKQ0KPiArew0KPiArCWlmIChjb21tYW5kLT5pbl9vZmZzZXQg KyBjb21tYW5kLT5pbl9sZW5ndGggPiBMQUJFTF9BUkVBX1NJWkUpDQo+ICsJCXJldHVybiAtRUlO VkFMOw0KPiArDQo+ICsJbWVtY3B5X2ZsdXNoY2FjaGUob2N4bHBtZW0tPm1ldGFkYXRhX2FkZHIg KyBjb21tYW5kLT5pbl9vZmZzZXQsIGNvbW1hbmQtPmluX2J1ZiwNCj4gKwkJCSAgY29tbWFuZC0+ aW5fbGVuZ3RoKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAq IG5kY3RsX2NvbmZpZ19yZWFkKCkgLSBIYW5kbGUgYSBORF9DTURfR0VUX0NPTkZJR19EQVRBIGNv bW1hbmQgZnJvbSBuZGN0bA0KPiArICogQG9jeGxwbWVtOiB0aGUgZGV2aWNlIG1ldGFkYXRhDQo+ ICsgKiBAY29tbWFuZDogdGhlIHJlYWQgcmVxdWVzdA0KPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nl c3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUNCj4gKyAqLw0KPiArc3RhdGljIGludCBuZGN0bF9jb25m aWdfcmVhZChzdHJ1Y3Qgb2N4bHBtZW0gKm9jeGxwbWVtLA0KPiArCQkJICAgICBzdHJ1Y3QgbmRf Y21kX2dldF9jb25maWdfZGF0YV9oZHIgKmNvbW1hbmQpDQo+ICt7DQo+ICsJaWYgKGNvbW1hbmQt PmluX29mZnNldCArIGNvbW1hbmQtPmluX2xlbmd0aCA+IExBQkVMX0FSRUFfU0laRSkNCj4gKwkJ cmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwltZW1jcHlfbWNzYWZlKGNvbW1hbmQtPm91dF9idWYs IG9jeGxwbWVtLT5tZXRhZGF0YV9hZGRyICsgY29tbWFuZC0+aW5fb2Zmc2V0LA0KPiArCQkgICAg ICBjb21tYW5kLT5pbl9sZW5ndGgpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICogbmRjdGxfY29uZmlnX3NpemUoKSAtIEhhbmRsZSBhIE5EX0NNRF9HRVRfQ09O RklHX1NJWkUgY29tbWFuZCBmcm9tIG5kY3RsDQo+ICsgKiBAY29tbWFuZDogdGhlIHJlYWQgcmVx dWVzdA0KPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUNCj4g KyAqLw0KPiArc3RhdGljIGludCBuZGN0bF9jb25maWdfc2l6ZShzdHJ1Y3QgbmRfY21kX2dldF9j b25maWdfc2l6ZSAqY29tbWFuZCkNCj4gK3sNCj4gKwljb21tYW5kLT5zdGF0dXMgPSAwOw0KPiAr CWNvbW1hbmQtPmNvbmZpZ19zaXplID0gTEFCRUxfQVJFQV9TSVpFOw0KPiArCWNvbW1hbmQtPm1h eF94ZmVyID0gUEFHRV9TSVpFOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgbmRjdGwoc3RydWN0IG52ZGltbV9idXNfZGVzY3JpcHRvciAqbmRfZGVzYywNCj4g KwkJIHN0cnVjdCBudmRpbW0gKm52ZGltbSwNCj4gKwkJIHVuc2lnbmVkIGludCBjbWQsIHZvaWQg KmJ1ZiwgdW5zaWduZWQgaW50IGJ1Zl9sZW4sIGludCAqY21kX3JjKQ0KPiArew0KPiArCXN0cnVj dCBvY3hscG1lbSAqb2N4bHBtZW0gPSBjb250YWluZXJfb2YobmRfZGVzYywgc3RydWN0IG9jeGxw bWVtLCBidXNfZGVzYyk7DQo+ICsNCj4gKwlzd2l0Y2ggKGNtZCkgew0KPiArCWNhc2UgTkRfQ01E X0dFVF9DT05GSUdfU0laRToNCj4gKwkJKmNtZF9yYyA9IG5kY3RsX2NvbmZpZ19zaXplKGJ1Zik7 DQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJY2FzZSBORF9DTURfR0VUX0NPTkZJR19EQVRBOg0K PiArCQkqY21kX3JjID0gbmRjdGxfY29uZmlnX3JlYWQob2N4bHBtZW0sIGJ1Zik7DQo+ICsJCXJl dHVybiAwOw0KPiArDQo+ICsJY2FzZSBORF9DTURfU0VUX0NPTkZJR19EQVRBOg0KPiArCQkqY21k X3JjID0gbmRjdGxfY29uZmlnX3dyaXRlKG9jeGxwbWVtLCBidWYpOw0KPiArCQlyZXR1cm4gMDsN Cj4gKw0KPiArCWRlZmF1bHQ6DQo+ICsJCXJldHVybiAtRU5PVFRZOw0KPiArCX0NCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgKiByZXNlcnZlX21ldGFkYXRhKCkgLSBSZXNlcnZlIHNwYWNlIGZvciBu dmRpbW0gbWV0YWRhdGENCj4gKyAqIEBvY3hscG1lbTogdGhlIGRldmljZSBtZXRhZGF0YQ0KPiAr ICogQGxwY19tZW06IFRoZSByZXNvdXJjZSByZXByZXNlbnRpbmcgdGhlIExQQyBtZW1vcnkgb2Yg dGhlIE9wZW5DQVBJIGRldmljZQ0KPiArICovDQo+ICtzdGF0aWMgaW50IHJlc2VydmVfbWV0YWRh dGEoc3RydWN0IG9jeGxwbWVtICpvY3hscG1lbSwNCj4gKwkJCSAgICBzdHJ1Y3QgcmVzb3VyY2Ug KmxwY19tZW0pDQo+ICt7DQo+ICsJb2N4bHBtZW0tPm1ldGFkYXRhX2FkZHIgPSBkZXZtX21lbXJl bWFwKCZvY3hscG1lbS0+ZGV2LCBscGNfbWVtLT5zdGFydCwNCj4gKwkJCQkJCUxBQkVMX0FSRUFf U0laRSwgTUVNUkVNQVBfV0IpOw0KPiArCWlmIChJU19FUlIob2N4bHBtZW0tPm1ldGFkYXRhX2Fk ZHIpKQ0KPiArCQlyZXR1cm4gUFRSX0VSUihvY3hscG1lbS0+bWV0YWRhdGFfYWRkcik7DQo+ICsN Cj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiByZWdpc3Rlcl9scGNfbWVt KCkgLSBEaXNjb3ZlciBwZXJzaXN0ZW50IG1lbW9yeSBvbiBhIGRldmljZSBhbmQgcmVnaXN0ZXIg aXQgd2l0aCB0aGUgTlZESU1NIHN1YnN5c3RlbQ0KPiArICogQG9jeGxwbWVtOiB0aGUgZGV2aWNl IG1ldGFkYXRhDQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiArICovDQo+ICtzdGF0aWMg aW50IHJlZ2lzdGVyX2xwY19tZW0oc3RydWN0IG9jeGxwbWVtICpvY3hscG1lbSkNCj4gK3sNCj4g KwlzdHJ1Y3QgbmRfcmVnaW9uX2Rlc2MgcmVnaW9uX2Rlc2M7DQo+ICsJc3RydWN0IG5kX21hcHBp bmdfZGVzYyBuZF9tYXBwaW5nX2Rlc2M7DQo+ICsJc3RydWN0IHJlc291cmNlICpscGNfbWVtOw0K PiArCWNvbnN0IHN0cnVjdCBvY3hsX2FmdV9jb25maWcgKmNvbmZpZzsNCj4gKwljb25zdCBzdHJ1 Y3Qgb2N4bF9mbl9jb25maWcgKmZuX2NvbmZpZzsNCj4gKwlpbnQgcmM7DQo+ICsJdW5zaWduZWQg bG9uZyBudmRpbW1fY21kX21hc2sgPSAwOw0KPiArCXVuc2lnbmVkIGxvbmcgbnZkaW1tX2ZsYWdz ID0gMDsNCj4gKwlpbnQgdGFyZ2V0X25vZGU7DQo+ICsJY2hhciBzZXJpYWxbMTYrMV07DQo+ICsN Cj4gKwkvLyBTZXQgdXAgdGhlIHJlc2VydmVkIG1ldGFkYXRhIGFyZWENCj4gKwlyYyA9IG9jeGxf YWZ1X21hcF9scGNfbWVtKG9jeGxwbWVtLT5vY3hsX2FmdSk7DQo+ICsJaWYgKHJjIDwgMCkNCj4g KwkJcmV0dXJuIHJjOw0KPiArDQo+ICsJbHBjX21lbSA9IG9jeGxfYWZ1X2xwY19tZW0ob2N4bHBt ZW0tPm9jeGxfYWZ1KTsNCj4gKwlpZiAobHBjX21lbSA9PSBOVUxMIHx8IGxwY19tZW0tPnN0YXJ0 ID09IDApDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJY29uZmlnID0gb2N4bF9hZnVf Y29uZmlnKG9jeGxwbWVtLT5vY3hsX2FmdSk7DQo+ICsJZm5fY29uZmlnID0gb2N4bF9mdW5jdGlv bl9jb25maWcob2N4bHBtZW0tPm9jeGxfZm4pOw0KPiArDQo+ICsJcmMgPSByZXNlcnZlX21ldGFk YXRhKG9jeGxwbWVtLCBscGNfbWVtKTsNCj4gKwlpZiAocmMpDQo+ICsJCXJldHVybiByYzsNCj4g Kw0KPiArCW9jeGxwbWVtLT5idXNfZGVzYy5wcm92aWRlcl9uYW1lID0gIm9jeGwtcG1lbSI7DQo+ ICsJb2N4bHBtZW0tPmJ1c19kZXNjLm5kY3RsID0gbmRjdGw7DQo+ICsJb2N4bHBtZW0tPmJ1c19k ZXNjLm1vZHVsZSA9IFRISVNfTU9EVUxFOw0KPiArDQo+ICsJb2N4bHBtZW0tPm52ZGltbV9idXMg PSBudmRpbW1fYnVzX3JlZ2lzdGVyKCZvY3hscG1lbS0+ZGV2LA0KPiArCQkJCQkJICAgJm9jeGxw bWVtLT5idXNfZGVzYyk7DQo+ICsJaWYgKCFvY3hscG1lbS0+bnZkaW1tX2J1cykNCj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlvY3hscG1lbS0+cG1lbV9yZXMuc3RhcnQgPSAodTY0KWxw Y19tZW0tPnN0YXJ0ICsgTEFCRUxfQVJFQV9TSVpFOw0KPiArCW9jeGxwbWVtLT5wbWVtX3Jlcy5l bmQgPSAodTY0KWxwY19tZW0tPnN0YXJ0ICsgY29uZmlnLT5scGNfbWVtX3NpemUgLSAxOw0KPiAr CW9jeGxwbWVtLT5wbWVtX3Jlcy5uYW1lID0gIk9wZW5DQVBJIHBlcnNpc3RlbnQgbWVtb3J5IjsN Cj4gKw0KPiArCXNldF9iaXQoTkRfQ01EX0dFVF9DT05GSUdfU0laRSwgJm52ZGltbV9jbWRfbWFz ayk7DQo+ICsJc2V0X2JpdChORF9DTURfR0VUX0NPTkZJR19EQVRBLCAmbnZkaW1tX2NtZF9tYXNr KTsNCj4gKwlzZXRfYml0KE5EX0NNRF9TRVRfQ09ORklHX0RBVEEsICZudmRpbW1fY21kX21hc2sp Ow0KPiArDQo+ICsJc2V0X2JpdChORERfQUxJQVNJTkcsICZudmRpbW1fZmxhZ3MpOw0KPiArDQo+ ICsJc25wcmludGYoc2VyaWFsLCBzaXplb2Yoc2VyaWFsKSwgIiVsbHgiLCBmbl9jb25maWctPnNl cmlhbCk7DQo+ICsJbmRfbWFwcGluZ19kZXNjLm52ZGltbSA9IG52ZGltbV9jcmVhdGUob2N4bHBt ZW0tPm52ZGltbV9idXMsIG9jeGxwbWVtLA0KPiArCQkJCSBOVUxMLCBudmRpbW1fZmxhZ3MsIG52 ZGltbV9jbWRfbWFzaywNCj4gKwkJCQkgMCwgTlVMTCk7DQo+ICsJaWYgKCFuZF9tYXBwaW5nX2Rl c2MubnZkaW1tKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCWlmIChudmRpbW1fYnVz X2NoZWNrX2RpbW1fY291bnQob2N4bHBtZW0tPm52ZGltbV9idXMsIDEpKQ0KPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gKw0KPiArCW5kX21hcHBpbmdfZGVzYy5zdGFydCA9IG9jeGxwbWVtLT5wbWVt X3Jlcy5zdGFydDsNCj4gKwluZF9tYXBwaW5nX2Rlc2Muc2l6ZSA9IHJlc291cmNlX3NpemUoJm9j eGxwbWVtLT5wbWVtX3Jlcyk7DQo+ICsJbmRfbWFwcGluZ19kZXNjLnBvc2l0aW9uID0gMDsNCj4g Kw0KPiArCW9jeGxwbWVtLT5uZF9zZXQuY29va2llMSA9IGZuX2NvbmZpZy0+c2VyaWFsICsgMTsg Ly8gYWxsb3cgZm9yIGVtcHR5IHNlcmlhbA0KPiArCW9jeGxwbWVtLT5uZF9zZXQuY29va2llMiA9 IGZuX2NvbmZpZy0+c2VyaWFsICsgMTsNCj4gKw0KPiArCXRhcmdldF9ub2RlID0gb2Zfbm9kZV90 b19uaWQob2N4bHBtZW0tPnBkZXYtPmRldi5vZl9ub2RlKTsNCj4gKw0KPiArCW1lbXNldCgmcmVn aW9uX2Rlc2MsIDAsIHNpemVvZihyZWdpb25fZGVzYykpOw0KPiArCXJlZ2lvbl9kZXNjLnJlcyA9 ICZvY3hscG1lbS0+cG1lbV9yZXM7DQo+ICsJcmVnaW9uX2Rlc2MubnVtYV9ub2RlID0gTlVNQV9O T19OT0RFOw0KPiArCXJlZ2lvbl9kZXNjLnRhcmdldF9ub2RlID0gdGFyZ2V0X25vZGU7DQo+ICsJ cmVnaW9uX2Rlc2MubnVtX21hcHBpbmdzID0gMTsNCj4gKwlyZWdpb25fZGVzYy5tYXBwaW5nID0g Jm5kX21hcHBpbmdfZGVzYzsNCj4gKwlyZWdpb25fZGVzYy5uZF9zZXQgPSAmb2N4bHBtZW0tPm5k X3NldDsNCj4gKw0KPiArCXNldF9iaXQoTkRfUkVHSU9OX1BBR0VNQVAsICZyZWdpb25fZGVzYy5m bGFncyk7DQo+ICsJLyoNCj4gKwkgKiBOQjogbGlibnZkaW1tIGNvcGllcyB0aGUgZGF0YSBmcm9t IG5kcl9kZXNjIGludG8gaXQncyBvd24NCj4gKwkgKiBzdHJ1Y3R1cmVzIHNvIHBhc3NpbmcgYSBz dGFjayBwb2ludGVyIGlzIGZpbmUuDQo+ICsJICovDQo+ICsJb2N4bHBtZW0tPm5kX3JlZ2lvbiA9 IG52ZGltbV9wbWVtX3JlZ2lvbl9jcmVhdGUob2N4bHBtZW0tPm52ZGltbV9idXMsDQo+ICsJCQkJ CQkJJnJlZ2lvbl9kZXNjKTsNCj4gKwlpZiAoIW9jeGxwbWVtLT5uZF9yZWdpb24pDQo+ICsJCXJl dHVybiAtRUlOVkFMOw0KPiArDQo+ICsJZGV2X2luZm8oJm9jeGxwbWVtLT5kZXYsDQo+ICsJCSAi T25saW5pbmcgJWxsdU1CIG9mIHBlcnNpc3RlbnQgbWVtb3J5XG4iLA0KPiArCQkgbmRfbWFwcGlu Z19kZXNjLnNpemUgLyBTWl8xTSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgKiBhbGxvY2F0ZV9taW5vcigpIC0gQWxsb2NhdGUgYSBtaW5vciBudW1iZXIgdG8g dXNlIGZvciBhbiBPcGVuQ0FQSSBwbWVtIGRldmljZQ0KPiArICogQG9jeGxwbWVtOiB0aGUgZGV2 aWNlIG1ldGFkYXRhDQo+ICsgKiBSZXR1cm46IHRoZSBhbGxvY2F0ZWQgbWlub3IgbnVtYmVyDQo+ ICsgKi8NCj4gK3N0YXRpYyBpbnQgYWxsb2NhdGVfbWlub3Ioc3RydWN0IG9jeGxwbWVtICpvY3hs cG1lbSkNCj4gK3sNCj4gKwlpbnQgbWlub3I7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZtaW5vcnNf aWRyX2xvY2spOw0KPiArCW1pbm9yID0gaWRyX2FsbG9jKCZtaW5vcnNfaWRyLCBvY3hscG1lbSwg MCwgTlVNX01JTk9SUywgR0ZQX0tFUk5FTCk7DQo+ICsJbXV0ZXhfdW5sb2NrKCZtaW5vcnNfaWRy X2xvY2spOw0KPiArCXJldHVybiBtaW5vcjsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZnJl ZV9taW5vcihzdHJ1Y3Qgb2N4bHBtZW0gKm9jeGxwbWVtKQ0KPiArew0KPiArCW11dGV4X2xvY2so Jm1pbm9yc19pZHJfbG9jayk7DQo+ICsJaWRyX3JlbW92ZSgmbWlub3JzX2lkciwgTUlOT1Iob2N4 bHBtZW0tPmRldi5kZXZ0KSk7DQo+ICsJbXV0ZXhfdW5sb2NrKCZtaW5vcnNfaWRyX2xvY2spOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGZyZWVfb2N4bHBtZW0oKSAtIEZyZWUgYWxsIG1lbWJl cnMgb2YgYW4gb2N4bHBtZW0gc3RydWN0DQo+ICsgKiBAb2N4bHBtZW06IHRoZSBkZXZpY2Ugc3Ry dWN0IHRvIGNsZWFyDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGZyZWVfb2N4bHBtZW0oc3RydWN0 IG9jeGxwbWVtICpvY3hscG1lbSkNCj4gK3sNCj4gKwlpbnQgcmM7DQo+ICsNCj4gKwlpZiAob2N4 bHBtZW0tPm52ZGltbV9idXMpDQo+ICsJCW52ZGltbV9idXNfdW5yZWdpc3RlcihvY3hscG1lbS0+ bnZkaW1tX2J1cyk7DQo+ICsNCj4gKwlmcmVlX21pbm9yKG9jeGxwbWVtKTsNCj4gKw0KPiArCWlm IChvY3hscG1lbS0+bWV0YWRhdGFfYWRkcikNCj4gKwkJZGV2bV9tZW11bm1hcCgmb2N4bHBtZW0t PmRldiwgb2N4bHBtZW0tPm1ldGFkYXRhX2FkZHIpOw0KPiArDQo+ICsJaWYgKG9jeGxwbWVtLT5v Y3hsX2NvbnRleHQpIHsNCj4gKwkJcmMgPSBvY3hsX2NvbnRleHRfZGV0YWNoKG9jeGxwbWVtLT5v Y3hsX2NvbnRleHQpOw0KPiArCQlpZiAocmMgPT0gLUVCVVNZKQ0KPiArCQkJZGV2X3dhcm4oJm9j eGxwbWVtLT5kZXYsICJUaW1lb3V0IGRldGFjaGluZyBvY3hsIGNvbnRleHRcbiIpOw0KPiArCQll bHNlDQo+ICsJCQlvY3hsX2NvbnRleHRfZnJlZShvY3hscG1lbS0+b2N4bF9jb250ZXh0KTsNCj4g Kw0KPiArCX0NCj4gKw0KPiArCWlmIChvY3hscG1lbS0+b2N4bF9hZnUpDQo+ICsJCW9jeGxfYWZ1 X3B1dChvY3hscG1lbS0+b2N4bF9hZnUpOw0KPiArDQo+ICsJaWYgKG9jeGxwbWVtLT5vY3hsX2Zu KQ0KPiArCQlvY3hsX2Z1bmN0aW9uX2Nsb3NlKG9jeGxwbWVtLT5vY3hsX2ZuKTsNCj4gKw0KPiAr CWtmcmVlKG9jeGxwbWVtKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBmcmVlX29jeGxwbWVt X2RldigpIC0gRnJlZSBhbiBPcGVuQ0FQSSBwZXJzaXN0ZW50IG1lbW9yeSBkZXZpY2UNCj4gKyAq IEBkZXY6IFRoZSBkZXZpY2Ugc3RydWN0DQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGZyZWVfb2N4 bHBtZW1fZGV2KHN0cnVjdCBkZXZpY2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2N4bHBtZW0g Km9jeGxwbWVtID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG9jeGxwbWVtLCBkZXYpOw0KPiAr DQo+ICsJZnJlZV9vY3hscG1lbShvY3hscG1lbSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICog b2N4bHBtZW1fcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIGFuIE9wZW5DQVBJIHBtZW0gZGV2aWNlIHdp dGggdGhlIGtlcm5lbA0KPiArICogQG9jeGxwbWVtOiB0aGUgZGV2aWNlIG1ldGFkYXRhDQo+ICsg KiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQ0KPiArICovDQo+ICtz dGF0aWMgaW50IG9jeGxwbWVtX3JlZ2lzdGVyKHN0cnVjdCBvY3hscG1lbSAqb2N4bHBtZW0pDQo+ ICt7DQo+ICsJaW50IHJjOw0KPiArCWludCBtaW5vciA9IGFsbG9jYXRlX21pbm9yKG9jeGxwbWVt KTsNCj4gKw0KPiArCWlmIChtaW5vciA8IDApDQo+ICsJCXJldHVybiBtaW5vcjsNCj4gKw0KPiAr CW9jeGxwbWVtLT5kZXYucmVsZWFzZSA9IGZyZWVfb2N4bHBtZW1fZGV2Ow0KPiArCXJjID0gZGV2 X3NldF9uYW1lKCZvY3hscG1lbS0+ZGV2LCAib2N4bHBtZW0lZCIsIG1pbm9yKTsNCj4gKwlpZiAo cmMgPCAwKQ0KPiArCQlyZXR1cm4gcmM7DQo+ICsNCj4gKwlvY3hscG1lbS0+ZGV2LmRldnQgPSBN S0RFVihNQUpPUihvY3hscG1lbV9kZXYpLCBtaW5vcik7DQo+ICsJb2N4bHBtZW0tPmRldi5jbGFz cyA9IG9jeGxwbWVtX2NsYXNzOw0KDQoNCg0KVGhpcyBmdW5jdGlvbiwgYXMgd2VsbCBhcyBhbGxv Y2F0ZV9taW5vcigpIGFuZCBmcmVlX21pbm9yKCkgYWJvdmUgDQpyZWZlcmVuY2UgcmVzb3VyY2Vz ICh0aGUgSURSLCB0aGUgZmlsZSBjbGFzcywgLi4uKSB3aGljaCBhcmUgbm90IA0KaW5pdGlhbGl6 ZWQgeWV0LiBUaGUgZnVuY3Rpb24gZmlsZV9pbml0KCkgaXMgY29taW5nIGluIGEgbGF0ZXIgcGF0 Y2guDQoNCg0KDQo+ICsJb2N4bHBtZW0tPmRldi5wYXJlbnQgPSAmb2N4bHBtZW0tPnBkZXYtPmRl djsNCj4gKw0KPiArCXJldHVybiBkZXZpY2VfcmVnaXN0ZXIoJm9jeGxwbWVtLT5kZXYpOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIG9jeGxwbWVtX3JlbW92ZSgpIC0gRnJlZSBhbiBPcGVuQ0FQ SSBwZXJzaXN0ZW50IG1lbW9yeSBkZXZpY2UNCj4gKyAqIEBwZGV2OiB0aGUgUENJIGRldmljZSBp bmZvcm1hdGlvbiBzdHJ1Y3QNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgb2N4bHBtZW1fcmVtb3Zl KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KPiArew0KPiArCWlmIChQQ0lfRlVOQyhwZGV2LT5kZXZm bikgPT0gMCkgew0KPiArCQlzdHJ1Y3Qgb2N4bHBtZW1fZnVuY3Rpb24wICpmdW5jMCA9IHBjaV9n ZXRfZHJ2ZGF0YShwZGV2KTsNCj4gKw0KPiArCQlpZiAoZnVuYzApIHsNCj4gKwkJCW9jeGxfZnVu Y3Rpb25fY2xvc2UoZnVuYzAtPm9jeGxfZm4pOw0KPiArCQkJZnVuYzAtPm9jeGxfZm4gPSBOVUxM Ow0KPiArCQl9DQoNCg0KDQpUaGUgc3RydWN0IG9jeGxwbWVtX2Z1bmN0aW9uMCBhbGxvY2F0ZWQg b24gcHJvYmUoKSBzaG91bGQgYmUgZnJlZWQuDQoNCg0KDQo+ICsJfSBlbHNlIHsNCj4gKwkJc3Ry dWN0IG9jeGxwbWVtICpvY3hscG1lbSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gKw0KPiAr CQlpZiAob2N4bHBtZW0pDQo+ICsJCQlkZXZpY2VfdW5yZWdpc3Rlcigmb2N4bHBtZW0tPmRldik7 DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIHByb2JlX2Z1bmN0aW9uMCgpIC0gU2V0 IHVwIGZ1bmN0aW9uIDAgZm9yIGFuIE9wZW5DQVBJIHBlcnNpc3RlbnQgbWVtb3J5IGRldmljZQ0K PiArICogVGhpcyBpcyBpbXBvcnRhbnQgYXMgaXQgZW5hYmxlcyB0ZW1wbGF0ZXMgaGlnaGVyIHRo YW4gMCBhY3Jvc3MgYWxsIG90aGVyIGZ1bmN0aW9ucywNCj4gKyAqIHdoaWNoIGluIHR1cm4gZW5h YmxlcyBoaWdoZXIgYmFuZHdpZHRoIGFjY2Vzc2VzDQo+ICsgKiBAcGRldjogdGhlIFBDSSBkZXZp Y2UgaW5mb3JtYXRpb24gc3RydWN0DQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRp dmUgb24gZmFpbHVyZQ0KPiArICovDQo+ICtzdGF0aWMgaW50IHByb2JlX2Z1bmN0aW9uMChzdHJ1 Y3QgcGNpX2RldiAqcGRldikNCj4gK3sNCj4gKwlzdHJ1Y3Qgb2N4bHBtZW1fZnVuY3Rpb24wICpm dW5jMCA9IE5VTEw7DQo+ICsJc3RydWN0IG9jeGxfZm4gKmZuOw0KPiArDQo+ICsJZnVuYzAgPSBr emFsbG9jKHNpemVvZigqZnVuYzApLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWZ1bmMwKQ0KPiAr CQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCWZ1bmMwLT5wZGV2ID0gcGRldjsNCg0KDQoNClN0 b3JpbmcgdGhlIHN0cnVjdCBwY2lfZGV2IGZvciBmdW5jdGlvbiAwIGFwcGVhcnMgdG8gYmUgdXNl bGVzcy4NCg0KDQoNCj4gKwlmbiA9IG9jeGxfZnVuY3Rpb25fb3BlbihwZGV2KTsNCj4gKwlpZiAo SVNfRVJSKGZuKSkgew0KPiArCQlrZnJlZShmdW5jMCk7DQo+ICsJCWRldl9lcnIoJnBkZXYtPmRl diwgImZhaWxlZCB0byBvcGVuIE9DWEwgZnVuY3Rpb25cbiIpOw0KPiArCQlyZXR1cm4gUFRSX0VS Uihmbik7DQo+ICsJfQ0KPiArCWZ1bmMwLT5vY3hsX2ZuID0gZm47DQo+ICsNCj4gKwlwY2lfc2V0 X2RydmRhdGEocGRldiwgZnVuYzApOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICogcHJvYmUoKSAtIEluaXQgYW4gT3BlbkNBUEkgcGVyc2lzdGVudCBtZW1vcnkg ZGV2aWNlDQo+ICsgKiBAcGRldjogdGhlIFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0DQo+ ICsgKiBAZW50OiBUaGUgZW50cnkgZnJvbSBvY3hscG1lbV9wY2lfdGJsDQo+ICsgKiBSZXR1cm46 IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQ0KPiArICovDQo+ICtzdGF0aWMgaW50 IHByb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAq ZW50KQ0KPiArew0KPiArCXN0cnVjdCBvY3hscG1lbSAqb2N4bHBtZW07DQo+ICsJaW50IHJjOw0K PiArDQo+ICsJaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSA9PSAwKQ0KPiArCQlyZXR1cm4gcHJv YmVfZnVuY3Rpb24wKHBkZXYpOw0KPiArCWVsc2UgaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAh PSAxKQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCW9jeGxwbWVtID0ga3phbGxvYyhzaXplb2Yo Km9jeGxwbWVtKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFvY3hscG1lbSkgew0KPiArCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgT3BlbkNBUEkgcGVyc2lzdGVudCBt ZW1vcnkgbWV0YWRhdGFcbiIpOw0KPiArCQlyYyA9IC1FTk9NRU07DQo+ICsJCWdvdG8gZXJyOw0K PiArCX0NCj4gKwlvY3hscG1lbS0+cGRldiA9IHBkZXY7DQoNCg0KV2Ugc2hvdWxkIHByb2JhYmx5 IGNhbGwgcGNpX2Rldl9nZXQoKSBoZXJlIGlmIHdlIHN0b3JlIHRoZSBzdHJ1Y3QgDQpwY2lfZGV2 IHBvaW50ZXIuIFdlIGNvdWxkIGRlYmF0ZSBob3cgdXNlZnVsIGl0IHJlYWxseSBpcywgY29uc2lk ZXJpbmcgDQp3ZSdyZSByZWdpc3RlcmluZyBhIGRldmljZSwgd2hpY2ggd2lsbCBhbHNvIHRha2Ug YSByZWZlcmVuY2UsIGJ1dCBpdCANCmxvb2tzIGxpa2UgdGhlIHNhZmUgdGhpbmcgdG8gZG8gY29u c2lkZXJpbmcgYWxsIHRob3NlIHJlc291cmNlcyBkb24ndCANCmhhdmUgZXhhY3RseSB0aGUgc2Ft ZSBsaWZlIGN5Y2xlIGFuZCBpdCBpcyBzdGFuZGFyZCBwcmFjdGljZSB0byANCmd1YXJhbnRlZSB0 aGF0IHdlIHdvbid0IGhhdmUgYSBkYW5nbGluZyBwb2ludGVyLg0KDQoNCg0KPiArDQo+ICsJcGNp X3NldF9kcnZkYXRhKHBkZXYsIG9jeGxwbWVtKTsNCj4gKw0KPiArCW9jeGxwbWVtLT5vY3hsX2Zu ID0gb2N4bF9mdW5jdGlvbl9vcGVuKHBkZXYpOw0KPiArCWlmIChJU19FUlIob2N4bHBtZW0tPm9j eGxfZm4pKSB7DQo+ICsJCWtmcmVlKG9jeGxwbWVtKTsNCg0KDQpvY3hscG1lbSBpcyBmcmVlZC4u Lg0KDQoNCj4gKwkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOw0KPiArCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJmYWlsZWQgdG8gb3BlbiBPQ1hMIGZ1bmN0aW9uXG4iKTsNCj4gKwkJcmMgPSBQ VFJfRVJSKG9jeGxwbWVtLT5vY3hsX2ZuKTsNCg0KDQouLi4gYW5kIHRoZW4gcmVmZXJlbmNlZC4N Cg0KDQoNCj4gKwkJZ290byBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJb2N4bHBtZW0tPm9jeGxfYWZ1 ID0gb2N4bF9mdW5jdGlvbl9mZXRjaF9hZnUob2N4bHBtZW0tPm9jeGxfZm4sIDApOw0KPiArCWlm IChvY3hscG1lbS0+b2N4bF9hZnUgPT0gTlVMTCkgew0KPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYs ICJDb3VsZCBub3QgZ2V0IE9DWEwgQUZVIGZyb20gZnVuY3Rpb25cbiIpOw0KDQoNClRoZSBlcnJv ciBwYXRoIGhlcmUgc2hvdWxkIG1hdGNoIHRoZSBhYm92ZSwgdG8gZnJlZSBzdHJ1Y3Qgb2N4bHBt ZW0uDQoNCg0KPiArCQlyYyA9IC1FTlhJTzsNCj4gKwkJZ290byBlcnI7DQo+ICsJfQ0KPiArDQo+ ICsJb2N4bF9hZnVfZ2V0KG9jeGxwbWVtLT5vY3hsX2FmdSk7DQo+ICsNCj4gKwkvLyBSZXNvdXJj ZXMgYWxsb2NhdGVkIGJlbG93IGhlcmUgYXJlIGNsZWFuZWQgdXAgaW4gdGhlIHJlbGVhc2UgaGFu ZGxlcg0KPiArDQo+ICsJcmMgPSBvY3hscG1lbV9yZWdpc3RlcihvY3hscG1lbSk7DQo+ICsJaWYg KHJjKSB7DQo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciBPcGVu Q0FQSSBwZXJzaXN0ZW50IG1lbW9yeSBkZXZpY2Ugd2l0aCB0aGUga2VybmVsXG4iKTsNCj4gKwkJ Z290byBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJcmMgPSBvY3hsX2NvbnRleHRfYWxsb2MoJm9jeGxw bWVtLT5vY3hsX2NvbnRleHQsIG9jeGxwbWVtLT5vY3hsX2FmdSwgTlVMTCk7DQo+ICsJaWYgKHJj KSB7DQo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBPQ1hMIGNv bnRleHRcbiIpOw0KPiArCQlnb3RvIGVycjsNCj4gKwl9DQo+ICsNCj4gKwlyYyA9IG9jeGxfY29u dGV4dF9hdHRhY2gob2N4bHBtZW0tPm9jeGxfY29udGV4dCwgMCwgTlVMTCk7DQo+ICsJaWYgKHJj KSB7DQo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhdHRhY2ggb2N4bCBjb250 ZXh0XG4iKTsNCj4gKwkJZ290byBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJcmMgPSByZWdpc3Rlcl9s cGNfbWVtKG9jeGxwbWVtKTsNCj4gKwlpZiAocmMpIHsNCj4gKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiQ291bGQgbm90IHJlZ2lzdGVyIE9wZW5DQVBJIHBlcnNpc3RlbnQgbWVtb3J5IHdpdGggbGli bnZkaW1tXG4iKTsNCj4gKwkJZ290byBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ ICsNCj4gK2VycjoNCj4gKwkvKg0KPiArCSAqIEZ1cnRoZXIgY2xlYW51cCBpcyBkb25lIGluIHRo ZSByZWxlYXNlIGhhbmRsZXIgdmlhIGZyZWVfb2N4bHBtZW0oKQ0KPiArCSAqIFRoaXMgYWxsb3dz IHVzIHRvIGtlZXAgdGhlIGNoYXJhY3RlciBkZXZpY2UgbGl2ZSB0byBoYW5kbGUgSU9DVExzIHRv DQo+ICsJICogaW52ZXN0aWdhdGUgaXNzdWVzIGlmIHRoZSBjYXJkIGhhcyBhbiBlcnJvcg0KPiAr CSAqLw0KDQoNCklmIHdlIGZhaWwgcHJvYmUsIHdlIGRvbid0IGNhbGwgZGV2aWNlX3VucmVnaXN0 ZXIoKSBhbmQgdGhlIGRhdGEgDQpzdHJ1Y3R1cmVzIHdpbGwgbmV2ZXIgYmUgZnJlZWQuIFRoZSBj b21tZW50IHNlZW1zIHRvIGluZGljYXRlIGl0J3MgZG9uZSANCm9uIHB1cnBvc2UgYnV0IHRoYXQg bG9va3Mgc3VwcmlzaW5nIGFuZCB3cm9uZy4gSWYgd2UgZmFpbCBwcm9iZSwgdGhlIA0Ka2VybmVs IHRoaW5rcyB0aGUgZHJpdmVyIGl0IF9ub3RfIGhhbmRsaW5nIHRoZSBkZXZpY2UsIHNvIHdlIG5l ZWQgdG8gDQpleGl0IHByb2JlKCkgY2xlYW5seS4gV2UncmUgbm90IHN1cHBvc2VkIHRvIGJlIGFi bGUgdG8gbWFrZSBzb21lIGRlYnVnIA0KaW9jdGwgY2FsbHMuIE9uY2Ugd2UgZmFpbCBwcm9iZSwg dGhlIGtlcm5lbCBpcyBmcmVlIHRvIGRvIHdoYXRldmVyIGl0IA0Kd2FudHMgd2l0aCB0aGUgcGNp IGRldmljZS4gSWYgeW91IG1hbmFnZSB0byBleHRyYWN0IHNvbWUgZGVidWcgaW5mbyANCmR1cmlu ZyBkZXZlbG9wbWVudCwgdGhlbiBmaW5lLCBidXQgaXQncyBub3Qgc29tZXRoaW5nIHdlIGNhbiBy ZWx5IG9uIGFuZCANCnVwc3RyZWFtLg0KSWYgdGhlIGNhcmQgZW50ZXJzIGFuIGVycm9yIHN0YXRl IGFmdGVyIHByb2JlKCksIHRoZW4gd2UgZG9uJ3QgbmVlZCB0aGF0IA0KYW55d2F5LiBXZSBoYXZl IGFsbCB0aGUgdGltZSBpbiB0aGUgd29ybGQgdG8gY2FsbCBpb2N0bCdzLCBhcyBsb25nIGFzIHdl IA0KZG9uJ3QgY2FsbCB0aGUgcmVtb3ZlIGNhbGxiYWNrIG9mIHRoZSBkcml2ZXIuDQoNCg0KDQoN Cj4gKw0KPiArCWRldl9lcnIoJnBkZXYtPmRldiwNCj4gKwkJIkVycm9yIGRldGVjdGVkLCB3aWxs IG5vdCByZWdpc3RlciBPcGVuQ0FQSSBwZXJzaXN0ZW50IG1lbW9yeVxuIik7DQo+ICsJcmV0dXJu IHJjOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGNpX2RyaXZlciA9 IHsNCj4gKwkubmFtZSA9ICJvY3hsLXBtZW0iLA0KPiArCS5pZF90YWJsZSA9IG9jeGxwbWVtX3Bj aV90YmwsDQo+ICsJLnByb2JlID0gcHJvYmUsDQo+ICsJLnJlbW92ZSA9IG9jeGxwbWVtX3JlbW92 ZSwNCj4gKwkuc2h1dGRvd24gPSBvY3hscG1lbV9yZW1vdmUsDQoNCg0KDQpuaXRwaWNrOiB3aHkg ZG9lc24ndCB0aGUgcHJvYmUgY2FsbGJhY2sgZm9sbG93IHRoZSBzYW1lIG5hbWluZyANCmNvbnZl bnRpb24/IEl0J3MgYWxsIHN0YXRpYyBhbmQgZG9lc24ndCByZWFsbHkgbWF0dGVyLCBidXQuLi4N Cg0KICAgRnJlZA0KDQoNCg0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBfX2luaXQgb2N4bHBt ZW1faW5pdCh2b2lkKQ0KPiArew0KPiArCWludCByYyA9IDA7DQo+ICsNCj4gKwlyYyA9IHBjaV9y ZWdpc3Rlcl9kcml2ZXIoJnBjaV9kcml2ZXIpOw0KPiArCWlmIChyYykNCj4gKwkJcmV0dXJuIHJj Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG9jeGxwbWVt X2V4aXQodm9pZCkNCj4gK3sNCj4gKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBjaV9kcml2ZXIp Ow0KPiArfQ0KPiArDQo+ICttb2R1bGVfaW5pdChvY3hscG1lbV9pbml0KTsNCj4gK21vZHVsZV9l eGl0KG9jeGxwbWVtX2V4aXQpOw0KPiArDQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk9wZW5DQVBJ IFBlcnNpc3RlbnQgTWVtb3J5Iik7DQo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+IGRpZmYg LS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9vY3hsX2ludGVybmFs LmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcG1lbS9vY3hsX2ludGVybmFsLmgN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wZmFmMzc0MGU5 YjgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2Vy bnYvcG1lbS9vY3hsX2ludGVybmFsLmgNCj4gQEAgLTAsMCArMSwyOCBAQA0KPiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQo+ICsvLyBDb3B5cmlnaHQgMjAxOSBJQk0gQ29y cC4NCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiArI2luY2x1ZGUgPG1pc2Mvb2N4 bC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2xpYm52ZGltbS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L21tLmg+DQo+ICsNCj4gKyNkZWZpbmUgTEFCRUxfQVJFQV9TSVpFCSgxVUwgPDwgUEFfU0VDVElP Tl9TSElGVCkNCj4gKw0KPiArc3RydWN0IG9jeGxwbWVtX2Z1bmN0aW9uMCB7DQo+ICsJc3RydWN0 IHBjaV9kZXYgKnBkZXY7DQo+ICsJc3RydWN0IG9jeGxfZm4gKm9jeGxfZm47DQo+ICt9Ow0KPiAr DQo+ICtzdHJ1Y3Qgb2N4bHBtZW0gew0KPiArCXN0cnVjdCBkZXZpY2UgZGV2Ow0KPiArCXN0cnVj dCBwY2lfZGV2ICpwZGV2Ow0KPiArCXN0cnVjdCBvY3hsX2ZuICpvY3hsX2ZuOw0KPiArCXN0cnVj dCBuZF9pbnRlcmxlYXZlX3NldCBuZF9zZXQ7DQo+ICsJc3RydWN0IG52ZGltbV9idXNfZGVzY3Jp cHRvciBidXNfZGVzYzsNCj4gKwlzdHJ1Y3QgbnZkaW1tX2J1cyAqbnZkaW1tX2J1czsNCj4gKwlz dHJ1Y3Qgb2N4bF9hZnUgKm9jeGxfYWZ1Ow0KPiArCXN0cnVjdCBvY3hsX2NvbnRleHQgKm9jeGxf Y29udGV4dDsNCj4gKwl2b2lkICptZXRhZGF0YV9hZGRyOw0KPiArCXN0cnVjdCByZXNvdXJjZSBw bWVtX3JlczsNCj4gKwlzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb247DQo+ICt9Ow0KPiANCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LW52ZGlt bSBtYWlsaW5nIGxpc3QgLS0gbGludXgtbnZkaW1tQGxpc3RzLjAxLm9yZwpUbyB1bnN1YnNjcmli ZSBzZW5kIGFuIGVtYWlsIHRvIGxpbnV4LW52ZGltbS1sZWF2ZUBsaXN0cy4wMS5vcmcK