From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 70F82C6FA82 for ; Fri, 23 Sep 2022 13:46:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:Cc:To:Subject: From:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1L7JShtd25pdZFYSKbv+iTJhE3odKRzJuj54nYubh1g=; b=MjxoctGc6NdSDr uzVv1Bas5iY+ZGeIOAAd1Sd1pP0eu/kws8ZPZIvYSWPvQu4Ki7/mow8+V+FigLG3GLXay0R03o6xW JSLcKWgyw8Zak58U0d0QN4s4EwkxUZFZOV5bCW5xOl2OKdItqFOIAO0NKFCMBi4Bu6L3Z4yvnlHuj 5SYultzKPAm7Y9EmP7fIVWcc0RMN4Ua9c3YBFua2AST4DDc6ZLBmlsd2HgqXw2XjtSiWGfeGgDp7B acFHdntdaqb8dk08c56owBYLkI730Xs11kR7pPVeCbntnU2Q7z4hkfyQ7blsoetUHBiiQn/w3co3W RgEUCFwisGfUyflucdPQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1obizr-004UMx-Gl; Fri, 23 Sep 2022 13:45:39 +0000 Received: from out30-132.freemail.mail.aliyun.com ([115.124.30.132]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1obizk-004UL2-Jq for linux-arm-kernel@lists.infradead.org; Fri, 23 Sep 2022 13:45:37 +0000 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R121e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045192;MF=xueshuai@linux.alibaba.com;NM=1;PH=DS;RN=11;SR=0;TI=SMTPD_---0VQX7UDK_1663940723; Received: from 30.240.121.51(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0VQX7UDK_1663940723) by smtp.aliyun-inc.com; Fri, 23 Sep 2022 21:45:25 +0800 Message-ID: Date: Fri, 23 Sep 2022 21:45:23 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.13.0 From: Shuai Xue Subject: Re: [PATCH v1 2/3] drivers/perf: add DesignWare PCIe PMU driver To: Jonathan Cameron Cc: will@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, rdunlap@infradead.org, robin.murphy@arm.com, mark.rutland@arm.com, baolin.wang@linux.alibaba.com, zhuo.song@linux.alibaba.com, linux-pci@vger.kernel.org, Bjorn Helgaas References: <20220917121036.14864-1-xueshuai@linux.alibaba.com> <20220917121036.14864-3-xueshuai@linux.alibaba.com> <20220922165820.000017b6@huawei.com> Content-Language: en-US In-Reply-To: <20220922165820.000017b6@huawei.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220923_064533_058197_2ABF684A X-CRM114-Status: GOOD ( 49.69 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 5ZyoIDIwMjIvOS8yMiBQTTExOjU4LCBKb25hdGhhbiBDYW1lcm9uIOWGmemBkzoKPiBPbiBTYXQs IDE3IFNlcCAyMDIyIDIwOjEwOjM1ICswODAwCj4gU2h1YWkgWHVlIDx4dWVzaHVhaUBsaW51eC5h bGliYWJhLmNvbT4gd3JvdGU6Cj4gCj4+IFRoaXMgY29tbWl0IGFkZHMgdGhlIFBDSWUgUGVyZm9y bWFuY2UgTW9uaXRvcmluZyBVbml0IChQTVUpIGRyaXZlciBzdXBwb3J0Cj4+IGZvciBULUhlYWQg WWl0aWFuIFNvQyBjaGlwLiBZaXRpYW4gaXMgYmFzZWQgb24gdGhlIFN5bm9wc3lzIFBDSSBFeHBy ZXNzCj4+IENvcmUgY29udHJvbGxlciBJUCB3aGljaCBwcm92aWRlcyBzdGF0aXN0aWNzIGZlYXR1 cmUuIFRoZSBQTVUgaXMgbm90IGEgUENJZQo+PiBSb290IENvbXBsZXggaW50ZWdyYXRlZCBFbmQg UG9pbnQoUkNpRVApIGRldmljZSBidXQgb25seSByZWdpc3RlciBjb3VudGVycwo+PiBwcm92aWRl ZCBieSBlYWNoIFBDSWUgUm9vdCBQb3J0Lgo+Pgo+PiBUbyBmYWNpbGl0YXRlIGNvbGxlY3Rpb24g b2Ygc3RhdGlzdGljcyB0aGUgY29udHJvbGxlciBwcm92aWRlcyB0aGUKPj4gZm9sbG93aW5nIHR3 byBmZWF0dXJlcyBmb3IgZWFjaCBSb290IFBvcnQ6Cj4+Cj4+IC0gVGltZSBCYXNlZCBBbmFseXNp cyAoUlgvVFggZGF0YSB0aHJvdWdocHV0IGFuZCB0aW1lIHNwZW50IGluIGVhY2gKPj4gICBsb3ct cG93ZXIgTFRTU00gc3RhdGUpCj4+IC0gRXZlbnQgY291bnRlcnMgKEVycm9yIGFuZCBOb24tRXJy b3IgZm9yIGxhbmVzKQo+Pgo+PiBOb3RlLCBvbmx5IG9uZSBjb3VudGVyIGZvciBlYWNoIHR5cGUu Cj4+Cj4+IFRoaXMgZHJpdmVyIGFkZCBQTVUgZGV2aWNlcyBmb3IgZWFjaCBQQ0llIFJvb3QgUG9y dC4gQW5kIHRoZSBQTVUgZGV2aWNlIGlzCj4+IG5hbWVkIGJhc2VkIHRoZSBCREYgb2YgUm9vdCBQ b3J0LiBGb3IgZXhhbXBsZSwKPj4KPj4gICAgIDEwOjAwLjAgUENJIGJyaWRnZTogRGV2aWNlIDFk ZWQ6ODAwMCAocmV2IDAxKQo+Pgo+PiB0aGUgUE1VIGRldmljZSBuYW1lIGZvciB0aGlzIFJvb3Qg UG9ydCBpcyBwY2llX2JkZl8xMDAwMDAuCj4+Cj4+IEV4YW1wbGUgdXNhZ2Ugb2YgY291bnRpbmcg UENJZSBSWCBUTFAgZGF0YSBwYXlsb2FkIChVbml0cyBvZiAxNiBieXRlcyk6Ogo+Pgo+PiAgICAg JCMgcGVyZiBzdGF0IC1hIC1lIHBjaWVfYmRmXzIwMC9SeF9QQ0llX1RMUF9EYXRhX1BheWxvYWQv Cj4+Cj4+IGF2ZXJhZ2UgUlggYmFuZHdpZHRoIGNhbiBiZSBjYWxjdWxhdGVkIGxpa2UgdGhpczoK Pj4KPj4gICAgIFBDSWUgVFggQmFuZHdpZHRoID0gUENJRV9UWF9EQVRBICogMTZCIC8gTWVhc3Vy ZV9UaW1lX1dpbmRvdwo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBTaHVhaSBYdWUgPHh1ZXNodWFpQGxp bnV4LmFsaWJhYmEuY29tPgo+IAo+ICtDQyBsaW51eC1wY2kgbGlzdCBhbmQgQmpvcm4uCj4gCj4g UXVlc3Rpb24gaW4gaGVyZSB3aGljaCBJJ3ZlIGJlZW4gbWVhbmluZyB0byBhZGRyZXNzIGZvciBv dGhlciByZWFzb25zCj4gYXJvdW5kIGhvdyB0byByZWdpc3RlciAnZXh0cmEgZmVhdHVyZXMnIG9u IHBjaSBwb3J0cy4KPiAKPiBUaGlzIHBhcnRpY3VsYXIgUE1VIGlzIGluIGNvbmZpZyBzcGFjZSBp biBhIFZlbmRvciBTcGVjaWZpYyBFeHRlbmRlZAo+IENhcGFiaWxpdHkuCj4gCj4gSSd2ZSBmb2N1 c2VkIG9uIHRoYXQgYXNwZWN0IGZvciB0aGlzIHJldmlldyByYXRoZXIgdGhhbiB0aGUgcGVyZiBw YXJ0cy4KPiBXZSdsbCBuZWVkIHRvIGZpZ3VyZSB0aGF0IHN0b3J5IG91dCBmaXJzdCBhcyBkb2lu ZyB0aGlzIGZyb20gYSBidXMgd2Fsawo+IG1ha2VzIHRyaWdnZXJlZCBvZiBhIHBsYXRmb3JtIGRy aXZlciBpcyBub3QgdGhlIHdheSBJJ2QgZXhwZWN0IHRvIHNlZQo+IHRoaXMgd29yay4KClRoYW5r IHlvdSBmb3IgeW91ciB2YWx1YWJsZSBjb21tZW50cy4gUGxlYXNlIHNlZSBteSByZXBseSBpbmxp bmUuCgpCZXN0IFJlZ2FyZHMsClNodWFpCgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wZXJmL2R3 Y19wY2llX3BtdS5jIGIvZHJpdmVycy9wZXJmL2R3Y19wY2llX3BtdS5jCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uODFlNTM0YmUxM2ZhCj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZHJpdmVycy9wZXJmL2R3Y19wY2llX3BtdS5jCj4+IEBAIC0wLDAgKzEs OTc2IEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+PiArLyoKPj4g KyAqIFN5bm9wc3lzIERlc2lnbldhcmUgUENJZSBQTVUgZHJpdmVyCj4+ICsgKgo+PiArICogQ29w eXJpZ2h0IChDKSAyMDIxLCAyMDIyIEFsaWJhYmEgSW5jLgo+PiArICovCj4+ICvCoAo+PiArI2lu Y2x1ZGUgPGxpbnV4L3BjaS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvYml0b3BzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvY3B1aG90cGx1Zy5o Pgo+PiArI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZXZp Y2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9w ZXJmX2V2ZW50Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvc21wLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPgo+PiArCj4+ICsjZGVmaW5lIERSVl9OQU1FCQkJCSJkd2Nf cGNpZV9wbXUiCj4+ICsjZGVmaW5lIERFVl9OQU1FCQkJCSJkd2NfcGNpZV9wbXUiCj4gUHV0IHRo ZXNlIHN0cmluZ3Mgd2hlcmUgdGhleSBhcmUgdXNlZC4gIFRoYXQncyB3aGVyZSBwZW9wbGUgd2ls bCBsb29rIGZvciB0aGVtLi4uCgpHb3QgaXQuIFdpbGwgdXNlIHN0cmluZ3MgZGlyZWN0bHkgaW4g bmV4dCB2ZXJzaW9uLgoKPiAKPj4gKyNkZWZpbmUgUlBfTlVNX01BWAkJCQkzMiAvKiAyZGllICog NFJDICogNEN0cm9sICovCj4gCj4gVGhpcyBkcml2ZXIgaXMgJ2FsbW9zdCcgZ2VuZXJpYy4gU28g aWYgeW91IGFuIGF2b2lkIGRlZmluZXMgYmFzZWQgb24gYSBwYXJ0aWN1bGFyCj4gcGxhdGZvcm0g dGhhdCdzIGRlZmluaXRlbHkgZ29vZCEKCkdvb2QgaWRlYS4gSG93IGFib3V0IGRlZmluaW5nIFJQ X05VTV9NQVggYXMgNjQ/IEFzIGZhcnMgYXMgSSBrbm93LApzb21lIHBsYXRmcm9tIHVzZSAyIHNv Y2tldHMsIDIgZGllIHBlciBzb2NrZXQuClRoZW4gMiBzb2NrZXRzICogMiBkaWVzICogNCBSb290 IENvbXBsZXggKiA0IHJvb3QgcG9ydC4KCj4gCj4+ICsjZGVmaW5lIEFUVFJJX05BTUVfTUFYX1NJ WkUJCQkzMgo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX1ZTRUNfSUQJCQkweDAyCj4+ICsjZGVm aW5lIERXQ19QQ0lFX1ZTRUNfUkVWCQkJMHgwNAo+IAo+IEkgd291bGRuJ3QgZGVmaW5lIHRoZSBS RVYgbGlrZSB0aGlzLiBQdXQgdGhlIG51bWJlciBpbmxpbmUgc28gd2UKPiBjYW4gY2xlYXJseSBz ZWUgdGhpcyBpcyByZXZpc2lvbiA0LiAgVlNFQ19JRCB3b24ndCBjaGFuZ2Ugc28gYQo+IGRlZmlu ZSBmb3IgdGhhdCBpcyBmaW5lLgoKSSBzZWUuIEkgd2lsbCB1c2UgMHgwNCBpbnN0ZWFkIFJFViBt YWNybyBpbiBuZXh0IHZlcnNpb24uCgo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0xJTktfQ0FQ QUJJTElUSUVTX1JFRwkJMHhDCj4gVGhpcyBpcyBQQ0lFIHNwZWMgZGVmaW5lZC4gIFB1dCB0aGVz ZSBpbiBhIGNvbW1vbiBoZWFkZXIuCgpHb29kIGNhdGNoLCBJIHdpbGwgZml4IGluIG5leHQgdmVy c2lvbi4KCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0xBTkVfU0hJRlQJCQk0Cj4+ICsjZGVmaW5lIERX Q19QQ0lFX0xBTkVfTUFTSwkJCUdFTk1BU0soOSwgNCkKPj4gKwo+PiArI2RlZmluZSBEV0NfUENJ RV9FVkVOVF9DTlRfQ1RSTAkJCTB4OAo+PiArI2RlZmluZSBEV0NfUENJRV9fQ05UX0VWRU5UX1NF TEVDVF9TSElGVAkxNgo+IAo+IFdoeSBkb3VibGUgX18/ICBJZiBwb2ludCBpcyAsIHRoZW4KPiBu YW1pbmcgd29ya3MgYmV0dGVyCj4gRFdDX1BDSUVfRVZFTlRfQ05UX0NUUkxfUkVHCj4gRFdDX1BD SUVfRVZFTlRfQ05UX0NUUkxfRVZfU0VMRUNUX01TSyBldGMKClllcywgSSBwb2ludCB0byB1c2Ug ZG91YmxlIGBfX2AgdG8gaW5kaWNhdGUgaXQgaXMgYSBmaWVsZCBvZiByZWdpc3RlciwKYXMgQ01O IGFuZCBDQ04gZHJpdmVycyBkby4gSSBhbHNvIGNvbnNpZGVyZWQgbmFtaW5nIHdpdGggUkVHIGV4 cGxpY2l0bHksCmJ1dCB0aGUgbWFjcm8gaXMgc28gbG9uZyB0aGF0IEkgb2Z0ZW4gaGF2ZSB0byB3 cmFwIGNvZGUgaW50byBtdWx0aWxpbmVzLgpBbnkgd2F5LCBpdCdzIGZpbmUgdG8gcmVuYW1lIGlm IHlvdSBzdGlsbCBzdWdnZXN0IHRvIGRvIHNvLgoKPiAKPj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NO VF9FVkVOVF9TRUxFQ1RfTUFTSwkJR0VOTUFTSygyNywgMTYpCj4+ICsjZGVmaW5lIERXQ19QQ0lF X19DTlRfTEFORV9TRUxFQ1RfU0hJRlQJCTgKPj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9MQU5F X1NFTEVDVF9NQVNLCQlHRU5NQVNLKDExLCA4KQo+PiArI2RlZmluZSBEV0NfUENJRV9fQ05UX1NU QVRVU19TSElGVAkJNwo+PiArI2RlZmluZSBEV0NfUENJRV9fQ05UX1NUQVRVU19NQVNLCQlCSVQo NykKPj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9FTkFCTEVfU0hJRlQJCTIKPiAKPiBXaXRoIEZJ RUxEX1BSRVAoKSAvIEZJRUxEX0dFVCgpIHlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBkZWZpbmUg dGhlIHNoaWZ0cy4KPiBUaGV5IHdpbGwgYmUgZXh0cmFjdGVkIGZyb20gdGhlIG1hc2tzIGFzIG5l ZWRlZC4KPiAKPj4gKyNkZWZpbmUgRFdDX1BDSUVfX0NOVF9FTkFCTEVfTUFTSwkJR0VOTUFTSyg0 LCAyKQo+PiArI2RlZmluZSBEV0NfUENJRV9QRVJfRVZFTlRfT0ZGCQkJKDB4MSA8PCBEV0NfUENJ RV9fQ05UX0VOQUJMRV9TSElGVCkKPiBGSUVMRF9QUkVQKCkgLyBGSUVMRF9HRVQoKSBjb21iaW5l ZCB3aXRoIGRlZmluZXMgZm9yIHRoZSB2YWx1ZXMuCj4gCj4gI2RlZmluZSBEV0NfUENJRV9DTlRf RU5BQkxFX01BU0sgLi4uCgpHb3QgaXQsIEkgd2lsbCB1c2UgRklFTERfUFJFUCgpIC8gRklFTERf R0VUKCkgdG8gcmVtb3ZlIFNISUZUIG1pY3JvcwphbmQgaW1wcm92ZSBjb2RlIHJlYWRhYmlsaXR5 LgoKPiAKPj4gKyNkZWZpbmUgRFdDX1BDSUVfUEVSX0VWRU5UX09OCQkJKDB4MyA8PCBEV0NfUENJ RV9fQ05UX0VOQUJMRV9TSElGVCkKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfQ0xFQVJfTUFT SwkJR0VOTUFTSygxLCAwKQo+PiArCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0VWRU5UX0NOVF9EQVRB CQkJMHhDCj4+ICsKPj4gKyNkZWZpbmUgRFdDX1BDSUVfVElNRV9CQVNFRF9BTkFMWVNJU19DVFJM CTB4MTAKPj4gKyNkZWZpbmUgRFdDX1BDSUVfX1RJTUVfQkFTRURfUkVQT1JUX1NFTEVDVF9TSElG VAkyNAo+PiArI2RlZmluZSBEV0NfUENJRV9fVElNRV9CQVNFRF9SRVBPUlRfU0VMRUNUX01BU0sJ R0VOTUFTSygzMSwgMjQpCj4+ICsjZGVmaW5lIERXQ19QQ0lFX19USU1FX0JBU0VEX0RVUkFUSU9O X1NISUZUCTgKPj4gKyNkZWZpbmUgRFdDX1BDSUVfX1RJTUVfQkFTRURfRFVSQVRJT05fU0VMRUNU CUdFTk1BU0soMTUsIDgpCj4+ICsjZGVmaW5lIERXQ19QQ0lFX0RVUkFUSU9OX01BTlVBTF9DVFJM CQkweDAKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fMU1TCQkJMHgxCj4+ICsjZGVmaW5l IERXQ19QQ0lFX0RVUkFUSU9OXzEwTVMJCQkweDIKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJ T05fMTAwTVMJCQkweDMKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fMVMJCQkweDQKPj4g KyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fMlMJCQkweDUKPj4gKyNkZWZpbmUgRFdDX1BDSUVf RFVSQVRJT05fNFMJCQkweDYKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRFVSQVRJT05fNFVTCQkJMHhm Zgo+PiArI2RlZmluZSBEV0NfUENJRV9fVElNRV9CQVNFRF9DT1VOVEVSX0VOQUJMRQkxCj4+ICsK Pj4gKyNkZWZpbmUgRFdDX1BDSUVfVElNRV9CQVNFRF9BTkFMWVNJU19EQVRBX1JFR19MT1cJMHgx NAo+PiArI2RlZmluZSBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0RBVEFfUkVHX0hJR0gJ MHgxOAo+PiArCj4+ICsvKiBFdmVudCBhdHRyaWJ1dGVzICovCj4+ICsjZGVmaW5lIERXQ19QQ0lF X0NPTkZJR19FVkVOVElECQkJR0VOTUFTSygxNSwgMCkKPj4gKyNkZWZpbmUgRFdDX1BDSUVfQ09O RklHX1RZUEUJCQlHRU5NQVNLKDE5LCAxNikKPj4gKyNkZWZpbmUgRFdDX1BDSUVfQ09ORklHX0xB TkUJCQlHRU5NQVNLKDI3LCAyMCkKPj4gKwo+PiArI2RlZmluZSBEV0NfUENJRV9FVkVOVF9JRChl dmVudCkJRklFTERfR0VUKERXQ19QQ0lFX0NPTkZJR19FVkVOVElELCAoZXZlbnQpLT5hdHRyLmNv bmZpZykKPj4gKyNkZWZpbmUgRFdDX1BDSUVfRVZFTlRfVFlQRShldmVudCkJRklFTERfR0VUKERX Q19QQ0lFX0NPTkZJR19UWVBFLCAoZXZlbnQpLT5hdHRyLmNvbmZpZykKPj4gKyNkZWZpbmUgRFdD X1BDSUVfRVZFTlRfTEFORShldmVudCkJRklFTERfR0VUKERXQ19QQ0lFX0NPTkZJR19MQU5FLCAo ZXZlbnQpLT5hdHRyLmNvbmZpZykKPj4gKwo+PiArI2RlZmluZSBEV0NfUENJRV9QTVVfSEFTX1JF R0lTVEVSCQkxCj4+ICsKPj4gK2VudW0gZHdjX3BjaWVfZXZlbnRfdHlwZSB7Cj4+ICsJRFdDX1BD SUVfVFlQRV9JTlZBTElELAo+PiArCURXQ19QQ0lFX1RJTUVfQkFTRV9FVkVOVCwKPj4gKwlEV0Nf UENJRV9MQU5FX0VWRU5ULAo+PiArfTsKPj4gKwo+PiArc3RydWN0IGR3Y19ldmVudF9jb3VudGVy cyB7Cj4+ICsJY29uc3QgY2hhciBuYW1lWzMyXTsKPj4gKwl1MzIgZXZlbnRfaWQ7Cj4+ICt9Owo+ PiArCj4+ICtzdHJ1Y3QgZHdjX3BjaWVfcG11IHsKPj4gKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2Rl Owo+PiArCXVuc2lnbmVkIGludCBvbl9jcHU7Cj4+ICsJc3RydWN0IHBtdSBwbXU7Cj4+ICsJc3Ry dWN0IGRldmljZSAqZGV2Owo+PiArfTsKPj4gKwo+PiArc3RydWN0IGR3Y19wY2llX2luZm9fdGFi bGUgewo+PiArCXUzMiBiZGY7Cj4+ICsJdTMyIGNhcF9wb3M7Cj4+ICsJdTMyIG51bV9sYW5lczsK Pj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKPj4gKwlzdHJ1Y3QgZHdjX3BjaWVfcG11IHBjaWVf cG11Owo+PiArCXU4IHBtdV9pc19yZWdpc3RlcjsKPj4gKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZl bnQ7Cj4+ICsKPj4gKwlzdHJ1Y3QgZHdjX3BjaWVfZXZlbnRfYXR0ciAqbGFuZV9ldmVudF9hdHRy czsKPj4gKwlzdHJ1Y3QgYXR0cmlidXRlICoqcGNpZV9wbXVfZXZlbnRfYXR0cnM7Cj4+ICsJc3Ry dWN0IGF0dHJpYnV0ZV9ncm91cCBwY2llX3BtdV9ldmVudF9hdHRyc19ncm91cDsKPj4gKwljb25z dCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpwY2llX3BtdV9hdHRyX2dyb3Vwc1s0XTsKPj4gK307 Cj4+ICsKPj4gK3N0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiB7Cj4+ICsJc3RydWN0IGRldmljZSAq ZGV2Owo+PiArCXUzMiBwY2llX2N0cmxfbnVtOwo+PiArCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3Rh YmxlICpwY2llX3RhYmxlOwo+PiArfTsKPj4gKwo+PiArI2RlZmluZSBEV0NfUENJRV9DUkVBVEVf QkRGKHNlZywgYnVzLCBkZXYsIGZ1bmMpCVwKPj4gKwkoKChzZWcpIDw8IDI0KSB8ICgoKGJ1cykg JiAweEZGKSA8PCAxNikgfCAoKChkZXYpICYgMHhGRikgPDwgOCkgfCAoZnVuYykpCj4gCj4gU3Vw ZXJmaWNpYWxseSB0aGlzIGxvb2tzIHByZXR0eSBzdGFuZGFyZC4gIFdoeSBpcyBpcyBEV0Mgc3Bl Y2lmaWM/CgpZb3UgYXJlIHJpZ2h0LCBpdCBpcyBub3QgRFdDIHNwZWNpZmljLgoKSSBmb3VuZCBh IHNpbWlsYXIgZGVmaW5pdGlvbiBpbiBhcmNoL2lhNjQvcGNpL3BjaS5jIC4KCgkjZGVmaW5lIFBD SV9TQUxfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZykJCVwKCSgoKHU2NCkgc2VnIDw8IDI0 KSB8IChidXMgPDwgMTYpIHwgKGRldmZuIDw8IDgpIHwgKHJlZykpCgpTaG91bGQgd2UgbW92ZSBp dCBpbnRvIGEgY29tbW9uIGhlYWRlciBmaXJzdD8KCj4gCj4+ICsjZGVmaW5lIHRvX3BjaWVfcG11 KHApIChjb250YWluZXJfb2YocCwgc3RydWN0IGR3Y19wY2llX3BtdSwgcG11KSkKPiAKPiBQcmVm aXggdGhhdCBuYW1lLiAgSSdtIGhvcGVmdWwgd2UnbGwgaGF2ZSBhIFBDSSBTSUcgZGVmaW5lZCBQ TVUgb25lCj4gZGF5IGFuZCB3aGVuIHdlIGRvIHRoYXQgbWFjcm8gYmVsb25ncyB0byB0aGF0IQo+ IHRvX2R3Y19wY2llX3BtdSgpIGlzIHBvc3NpYmx5IGZpbmUuCgpJIGVudGlyZWx5IGFncmVlIHRo YXQgYSBzdGFuZGFyZCBkZWZpbml0aW9uIGlzIHByZWZlcnJlZC4KV2lsbCB1c2UgdG9fZHdjX3Bj aWVfcG11IGluc3RlYWQgaW4gbmV4dCB2ZXJzaW9uLgoKPiAKPj4gKwo+PiArc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKmR3Y19wY2llX3BtdV9kZXY7Cj4+ICtzdGF0aWMgY2hhciAqZXZl bnRfYXR0cl9uYW1lID0gImV2ZW50cyI7Cj4+ICsKPiAKPiAKPiAuLi4KPiAKPj4gKwo+PiArc3Rh dGljIGludCBkd2NfcGNpZV9maW5kX3Jhc19kZXNfY2FwX3Bvc2l0aW9uKHN0cnVjdCBwY2lfZGV2 ICpwZGV2LCBpbnQgKnBvcykKPj4gK3sKPj4gKwl1MzIgaGVhZGVyOwo+PiArCWludCB2c2VjID0g MDsKPj4gKwo+PiArCXdoaWxlICgodnNlYyA9IHBjaV9maW5kX25leHRfZXh0X2NhcGFiaWxpdHko cGRldiwgdnNlYywKPj4gKwkJCQkJCSAgICBQQ0lfRVhUX0NBUF9JRF9WTkRSKSkpIHsKPiAKPiBU aGlzIHByb2JhYmx5IGJlbG9uZ3MgaW4gdGhlIFBDSSBjb3JlIGluIGEgc2ltaWxhciBmYXNoaW9u IHRvIHRoZSBEVlNFQwo+IGhlbHBlci4KPiAKPj4gKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBk ZXYsIHZzZWMgKyBQQ0lfVk5EUl9IRUFERVIsICZoZWFkZXIpOwo+PiArCQkvKiBJcyB0aGUgZGV2 aWNlIHBhcnQgb2YgYSBEZXNpZ25XYXJlIENvcmVzIFBDSWUgQ29udHJvbGxlciA/ICovCj4gCj4g R29vZCBxdWVzdGlvbi4uLiBUaGlzIGNvZGUgZG9lc24ndCBjaGVjayB0aGF0LiAgVlNFQyBJRCBp cyBtYXRjaGVkIG9ubHkgd2l0aAo+IHRoZSBWZW5kb3IgSUQgb2YgdGhlIGRldmljZXMgLSB1bmxp a2UgRFZTRUMgd2hlcmUgdGhpcyB3b3VsZCBhbGwgYmUgbmljZQo+IGFuZCBsb2NhbC4KCkkgdGhp bmsgYSBzaW1pbGFyIGZhc2hpb24gaXMKCgl1MTYgcGNpX2ZpbmRfdnNlY19jYXBhYmlsaXR5KHN0 cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiB2ZW5kb3IsIGludCBjYXApCgpBcyB5b3Ugc2VlLCBJIGRv bid0IHdhbnQgdG8gbGltaXQgdGhpcyBkcml2ZXIgdG8gYSBzcGVjaWZpYyB2ZW5kb3IsIGxpa2UK QWxpYmFiYSAoMHgxZGVkKSwgYmVjYXVzZSB0aGlzIGRyaXZlciBpcyBnZW5lcmljIHRvIGFsbCBE ZXNpZ25XYXJlIENvcmVzIFBDSWUKQ29udHJvbGxlci4gVGhlcmVmb3JlLCBkd2NfcGNpZV9maW5k X3Jhc19kZXNfY2FwX3Bvc2l0aW9uIGRvZXMgbm90IGNoZWNrIHZlbmRvcgpsaWtlIHBjaV9maW5k X3ZzZWNfY2FwYWJpbGl0eS4KCkRvIHlvdSBtZWFuIHRvIHVzZSBEVlNFQyBpbnN0ZWFkPyBJIHRy eSB0byByZWFkIG91dCBEVlNFQyB3aXRoIGxzcGNpOgoKICAgICMgbHNwY2kgLXZ2dgogICAgYjA6 MDAuMCBQQ0kgYnJpZGdlOiBBbGliYWJhIChDaGluYSkgQ28uLCBMdGQuIE0xIFJvb3QgUG9ydCAo cmV2IDAxKSAocHJvZy1pZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICBbLi4uc25pcC4uLl0KICAg ICAgICBDYXBhYmlsaXRpZXM6IFszNzQgdjFdIFZlbmRvciBTcGVjaWZpYyBJbmZvcm1hdGlvbjog SUQ9MDAwMiBSZXY9NCBMZW49MTAwIDw/PgogICAgICAgIENhcGFiaWxpdGllczogWzQ3NCB2MV0g VmVuZG9yIFNwZWNpZmljIEluZm9ybWF0aW9uOiBJRD0wMDAxIFJldj0xIExlbj0wMzggPD8+CiAg ICAgICAgQ2FwYWJpbGl0aWVzOiBbNGFjIHYxXSBEYXRhIExpbmsgRmVhdHVyZSA8Pz4KICAgICAg ICBDYXBhYmlsaXRpZXM6IFs0YjggdjFdIERlc2lnbmF0ZWQgVmVuZG9yLVNwZWNpZmljOiBWZW5k b3I9MDAwMSBJRD0wMDAwIFJldj0xIExlbj02NCA8Pz4KICAgICAgICBDYXBhYmlsaXRpZXM6IFs0 ZmMgdjFdIFZlbmRvciBTcGVjaWZpYyBJbmZvcm1hdGlvbjogSUQ9MDAwNSBSZXY9MSBMZW49MDE4 IDw/PgoKSG93IGNhbiB3ZSB0ZWxsIGl0J3MgYSBEZXNpZ25XYXJlIENvcmVzIFBDSWUgQ29udHJv bGxlcj8KCgo+PiArCQlpZiAoUENJX1ZORFJfSEVBREVSX0lEKGhlYWRlcikgPT0gRFdDX1BDSUVf VlNFQ19JRCAmJgo+PiArCQkgICAgUENJX1ZORFJfSEVBREVSX1JFVihoZWFkZXIpID09IERXQ19Q Q0lFX1ZTRUNfUkVWKSB7Cj4+ICsJCQkqcG9zID0gdnNlYzsKPj4gKwkJCXJldHVybiAwOwo+PiAr CQl9Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIC1FTk9ERVY7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgZHdjX3BjaWVfcG11X2Rpc2NvdmVyKHN0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAqcHJp dikKPj4gK3sKPj4gKwlpbnQgdmFsLCB3aGVyZSwgaW5kZXggPSAwOwo+PiArCXN0cnVjdCBwY2lf ZGV2ICpwZGV2ID0gTlVMTDsKPj4gKwlzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZSAqcGNpZV9p bmZvOwo+PiArCj4+ICsJcHJpdi0+cGNpZV90YWJsZSA9Cj4+ICsJICAgIGRldm1fa2NhbGxvYyhw cml2LT5kZXYsIFJQX05VTV9NQVgsIHNpemVvZigqcGNpZV9pbmZvKSwgR0ZQX0tFUk5FTCk7Cj4+ ICsJaWYgKCFwcml2LT5wY2llX3RhYmxlKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiAr CXBjaWVfaW5mbyA9IHByaXYtPnBjaWVfdGFibGU7Cj4+ICsJd2hpbGUgKChwZGV2ID0gcGNpX2dl dF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGRldikpICE9IE5VTEwgJiYKPj4gKwkg ICAgICAgaW5kZXggPCBSUF9OVU1fTUFYKSB7Cj4gCj4gVGhpcyBoYXZpbmcgYSBkcml2ZXIgdGhh biB0aGVuIHdhbGtzIHRoZSBwY2kgdG9wb2xvZ3kgdG8gZmluZCByb290IHBvcnRzIGFuZCBhZGQK PiBleHRyYSBzdHVmZiB0byB0aGVtIGlzIG5vdCBhIGNsZWFuIHNvbHV0aW9uLgo+IAo+IFRoZSBw cm9iaW5nIHNob3VsZCBiZSBkcml2ZW4gZnJvbSB0aGUgZXhpc3RpbmcgUENJIGRyaXZlciB0b3Bv bG9neS4KPiBUaGVyZSBhcmUgYSBidW5jaCBvZiBuZXcgZmVhdHVyZXMgd2UgbmVlZCB0byBhZGQg dG8gcG9ydHMgaW4gdGhlIG5lYXIgZnV0dXJlCj4gYW55d2F5IC0gdGhpcyB3b3VsZCBqdXN0IGJl IGFub3RoZXIgb25lLgo+IFNhbWUgcHJvYmxlbSBleGlzdHMgZm9yIENYTCBDUE1VIHBlcmYgZGV2 aWNlcyAtIHNvIGZhciB3ZSBvbmx5IHN1cHBvcnQgdGhvc2UKPiBvbiBlbmQgcG9pbnRzLCBwYXJ0 bHkgYmVjYXVzZSB3ZSBuZWVkIGEgY2xlYW4gd2F5IHRvIHByb2JlIHRoZW0gb24gcGNpIHBvcnRz Lgo+IAo+IFdoYXRldmVyIHdlIGNvbWUgdXAgd2l0aCB0aGVyZSB3aWxsIGFwcGx5IGhlcmUgYXMg d2VsbC4KCkkgc2VlIHlvdXIgcG9pbnQuIEFueSBsaW5rIHRvIHJlZmVyZW5jZT8KCj4gCj4+ICsJ CWlmICghcGNpX2Rldl9pc19yb290cG9ydChwZGV2KSkKPj4gKwkJCWNvbnRpbnVlOwo+PiArCj4+ ICsJCXBjaWVfaW5mb1tpbmRleF0uYmRmID0gZHdjX3BjaWVfZ2V0X2JkZihwZGV2KTsKPj4gKwkJ cGNpZV9pbmZvW2luZGV4XS5wZGV2ID0gcGRldjsKPiBQcm9iYWJseSB3YW50IGEgc2FuaXR5IGNo ZWNrIHRoaXMgaGFzIGEgdmVuZG9yIElEIGFwcHJvcHJpYXRlIHRoZSBWU0VDIHlvdSBhcmUgYWJv dXQKPiB0byBsb29rIGZvci4KCklmIEkgY2hlY2sgdGhlIHZlbmRvciBJRCBoZXJlIG9yIGluIGR3 Y19wY2llX2ZpbmRfcmFzX2Rlc19jYXBfcG9zaXRpb24sIHRoaXMgZHJpdmVyCndpbGwgb25seSB3 b3JrIGZvciBBbGliYWJhIGFzIEkgbWVudGlvbmVkIGJlZm9yZS4KCj4gCj4+ICsKPj4gKwkJaWYg KGR3Y19wY2llX2ZpbmRfcmFzX2Rlc19jYXBfcG9zaXRpb24ocGRldiwgJndoZXJlKSkKPj4gKwkJ CWNvbnRpbnVlOwo+PiArCj4+ICsJCXBjaWVfaW5mb1tpbmRleF0uY2FwX3BvcyA9IHdoZXJlOwo+ PiArCj4+ICsJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAo+PiArCQkJCXBkZXYtPnBjaWVf Y2FwICsgRFdDX1BDSUVfTElOS19DQVBBQklMSVRJRVNfUkVHLAo+PiArCQkJCSZ2YWwpOwo+PiAr CQlwY2llX2luZm9baW5kZXhdLm51bV9sYW5lcyA9Cj4+ICsJCQkodmFsICYgRFdDX1BDSUVfTEFO RV9NQVNLKSA+PiBEV0NfUENJRV9MQU5FX1NISUZUOwo+IAo+IEZJRUxEX0dFVCgpCgpXaWxsIGZp eCBpbiBuZXh0IHZlcnNpb24uCgo+IAo+PiArCQlpbmRleCsrOwo+PiArCX0KPj4gKwo+PiArCWlm ICghaW5kZXgpCj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCj4+ICsJcHJpdi0+cGNpZV9jdHJs X251bSA9IGluZGV4Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bmxpbmUgaW50IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHN0cnVjdCBkd2NfcGNpZV9pbmZvX3Rh YmxlICpwY2llX2luZm8sCj4+ICsJCQkJCSAgdTMyIHJlZywgdTMyICp2YWwpCj4+ICt7Cj4+ICsJ cmV0dXJuIHBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2llX2luZm8tPnBkZXYsIHBjaWVfaW5mby0+ Y2FwX3BvcyArIHJlZywKPj4gKwkJCQkgICAgIHZhbCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bmxpbmUgaW50IGR3Y19wY2llX3BtdV93cml0ZV9kd29yZChzdHJ1Y3QgZHdjX3BjaWVfaW5mb190 YWJsZQo+PiArCQkJCQkgICAqcGNpZV9pbmZvLCB1MzIgcmVnLCB1MzIgdmFsKQo+PiArewo+PiAr CXJldHVybiBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaWVfaW5mby0+cGRldiwgcGNpZV9pbmZv LT5jYXBfcG9zICsgcmVnLAo+PiArCQkJCSAgICAgIHZhbCk7Cj4+ICt9Cj4gCj4gVGhlc2UgdHdv IHdyYXBwZXJzIGRvbid0IGFkZCBhIGxvdCBzbyBJIHdvdWxkIGRyb3AgdGhlbS4KCkkgc2VlLCBJ IHdpbGwgdXNlIHBjaV97d3JpdGUvcmVhZH1fY29uZmlnX2R3b3JkIGRpcmVjdGx5LgoKPiAKPj4g Kwo+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfc2V0X2V2ZW50X2lkKHN0cnVjdCBkd2NfcGNp ZV9pbmZvX3RhYmxlICpwY2llX2luZm8sCj4+ICsJCQkJICAgICBpbnQgZXZlbnRfaWQpCj4+ICt7 Cj4+ICsJaW50IHJldDsKPj4gKwl1MzIgdmFsOwo+PiArCj4+ICsJcmV0ID0gZHdjX3BjaWVfcG11 X3JlYWRfZHdvcmQocGNpZV9pbmZvLCBEV0NfUENJRV9FVkVOVF9DTlRfQ1RSTCwgJnZhbCk7Cj4+ ICsJaWYgKHJldCkgewo+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+cGRldiwgIlBDSWUgcmVhZCBm YWlsXG4iKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwl2YWwgJj0gfkRXQ19Q Q0lFX19DTlRfRU5BQkxFX01BU0s7Cj4+ICsJdmFsICY9IH5EV0NfUENJRV9fQ05UX0VWRU5UX1NF TEVDVF9NQVNLOwo+PiArCXZhbCB8PSBldmVudF9pZCA8PCBEV0NfUENJRV9fQ05UX0VWRU5UX1NF TEVDVF9TSElGVDsKPiAKPiBGSUVMRF9QUkVQKCkKCldpbGwgZml4IGluIG5leHQgdmVyc2lvbi4K Cgo+PiArCj4+ICsJcmV0ID0gZHdjX3BjaWVfcG11X3dyaXRlX2R3b3JkKHBjaWVfaW5mbywgRFdD X1BDSUVfRVZFTlRfQ05UX0NUUkwsIHZhbCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcGNpX2Vycihw Y2llX2luZm8tPnBkZXYsICJQQ0llIHdyaXRlIGZhaWxcbiIpOwo+PiArCj4+ICsJcmV0dXJuIHJl dDsKPj4gK30KPiAKPiAuLi4KPiAKPj4gKwo+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfcmVh ZF9iYXNlX3RpbWVfY291bnRlcihzdHJ1Y3QgZHdjX3BjaWVfaW5mb190YWJsZQo+PiArCQkJCQkg ICAgICAgKnBjaWVfaW5mbywgdTY0ICpjb3VudGVyKQo+PiArewo+PiArCXUzMiByZXQsIHZhbDsK Pj4gKwo+PiArCXJldCA9IGR3Y19wY2llX3BtdV9yZWFkX2R3b3JkKHBjaWVfaW5mbywKPj4gKwkJ CQkgICAgICBEV0NfUENJRV9USU1FX0JBU0VEX0FOQUxZU0lTX0RBVEFfUkVHX0hJR0gsCj4+ICsJ CQkJICAgICAgJnZhbCk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlwY2lfZXJyKHBjaWVfaW5mby0+ cGRldiwgIlBDSWUgcmVhZCBmYWlsXG4iKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsK Pj4gKwkqY291bnRlciA9IHZhbDsKPj4gKwkqY291bnRlciA8PD0gMzI7Cj4gCj4gVGhpcyBsb29r cyBsaWtlIHlvdSBjb3VsZCBnZXQgcmlwcGluZyBiZXR3ZWVuIHRoZSB1cHBlciBhbmQgbG93ZXIg ZHdvcmRzLgo+IFdoYXQgcHJldmVudHMgdGhhdD8gUGVyaGFwcyBhIGNvbW1lbnQgdG8gc2F5IHdo eSB0aGF0J3Mgbm90IGEgcHJvYmxlbT8KClRoZSBUaW1lLWJhc2VkIEFuYWx5c2lzIERhdGEgd2hp Y2ggY29udGFpbnMgdGhlIG1lYXN1cmVtZW50IHJlc3VsdHMgb2YKUlgvVFggZGF0YSB0aHJvdWdo cHV0IGFuZCB0aW1lIHNwZW50IGluIGVhY2ggbG93LXBvd2VyIExUU1NNIHN0YXRlIGlzIDY0IGJp dC4KVGhlIGRhdGEgaXMgcHJvdmlkZWQgYnkgdHdvIDMyIGJpdCByZWdpc3RlcnMgc28gSSByaXAg dGhlbSB0b2dldGhlci4gSSB3aWxsCmFkZCBhIGNvbW1lbnQgaGVyZSBpbiBuZXh0IHZlcmlzb24u Cgo+IAo+PiArCj4+ICsJcmV0ID0gZHdjX3BjaWVfcG11X3JlYWRfZHdvcmQocGNpZV9pbmZvLAo+ PiArCQkJCSAgICAgIERXQ19QQ0lFX1RJTUVfQkFTRURfQU5BTFlTSVNfREFUQV9SRUdfTE9XLAo+ PiArCQkJCSAgICAgICZ2YWwpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJcGNpX2VycihwY2llX2lu Zm8tPnBkZXYsICJQQ0llIHJlYWQgZmFpbFxuIik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+ PiArCj4+ICsJKmNvdW50ZXIgKz0gdmFsOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPiAu Li4KPiAKPiAKPj4gK3N0YXRpYyBpbnQgX19kd2NfcGNpZV9wbXVfcHJvYmUoc3RydWN0IGR3Y19w Y2llX3BtdV9wcml2ICpwcml2LAo+PiArCQkJCXN0cnVjdCBkd2NfcGNpZV9pbmZvX3RhYmxlICpw Y2llX2luZm8pCj4+ICt7Cj4+ICsJaW50IHJldDsKPj4gKwljaGFyICpuYW1lOwo+PiArCXN0cnVj dCBkd2NfcGNpZV9wbXUgKnBjaWVfcG11Owo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwo+ PiArCWlmICghcGNpZV9pbmZvIHx8ICFwY2llX2luZm8tPnBkZXYpIHsKPj4gKwkJcGNpX2Vycihw Y2llX2luZm8tPnBkZXYsICJJbnB1dCBwYXJhbWV0ZXIgaXMgaW52YWxpZFxuIik7Cj4+ICsJCXJl dHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCXBjaWVfcG11ID0gJnBjaWVfaW5mby0+cGNp ZV9wbXU7Cj4+ICsJZGV2ID0gJnBjaWVfaW5mby0+cGRldi0+ZGV2Owo+PiArCj4+ICsJcmV0ID0g ZHdjX3BjaWVfcG11X2F0dHJfaW5pdChwcml2LCBwY2llX2luZm8pOwo+PiArCWlmIChyZXQpIHsK Pj4gKwkJcGNpX2VycihwY2llX2luZm8tPnBkZXYsICJQTVUgYXR0ciBpbml0IGZhaWwgcmV0PSVk XG4iLCByZXQpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXBjaWVfcG11LT5k ZXYgPSBkZXY7Cj4+ICsJcGNpZV9wbXUtPnBtdSA9IChzdHJ1Y3QgcG11KSB7Cj4+ICsJCS5tb2R1 bGUJCT0gVEhJU19NT0RVTEUsCj4+ICsJCS50YXNrX2N0eF9ucgk9IHBlcmZfaW52YWxpZF9jb250 ZXh0LAo+PiArCQkucG11X2VuYWJsZQk9IE5VTEwsCj4+ICsJCS5wbXVfZGlzYWJsZQk9IE5VTEws Cj4+ICsJCS5ldmVudF9pbml0CT0gZHdjX3BjaWVfcG11X2V2ZW50X2luaXQsCj4+ICsJCS5hZGQJ CT0gZHdjX3BjaWVfcG11X2V2ZW50X2FkZCwKPj4gKwkJLmRlbAkJPSBkd2NfcGNpZV9wbXVfZXZl bnRfZGVsLAo+PiArCQkuc3RhcnQJCT0gZHdjX3BjaWVfcG11X2V2ZW50X3N0YXJ0LAo+PiArCQku c3RvcAkJPSBkd2NfcGNpZV9wbXVfZXZlbnRfc3RvcCwKPj4gKwkJLnJlYWQJCT0gZHdjX3BjaWVf cG11X2V2ZW50X3JlYWQsCj4+ICsJCS5hdHRyX2dyb3Vwcwk9IHBjaWVfaW5mby0+cGNpZV9wbXVf YXR0cl9ncm91cHMsCj4+ICsJCS5jYXBhYmlsaXRpZXMJPSBQRVJGX1BNVV9DQVBfTk9fRVhDTFVE RSwKPj4gKwl9Owo+PiArCj4+ICsJbmFtZSA9IGRldm1fa2FzcHJpbnRmKHByaXYtPmRldiwgR0ZQ X0tFUk5FTCwgInBjaWVfYmRmXyV4IiwKPj4gKwkJCSAgICAgIHBjaWVfaW5mby0+YmRmKTsKPj4g KwlpZiAoIW5hbWUpCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJLyogUGljayBvbmUg Q1BVIHRvIGJlIHRoZSBwcmVmZXJyZWQgb25lIHRvIHVzZSAqLwo+PiArCXBjaWVfcG11LT5vbl9j cHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwo+IEFib3ZlIHRoZXJlIGFyZSByZWZlcmVuY2Vz IHRvIG11bHRpcGxlIGRpZXMuICBNYXliZSBhdCBsZWFzdCBtYWtlIHN1cmUgeW91Cj4gYXJlIG9u IGEgbmVhciBieSBkaWU/IChJJ20gZ3Vlc3NpbmcgYXQgdG9wb2xvZ3khKQoKR29vZCBpZGVhLCB3 aWxsIGZpeCBpbiBuZXh0IHZlcnNpb24uCgo+PiArCj4+ICsJcmV0ID0gcGVyZl9wbXVfcmVnaXN0 ZXIoJnBjaWVfcG11LT5wbXUsIG5hbWUsIC0xKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCXBjaV9l cnIocGNpZV9pbmZvLT5wZGV2LCAiRXJyb3IgJWQgcmVnaXN0ZXJpbmcgUE1VIEAleFxuIiwgcmV0 LAo+PiArCQkJCSBwY2llX2luZm8tPmJkZik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiAr Cj4+ICsJcGNpZV9pbmZvLT5wbXVfaXNfcmVnaXN0ZXIgPSBEV0NfUENJRV9QTVVfSEFTX1JFR0lT VEVSOwo+IAo+IEFzIGJlbG93LiBJIHRoaW5rIHlvdSBjYW4gZHJvcCB0aGlzIHN0YXRlIGluZm8u CgpQbGVhc2Ugc2VlIG15IGNvbmZ1c2lvbiBiZWxsb3cuCgo+IAo+PiArCj4+ICsJcmV0dXJuIHJl dDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkd2NfcGNpZV9wbXVfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGR3Y19wY2llX3BtdV9wcml2 ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4+ICsJaW50IGluZGV4Owo+PiAr CXN0cnVjdCBkd2NfcGNpZV9wbXUgKnBjaWVfcG11Owo+PiArCj4+ICsJZm9yIChpbmRleCA9IDA7 IGluZGV4IDwgcHJpdi0+cGNpZV9jdHJsX251bTsgaW5kZXgrKykKPj4gKwkJaWYgKHByaXYtPnBj aWVfdGFibGVbaW5kZXhdLnBtdV9pc19yZWdpc3Rlcikgewo+PiArCQkJcGNpZV9wbXUgPSAmcHJp di0+cGNpZV90YWJsZVtpbmRleF0ucGNpZV9wbXU7Cj4+ICsJCQlwZXJmX3BtdV91bnJlZ2lzdGVy KCZwY2llX3BtdS0+cG11KTsKPj4gKwkJfQo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGR3Y19wY2llX3BtdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+PiArewo+PiArCWludCByZXQgPSAwOwo+IAo+IEluaXRpYWxpemVkIGluIGFsbCBwYXRocyB3 aGVyZSBpdCBpcyB1c2VkLiBDb21waWxlciBzaG91bGQgYmUgYWJsZSB0byB0ZWxsCj4gdGhhdCBz byBJIGRvdWJ0IHlvdSBuZWVkIHRoaXMgdG8gYmUgc2V0IHRvIDAgaGVyZS4KCkFncmVlLCB3aWxs IGxlYXZlIGl0IGFzIHVuaW5pdGlhbGl6ZWQuCgo+IAo+PiArCWludCBwY2llX2luZGV4Owo+PiAr CXN0cnVjdCBkd2NfcGNpZV9wbXVfcHJpdiAqcHJpdjsKPj4gKwo+PiArCXByaXYgPSBkZXZtX2t6 YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFw cml2KQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwlwcml2LT5kZXYgPSAmcGRldi0+ZGV2Owo+ PiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwo+PiArCj4+ICsJLyogSWYgUE1V IGlzIG5vdCBzdXBwb3J0IG9uIGN1cnJlbnQgcGxhdGZvcm0sIGtlZXAgc2xpZW50ICovCj4+ICsJ aWYgKGR3Y19wY2llX3BtdV9kaXNjb3Zlcihwcml2KSkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4g Kwlmb3IgKHBjaWVfaW5kZXggPSAwOyBwY2llX2luZGV4IDwgcHJpdi0+cGNpZV9jdHJsX251bTsg cGNpZV9pbmRleCsrKSB7Cj4+ICsJCXN0cnVjdCBwY2lfZGV2ICpycCA9IHByaXYtPnBjaWVfdGFi bGVbcGNpZV9pbmRleF0ucGRldjsKPj4gKwo+PiArCQlyZXQgPSBfX2R3Y19wY2llX3BtdV9wcm9i ZShwcml2LCAmcHJpdi0+cGNpZV90YWJsZVtwY2llX2luZGV4XSk7Cj4+ICsJCWlmIChyZXQpIHsK Pj4gKwkJCWRldl9lcnIoJnJwLT5kZXYsICJQQ0llIFBNVSBwcm9iZSBmYWlsXG4iKTsKPj4gKwkJ CWdvdG8gcG11X3VucmVnaXN0ZXI7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsJZGV2X2luZm8oJnBkZXYt PmRldiwgIlBDSWUgUE1VcyByZWdpc3RlcmVkXG4iKTsKPiAKPiBOb2lzZSBpbiB0aGUgbG9ncy4g IFRoZXJlIGFyZSBsb3RzIG9mIHdheXMgdG8ga25vdyBpZiB3ZSByZWFjaGVkIHRoaXMgcG9pbnQK PiBzbyB0aGlzIGFkZHMgbm8gdmFsdWUuCgpHb3QgaXQsIHdpbGwgZHJvcCB0aGlzIG91dCBpbiBu ZXh0IHZlcnNpb24uCgo+IAo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK3BtdV91bnJlZ2lz dGVyOgo+PiArCWR3Y19wY2llX3BtdV9yZW1vdmUocGRldik7Cj4gCj4gSSdkIG11Y2ggcmF0aGVy IHNlZSB0aGUgdW53aW5kIGhlcmUgZGlyZWN0bHkgc28gd2UgY2FuIGNsZWFybHkgc2VlIHRoYXQg aXQgdW5kb2VzCj4gdGhlIHJlc3VsdCBvZiBlcnJvcnMgaW4gdGhpcyBmdW5jdGlvbi4gIFRoYXQg cmVtb3ZlcyB0aGUgbmVlZCB0byB1c2UgdGhlCj4gaXNfcmVnaXN0ZXJlZCBmbGFnIGluIHRoZSBy ZW1vdmUoKSBmdW5jdGlvbiBzaW1wbGlmeWluZyB0aGF0IGZsb3cgYXMgd2VsbC4KCkRvIHlvdSBt ZWFuIHRoYXQgaWYgcGVyZl9wbXVfcmVnaXN0ZXIgZmFpbHMsIHRoZW4ganVtcCB0byBwbXVfdW5y ZWdpc3RlciBsYWJsZSBkaXJlY3RseT8KSG93IGNhbiB3ZSB0ZWxsIHdoaWNoIFBNVSBkaXZlaWNl IGZhaWxzIHRvIHJlaWdpc3Rlcj8KCj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd2NfcGNpZV9wbXVfZHJpdmVyID0gewo+ PiArCS5wcm9iZSA9IGR3Y19wY2llX3BtdV9wcm9iZSwKPj4gKwkucmVtb3ZlID0gZHdjX3BjaWVf cG11X3JlbW92ZSwKPj4gKwkuZHJpdmVyID0gey5uYW1lID0gRFJWX05BTUUsfSwKPiBNb3JlIGNv bW1vbiB0byBmb3JtYXQgYXMKPiAJLmRyaXZlciA9IHsKPiAJCS5uYW1lID0gImR3Y19wY2llX3Bt dSIsCj4gCX0sCj4gfTsKPiBOb3RlIHVzZSBvZiBzdHJpbmcgaGVyZS4gIFVzaW5nIGEgZGVmaW5l IGp1c3QgZm9yY2VzIHBlb3BsZSB0bwo+IGxvb2sgZm9yIHRoaXMgaW4gdGhlIHdyb25nIHBsYWNl LgoKSSBzZWUsIHdpbGwgdXNlIHN0cmluZyBoZXJlIGluIG5leHQgdmVyc2lvbi4KCj4gCj4+ICt9 Owo+PiArCj4+ICtzdGF0aWMgaW50IF9faW5pdCBkd2NfcGNpZV9wbXVfaW5pdCh2b2lkKQo+PiAr ewo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIo JmR3Y19wY2llX3BtdV9kcml2ZXIpOwo+PiArCj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIHJl dDsKPj4gKwo+PiArCWR3Y19wY2llX3BtdV9kZXYgPQo+PiArCSAgICBwbGF0Zm9ybV9kZXZpY2Vf cmVnaXN0ZXJfc2ltcGxlKERFVl9OQU1FLCAtMSwgTlVMTCwgMCk7Cj4gCj4gSSdkIG5vcm1hbGx5 IGV4cGVjdCB0byBzZWUgdGhlIGRldmljZSBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIGZpcm13YXJl Cj4gZGVzY3JpcHRpb24gKEFDUEkgRFNEVCAvIG9yIERldmljZSB0cmVlKQo+IEl0IGlzIHVudXN1 YWwgdG8gY3JlYXRlIGEgJ3JlYWwnIGRldmljZSBkaXJlY3RseSBpbiB0aGUgZHJpdmVyCj4gaW5p dCAtIHRoYXQncyBub3JtYWxseSByZXNlcnZlZCBmb3IgdmFyaW91cyBmYWtlIC8gc29mdHdhcmUg ZGV2aWNlcy4KCkkgc2VlIHlvdXIgY29uY2VybnMuIFlvdSBtZW50aW9uZWQgdGhhdAoKICAgPiBU aGUgcHJvYmluZyBzaG91bGQgYmUgZHJpdmVuIGZyb20gdGhlIGV4aXN0aW5nIFBDSSBkcml2ZXIg dG9wb2xvZ3kuCgpTaG91bGQgd2UgYWRkIGEgZmFrZSBkZXZpY2UgaW4gZmlybXdhcmUgb3IgZHJp dmUgZnJvbSBQQ0kgZHJpdmVyIHRvcG9sb2d5PwoKVGhhbmsgeW91LgoKQmVzdCBSZWdhcmRzLApT aHVhaQoKPj4gKwlpZiAoSVNfRVJSKGR3Y19wY2llX3BtdV9kZXYpKSB7Cj4+ICsJCXBsYXRmb3Jt X2RyaXZlcl91bnJlZ2lzdGVyKCZkd2NfcGNpZV9wbXVfZHJpdmVyKTsKPj4gKwkJcmV0dXJuIFBU Ul9FUlIoZHdjX3BjaWVfcG11X2Rldik7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBkd2NfcGNpZV9wbXVfZXhpdCh2b2lkKQo+PiAr ewo+PiArCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGR3Y19wY2llX3BtdV9kZXYpOwo+PiAr CXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkd2NfcGNpZV9wbXVfZHJpdmVyKTsKPj4gK30K Pj4gKwo+PiArbW9kdWxlX2luaXQoZHdjX3BjaWVfcG11X2luaXQpOwo+PiArbW9kdWxlX2V4aXQo ZHdjX3BjaWVfcG11X2V4aXQpOwo+PiArCj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlBNVSBkcml2 ZXIgZm9yIERlc2lnbldhcmUgQ29yZXMgUENJIEV4cHJlc3MgQ29udHJvbGxlciIpOwo+PiArTU9E VUxFX0FVVEhPUigieHVlc2h1YWlAbGludXguYWxpYmFiYS5jb20iKTsKPj4gK01PRFVMRV9BVVRI T1IoInlpbnh1YW5fY3dAbGludXguYWxpYmFiYS5jb20iKTsKPj4gK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK