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 55567C433F5 for ; Wed, 11 May 2022 09:19:29 +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:From:References:Cc:To: Subject: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=gP8gY+fTx8jppQSDSefCjoRjgCP71wBl+BSxcqS7z78=; b=0IiV0DcUiMgoo9 nE02xc8rsAHV+PMO8ksgfM4V7Giep0m2UA5lrYbn1kmEzppmduZRrDf3CXrG/MtNsFqFcyxPUWYwo DIvSLJB0dkALo1BMwZw8OVpR3WWj/lxXsUpYCec+m8z9wrpwe+TyM3V7CsDL0T3SxRAovF6paNh2h ivx57eReWV/ioGkguTD/4N1dvHKkPshpW2WjxzHUsfhD95VsGC8DimK3mJwhopUOEiAIx+OGLG6bD 1OPhS6pX3BQTa6bCCLbrTXSkH9qkSLw3Nq5qBqm2EjQLZAiltzkU+U+M/rksJYQXB78bnYRUKvJvE qOaF+Ktx1SifsA2dqfEA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1noiU4-0066yC-5w; Wed, 11 May 2022 09:18:16 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1noiTz-0066wG-JJ for linux-arm-kernel@lists.infradead.org; Wed, 11 May 2022 09:18:13 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D244A1FB; Wed, 11 May 2022 02:18:07 -0700 (PDT) Received: from [10.57.2.55] (unknown [10.57.2.55]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8B9613F73D; Wed, 11 May 2022 02:18:03 -0700 (PDT) Message-ID: <1b6d1ed3-fdec-3fef-cbf6-735ba5104a94@arm.com> Date: Wed, 11 May 2022 10:18:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: Re: [PATCH v7 5/7] perf tool: Add support for HiSilicon PCIe Tune and Trace device driver Content-Language: en-US To: "liuqi (BA)" , Yicong Yang , Leo Yan Cc: prime.zeng@huawei.com, zhangshaokun@hisilicon.com, linuxarm@huawei.com, gregkh@linuxfoundation.org, helgaas@kernel.org, alexander.shishkin@linux.intel.com, lorenzo.pieralisi@arm.com, will@kernel.org, mark.rutland@arm.com, mathieu.poirier@linaro.org, suzuki.poulose@arm.com, mike.leach@linaro.org, jonathan.cameron@huawei.com, daniel.thompson@linaro.org, joro@8bytes.org, john.garry@huawei.com, shameerali.kolothum.thodi@huawei.com, robin.murphy@arm.com, peterz@infradead.org, mingo@redhat.com, acme@kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, coresight@lists.linaro.org, linux-pci@vger.kernel.org, linux-perf-users@vger.kernel.org, iommu@lists.linux-foundation.org References: <20220407125841.3678-1-yangyicong@hisilicon.com> <20220407125841.3678-6-yangyicong@hisilicon.com> <7fe57ed2-c583-1ada-ea5d-324d8de078bc@huawei.com> From: James Clark In-Reply-To: <7fe57ed2-c583-1ada-ea5d-324d8de078bc@huawei.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220511_021811_774298_8E5A43B1 X-CRM114-Status: GOOD ( 33.89 ) 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 CgpPbiAxMS8wNS8yMDIyIDAzOjAyLCBsaXVxaSAoQkEpIHdyb3RlOgo+IAo+IEhpIEphbWVzLAo+ IAo+IE9uIDIwMjIvNS8xMCAxODoxNCwgSmFtZXMgQ2xhcmsgd3JvdGU6Cj4+Cj4+Cj4+IE9uIDA3 LzA0LzIwMjIgMTM6NTgsIFlpY29uZyBZYW5nIHdyb3RlOgo+Pj4gRnJvbTogUWkgTGl1IDxsaXVx aTExNUBodWF3ZWkuY29tPgo+Pj4KPiBbLi4uXQo+Pj4gwqAgc3RydWN0IGF1eHRyYWNlX3JlY29y ZAo+Pj4gwqAgKmF1eHRyYWNlX3JlY29yZF9faW5pdChzdHJ1Y3QgZXZsaXN0ICpldmxpc3QsIGlu dCAqZXJyKQo+Pj4gwqAgewo+Pj4gQEAgLTU3LDggKzExMiwxMiBAQCBzdHJ1Y3QgYXV4dHJhY2Vf cmVjb3JkCj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBldnNlbCAqZXZzZWw7Cj4+PiDCoMKgwqDCoMKg IGJvb2wgZm91bmRfZXRtID0gZmFsc2U7Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBwZXJmX3BtdSAq Zm91bmRfc3BlID0gTlVMTDsKPj4+ICvCoMKgwqAgc3RydWN0IHBlcmZfcG11ICpmb3VuZF9wdHQg PSBOVUxMOwo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgcGVyZl9wbXUgKiphcm1fc3BlX3BtdXMgPSBO VUxMOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgcGVyZl9wbXUgKipoaXNpX3B0dF9wbXVzID0gTlVMTDsK Pj4+ICsKPj4+IMKgwqDCoMKgwqAgaW50IG5yX3NwZXMgPSAwOwo+Pj4gK8KgwqDCoCBpbnQgbnJf cHR0cyA9IDA7Cj4+PiDCoMKgwqDCoMKgIGludCBpID0gMDsKPj4+IMKgIMKgwqDCoMKgwqAgaWYg KCFldmxpc3QpCj4+PiBAQCAtNjYsMTMgKzEyNSwxNCBAQCBzdHJ1Y3QgYXV4dHJhY2VfcmVjb3Jk Cj4+PiDCoCDCoMKgwqDCoMKgIGNzX2V0bV9wbXUgPSBwZXJmX3BtdV9fZmluZChDT1JFU0lHSFRf RVRNX1BNVV9OQU1FKTsKPj4+IMKgwqDCoMKgwqAgYXJtX3NwZV9wbXVzID0gZmluZF9hbGxfYXJt X3NwZV9wbXVzKCZucl9zcGVzLCBlcnIpOwo+Pj4gK8KgwqDCoCBoaXNpX3B0dF9wbXVzID0gZmlu ZF9hbGxfaGlzaV9wdHRfcG11cygmbnJfcHR0cywgZXJyKTsKPj4+IMKgIMKgwqDCoMKgwqAgZXZs aXN0X19mb3JfZWFjaF9lbnRyeShldmxpc3QsIGV2c2VsKSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKGNzX2V0bV9wbXUgJiYKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV2c2Vs LT5jb3JlLmF0dHIudHlwZSA9PSBjc19ldG1fcG11LT50eXBlKQo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZm91bmRfZXRtID0gdHJ1ZTsKPj4+IMKgIC3CoMKgwqDCoMKgwqDCoCBpZiAo IW5yX3NwZXMgfHwgZm91bmRfc3BlKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICgoIW5yX3NwZXMg fHwgZm91bmRfc3BlKSAmJiAoIW5yX3B0dHMgfHwgZm91bmRfcHR0KSkKPj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAo aSA9IDA7IGkgPCBucl9zcGVzOyBpKyspIHsKPj4+IEBAIC04MSwxMSArMTQxLDE4IEBAIHN0cnVj dCBhdXh0cmFjZV9yZWNvcmQKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDC oMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBucl9wdHRz OyBpKyspIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChldnNlbC0+Y29yZS5hdHRy LnR5cGUgPT0gaGlzaV9wdHRfcG11c1tpXS0+dHlwZSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBmb3VuZF9wdHQgPSBoaXNpX3B0dF9wbXVzW2ldOwo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0KPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqAg ZnJlZShhcm1fc3BlX3BtdXMpOwo+Pj4gwqAgLcKgwqDCoCBpZiAoZm91bmRfZXRtICYmIGZvdW5k X3NwZSkgewo+Pj4gLcKgwqDCoMKgwqDCoMKgIHByX2VycigiQ29uY3VycmVudCBBUk0gQ29yZXNp Z2h0IEVUTSBhbmQgU1BFIG9wZXJhdGlvbiBub3QgY3VycmVudGx5IHN1cHBvcnRlZFxuIik7Cj4+ PiArwqDCoMKgIGlmIChmb3VuZF9ldG0gJiYgZm91bmRfc3BlICYmIGZvdW5kX3B0dCkgewo+Pj4g K8KgwqDCoMKgwqDCoMKgIHByX2VycigiQ29uY3VycmVudCBBUk0gQ29yZXNpZ2h0IEVUTSAsU1BF IGFuZCBIaVNpbGljb24gUENJZSBUcmFjZSBvcGVyYXRpb24gbm90IGN1cnJlbnRseSBzdXBwb3J0 ZWRcbiIpOwo+Pgo+PiBIaSBZaWNvbmcsCj4+Cj4+IElzIHRoYXQgYWN0dWFsbHkgYSBsaW1pdGF0 aW9uPyBJIGRvbid0IHNlZSB3aHkgdGhleSBjb3VsZG4ndCB3b3JrIGNvbmN1cnJlbnRseS4KPiAK PiBBcyBMZW8gc2FpZCwgdGhlIGxvZ2ljIGhlcmUgc2hvdWxkIGJlIGxpa2UgdGhpczoKPiAKPiDC oMKgwqDCoMKgwqDCoCBpbnQgYXV4dHJhY2VfZXZlbnRfY250ID0gMDsKPiDCoMKgwqDCoMKgwqDC oCBpZiAoZm91bmRfZXRtKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdXh0cmFj ZV9ldmVudF9jbnQrKzsKPiDCoMKgwqDCoMKgwqDCoCBpZiAoZm91bmRfc3BlKQo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdXh0cmFjZV9ldmVudF9jbnQrKzsKPiDCoMKgwqDCoMKg wqDCoCBpZiAoZm91bmRfcHR0KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdXh0 cmFjZV9ldmVudF9jbnQrKzsKPiAKPiDCoMKgwqDCoMKgwqDCoCBpZiAoYXV4dHJhY2VfZXZlbnRf Y250ID4gMSkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcl9lcnIoIkNvbmN1 cnJlbnQgQVVYIHRyYWNlIG9wZXJhdGlvbiBpc24ndCBzdXBwb3J0ZWQ6IGZvdW5kIGV0bSAlZCBz cGUgJWQgcHR0ICVkXG4iLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGZvdW5kX2V0bSwgZm91bmRfc3BlLCBmb3VuZF9wdHQpOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqZXJyID0gLUVPUE5PVFNVUFA7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+IMKgwqDCoMKgwqDCoMKgIH0KPiAKPiB3aGljaCBt ZWFucyBwZXJmIGRvZXNuJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBhdXh0cmFjZSBldmVudCByZWNv cmRpbmcgYXQgdGhlIHNhbWUgdGltZS4KCk9oIEkgc2VlIHRoYXQgdGhlIGxpbWl0YXRpb24gaXMg YWN0dWFsbHkgaW4gcGVyZiB3aGVuIGRlY29kaW5nIHRoZSBkYXRhLiBJIHRob3VnaHQgaXQgbWVh bnQKdGhhdCBpdCB3YXNuJ3QgcG9zc2libGUgdG8gb3BlbiBtdWx0aXBsZSBhdXggZXZlbnRzIGF0 IHRoZSBzYW1lIHRpbWUsIHdoaWNoIEkgdGhpbmsgc2hvdWxkCndvcmsgaW4gdGhlb3J5LiBNYWtl cyBzZW5zZS4KCj4gCj4+Cj4+Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgKmVyciA9IC1FT1BOT1RT VVBQOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+Pj4gwqDCoMKgwqDCoCB9 Cj4+PiBAQCAtOTYsNiArMTYzLDkgQEAgc3RydWN0IGF1eHRyYWNlX3JlY29yZAo+Pj4gwqAgI2lm IGRlZmluZWQoX19hYXJjaDY0X18pCj4+PiDCoMKgwqDCoMKgIGlmIChmb3VuZF9zcGUpCj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGFybV9zcGVfcmVjb3JkaW5nX2luaXQoZXJyLCBmb3Vu ZF9zcGUpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoZm91bmRfcHR0KQo+Pj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiBoaXNpX3B0dF9yZWNvcmRpbmdfaW5pdChlcnIsIGZvdW5kX3B0dCk7Cj4+PiDC oCAjZW5kaWYKPj4+IMKgIMKgwqDCoMKgwqAgLyoKPiAKPiBbLi4uXQo+Pj4gKwo+Pj4gK3N0YXRp YyBpbnQgaGlzaV9wdHRfcmVjb3JkaW5nX29wdGlvbnMoc3RydWN0IGF1eHRyYWNlX3JlY29yZCAq aXRyLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgZXZsaXN0ICpldmxpc3QsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCByZWNvcmRfb3B0cyAqb3B0cykKPj4+ICt7Cj4+PiArwqDCoMKgIHN0 cnVjdCBoaXNpX3B0dF9yZWNvcmRpbmcgKnB0dHIgPQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY29udGFpbmVyX29mKGl0ciwgc3RydWN0IGhpc2lfcHR0X3JlY29yZGluZywgaXRyKTsKPj4+ ICvCoMKgwqAgc3RydWN0IHBlcmZfcG11ICpoaXNpX3B0dF9wbXUgPSBwdHRyLT5oaXNpX3B0dF9w bXU7Cj4+PiArwqDCoMKgIHN0cnVjdCBwZXJmX2NwdV9tYXAgKmNwdXMgPSBldmxpc3QtPmNvcmUu Y3B1czsKPj4+ICvCoMKgwqAgc3RydWN0IGV2c2VsICpldnNlbCwgKmhpc2lfcHR0X2V2c2VsID0g TlVMTDsKPj4+ICvCoMKgwqAgc3RydWN0IGV2c2VsICp0cmFja2luZ19ldnNlbDsKPj4+ICvCoMKg wqAgaW50IGVycjsKPj4+ICsKPj4+ICvCoMKgwqAgcHR0ci0+ZXZsaXN0ID0gZXZsaXN0Owo+Pj4g K8KgwqDCoCBldmxpc3RfX2Zvcl9lYWNoX2VudHJ5KGV2bGlzdCwgZXZzZWwpIHsKPj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAoZXZzZWwtPmNvcmUuYXR0ci50eXBlID09IGhpc2lfcHR0X3BtdS0+dHlw ZSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGhpc2lfcHR0X2V2c2VsKSB7Cj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByX2VycigiVGhlcmUgbWF5IGJlIG9u bHkgb25lICIgSElTSV9QVFRfUE1VX05BTUUgInggZXZlbnRcbiIpOwo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV2c2VsLT5jb3JlLmF0dHIuZnJl cSA9IDA7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBldnNlbC0+Y29yZS5hdHRyLnNhbXBs ZV9wZXJpb2QgPSAxOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGlzaV9wdHRfZXZzZWwg PSBldnNlbDsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wdHMtPmZ1bGxfYXV4dHJhY2Ug PSB0cnVlOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8Kg wqDCoCBlcnIgPSBoaXNpX3B0dF9zZXRfYXV4dHJhY2VfbW1hcF9wYWdlKG9wdHMpOwo+Pj4gK8Kg wqDCoCBpZiAoZXJyKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBlcnI7Cj4+PiArwqDCoMKg IC8qCj4+PiArwqDCoMKgwqAgKiBUbyBvYnRhaW4gdGhlIGF1eHRyYWNlIGJ1ZmZlciBmaWxlIGRl c2NyaXB0b3IsIHRoZSBhdXh0cmFjZSBldmVudAo+Pj4gK8KgwqDCoMKgICogbXVzdCBjb21lIGZp cnN0Lgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIGV2bGlzdF9fdG9fZnJvbnQoZXZsaXN0 LCBoaXNpX3B0dF9ldnNlbCk7Cj4+PiArCj4+PiArwqDCoMKgIGlmICghcGVyZl9jcHVfbWFwX19l bXB0eShjcHVzKSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGV2c2VsX19zZXRfc2FtcGxlX2JpdCho aXNpX3B0dF9ldnNlbCwgVElNRSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZXZzZWxfX3NldF9zYW1w bGVfYml0KGhpc2lfcHR0X2V2c2VsLCBDUFUpOwo+Pj4gK8KgwqDCoCB9Cj4+Cj4+IFNpbWlsYXIg dG8gTGVvJ3MgY29tbWVudDogQ1BVIGlzbid0IHJlcXVpcmVkIGlmIGl0J3MgdW5jb3JlLAo+PiBh bmQgaWYgVElNRSBpcyB1c2VmdWwgdGhlbiBhZGQgaXQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRo ZQo+PiBldmVudCBpcyBvcGVuZWQgcGVyLWNwdSBvciBvbiBhIHRhc2suCj4+Cj4gZ290IGl0LCB3 aWxsIGZpeCB0aGlzIG5leHQgdGltZS4KPiAKPj4+ICsKPj4+ICvCoMKgwqAgLyogQWRkIGR1bW15 IGV2ZW50IHRvIGtlZXAgdHJhY2tpbmcgKi8KPj4+ICvCoMKgwqAgZXJyID0gcGFyc2VfZXZlbnRz KGV2bGlzdCwgImR1bW15OnUiLCBOVUxMKTsKPj4+ICvCoMKgwqAgaWYgKGVycikKPj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+Pj4gKwo+Pj4gK8KgwqDCoCB0cmFja2luZ19ldnNlbCA9 IGV2bGlzdF9fbGFzdChldmxpc3QpOwo+Pj4gK8KgwqDCoCBldmxpc3RfX3NldF90cmFja2luZ19l dmVudChldmxpc3QsIHRyYWNraW5nX2V2c2VsKTsKPj4+ICsKPj4+ICvCoMKgwqAgdHJhY2tpbmdf ZXZzZWwtPmNvcmUuYXR0ci5mcmVxID0gMDsKPj4+ICvCoMKgwqAgdHJhY2tpbmdfZXZzZWwtPmNv cmUuYXR0ci5zYW1wbGVfcGVyaW9kID0gMTsKPj4+ICsKPj4+ICvCoMKgwqAgaWYgKCFwZXJmX2Nw dV9tYXBfX2VtcHR5KGNwdXMpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGV2c2VsX19zZXRfc2FtcGxl X2JpdCh0cmFja2luZ19ldnNlbCwgVElNRSk7Cj4+Cj4+IFNhbWUgY29tbWVudCBhcyBhYm92ZS4K Pj4KPiBnb3QgaXQsIHRoYW5rcy4KPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+ Pj4gKwo+IAo+IAo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgaGlzaV9wdHRfcHJvY2Vzc19hdXh0cmFj ZV9ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBw ZXJmX3Rvb2wgKnRvb2wgX19tYXliZV91bnVzZWQpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3Qg aGlzaV9wdHQgKnB0dCA9IGNvbnRhaW5lcl9vZihzZXNzaW9uLT5hdXh0cmFjZSwgc3RydWN0IGhp c2lfcHR0LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXV4dHJhY2UpOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXV4dHJhY2VfYnVmZmVyICpidWZmZXI7 Cj4+PiArwqDCoMKgIG9mZl90IGRhdGFfb2Zmc2V0Owo+Pj4gK8KgwqDCoCBpbnQgZmQgPSBwZXJm X2RhdGFfX2ZkKHNlc3Npb24tPmRhdGEpOwo+Pj4gK8KgwqDCoCBpbnQgZXJyOwo+Pj4gKwo+Pj4g K8KgwqDCoCBpZiAocGVyZl9kYXRhX19pc19waXBlKHNlc3Npb24tPmRhdGEpKSB7Cj4+PiArwqDC oMKgwqDCoMKgwqAgZGF0YV9vZmZzZXQgPSAwOwo+Pj4gK8KgwqDCoCB9IGVsc2Ugewo+Pj4gK8Kg wqDCoMKgwqDCoMKgIGRhdGFfb2Zmc2V0ID0gbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKPj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAoZGF0YV9vZmZzZXQgPT0gLTEpCj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gLWVycm5vOwo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIGVy ciA9IGF1eHRyYWNlX3F1ZXVlc19fYWRkX2V2ZW50KCZwdHQtPnF1ZXVlcywgc2Vzc2lvbiwgZXZl bnQsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhX29m ZnNldCwgJmJ1ZmZlcik7Cj4+PiArwqDCoMKgIGlmIChlcnIpCj4+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIGVycjsKPj4+ICsKPj4+ICvCoMKgwqAgaWYgKGR1bXBfdHJhY2UpIHsKPj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAoYXV4dHJhY2VfYnVmZmVyX19nZXRfZGF0YShidWZmZXIsIGZkKSkgewo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGlzaV9wdHRfZHVtcF9ldmVudChwdHQsIGJ1ZmZl ci0+ZGF0YSwgYnVmZmVyLT5zaXplKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF1eHRy YWNlX2J1ZmZlcl9fcHV0X2RhdGEoYnVmZmVyKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Cj4+ IFRlY2huaWNhbGx5IGF1eHRyYWNlX3F1ZXVlcyBhcmVuJ3QgcmVxdWlyZWQgaGVyZSBiZWNhdXNl IHRoZXkgYXJlIG1vcmUgZm9yCj4+IHN1cHBvcnRpbmcgdHJhY2UgZnJvbSBtdWx0aXBsZSBDUFVz IGFuZCBzb3J0aW5nIGFuZCByZS1vcmRlcmluZyBiZXR3ZWVuIHRoZW0uCj4+Cj4+IElmIHRoaXMg aXMgbmV3IGRldmljZSBpcyB1bmNvcmUgYW5kIGFsd2F5cyBmcm9tIGEgc2luZ2xlIHNvdXJjZSB5 b3UgY291bGQKPj4ganVzdCBnbyBzdHJhaWdodCB0b8KgIGhpc2lfcHR0X2R1bXBfZXZlbnQoKSB3 aXRoIGRhdGFfb2Zmc2V0IGFuZCBzaXplIG9mIHRoZQo+PiBhdXh0cmFjZSBldmVudC4KPj4KPj4g QnV0IEkgc3VwcG9zZSBpdCBhbHNvIGRvZXNuJ3QgaHVydCB0byB1c2Ugc29tZSBvZiB0aGUgZXhp c3RpbmcgZnJhbWV3b3JrCj4+IGxpa2UgeW91IGhhdmUgZG9uZS4KPj4KPiBvaywgSSdsbCBkZWxl dGUgdGhlIGF1eHRyYWNlX3F1ZXVlcyBuZXh0IHRpbWUsIHRoYW5rcy4KCkl0J3MgdXAgdG8geW91 LCBpdCBtaWdodCBiZSBtb3JlIHdvcmsgYW5kIGl0J3MgYmVzdCB0byBsZWF2ZSBpdCBhcyBpdCBp cyBub3cKdGhhdCB5b3UgaGF2ZSBpdCB3b3JraW5nIGFscmVhZHkuCgpKYW1lcwoKPiAKPiBRaQo+ IAo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgaW50IGhpc2lfcHR0X2ZsdXNoKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Np b24gX19tYXliZV91bnVzZWQsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IHBlcmZfdG9vbCAqdG9vbCBfX21heWJlX3VudXNlZCkKPj4+ICt7Cj4+PiArwqDCoMKgIHJldHVy biAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBoaXNpX3B0dF9mcmVlX2V2ZW50cyhz dHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IGhp c2lfcHR0ICpwdHQgPSBjb250YWluZXJfb2Yoc2Vzc2lvbi0+YXV4dHJhY2UsIHN0cnVjdCBoaXNp X3B0dCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGF1eHRyYWNlKTsKPj4+ICvCoMKgwqAgc3RydWN0IGF1eHRyYWNlX3F1ZXVlcyAqcXVldWVzID0g JnB0dC0+cXVldWVzOwo+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgaTsKPj4+ICsKPj4+ICvCoMKg wqAgZm9yIChpID0gMDsgaSA8IHF1ZXVlcy0+bnJfcXVldWVzOyBpKyspIHsKPj4+ICvCoMKgwqDC oMKgwqDCoCBmcmVlKHF1ZXVlcy0+cXVldWVfYXJyYXlbaV0ucHJpdik7Cj4+PiArwqDCoMKgwqDC oMKgwqAgcXVldWVzLT5xdWV1ZV9hcnJheVtpXS5wcml2ID0gTlVMTDsKPj4+ICvCoMKgwqAgfQo+ Pj4gK8KgwqDCoCBhdXh0cmFjZV9xdWV1ZXNfX2ZyZWUocXVldWVzKTsKPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIHZvaWQgaGlzaV9wdHRfZnJlZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9u KQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IGhpc2lfcHR0ICpwdHQgPSBjb250YWluZXJfb2Yo c2Vzc2lvbi0+YXV4dHJhY2UsIHN0cnVjdCBoaXNpX3B0dCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF1eHRyYWNlKTsKPj4+ICsKPj4+ICvCoMKg wqAgaGlzaV9wdHRfZnJlZV9ldmVudHMoc2Vzc2lvbik7Cj4+PiArwqDCoMKgIHNlc3Npb24tPmF1 eHRyYWNlID0gTlVMTDsKPj4+ICvCoMKgwqAgZnJlZShwdHQpOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgYm9vbCBoaXNpX3B0dF9ldnNlbF9pc19hdXh0cmFjZShzdHJ1Y3QgcGVyZl9zZXNzaW9u ICpzZXNzaW9uLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBldnNlbCAqZXZzZWwpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3QgaGlzaV9w dHQgKnB0dCA9IGNvbnRhaW5lcl9vZihzZXNzaW9uLT5hdXh0cmFjZSwgc3RydWN0IGhpc2lfcHR0 LCBhdXh0cmFjZSk7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiBldnNlbC0+Y29yZS5hdHRyLnR5 cGUgPT0gcHR0LT5wbXVfdHlwZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IGNoYXIg KiBjb25zdCBoaXNpX3B0dF9pbmZvX2ZtdHNbXSA9IHsKPj4+ICvCoMKgwqAgW0hJU0lfUFRUX1BN VV9UWVBFXcKgwqDCoMKgwqDCoMKgID0gIsKgIFBNVSBUeXBlwqDCoMKgwqDCoMKgwqDCoMKgwqAg JSIgUFJJZDY0ICJcbiIsCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBoaXNpX3B0dF9w cmludF9pbmZvKF9fdTY0ICphcnIpCj4+PiArewo+Pj4gK8KgwqDCoCBpZiAoIWR1bXBfdHJhY2Up Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4gKwo+Pj4gK8KgwqDCoCBmcHJpbnRmKHN0 ZG91dCwgaGlzaV9wdHRfaW5mb19mbXRzW0hJU0lfUFRUX1BNVV9UWVBFXSwgYXJyW0hJU0lfUFRU X1BNVV9UWVBFXSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK2ludCBoaXNpX3B0dF9wcm9jZXNzX2F1eHRy YWNlX2luZm8odW5pb24gcGVyZl9ldmVudCAqZXZlbnQsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCj4+PiArewo+ Pj4gK8KgwqDCoCBzdHJ1Y3QgcGVyZl9yZWNvcmRfYXV4dHJhY2VfaW5mbyAqYXV4dHJhY2VfaW5m byA9ICZldmVudC0+YXV4dHJhY2VfaW5mbzsKPj4+ICvCoMKgwqAgc3RydWN0IGhpc2lfcHR0ICpw dHQ7Cj4+PiArwqDCoMKgIGludCBlcnI7Cj4+PiArCj4+PiArwqDCoMKgIGlmIChhdXh0cmFjZV9p bmZvLT5oZWFkZXIuc2l6ZSA8IEhJU0lfUFRUX0FVWFRSQUNFX1BSSVZfU0laRSArCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihzdHJ1Y3QgcGVyZl9yZWNvcmRfYXV4 dHJhY2VfaW5mbykpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArCj4+ PiArwqDCoMKgIHB0dCA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGhpc2lfcHR0KSk7Cj4+PiArwqDC oMKgIGlmICghcHR0KQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4gKwo+ Pj4gK8KgwqDCoCBlcnIgPSBhdXh0cmFjZV9xdWV1ZXNfX2luaXQoJnB0dC0+cXVldWVzKTsKPj4+ ICvCoMKgwqAgaWYgKGVycikKPj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9mcmVlOwo+Pj4g Kwo+Pj4gK8KgwqDCoCBwdHQtPnNlc3Npb24gPSBzZXNzaW9uOwo+Pj4gK8KgwqDCoCBwdHQtPm1h Y2hpbmUgPSAmc2Vzc2lvbi0+bWFjaGluZXMuaG9zdDsgLyogTm8ga3ZtIHN1cHBvcnQgKi8KPj4+ ICvCoMKgwqAgcHR0LT5hdXh0cmFjZV90eXBlID0gYXV4dHJhY2VfaW5mby0+dHlwZTsKPj4+ICvC oMKgwqAgcHR0LT5wbXVfdHlwZSA9IGF1eHRyYWNlX2luZm8tPnByaXZbSElTSV9QVFRfUE1VX1RZ UEVdOwo+Pj4gKwo+Pj4gK8KgwqDCoCBwdHQtPmF1eHRyYWNlLnByb2Nlc3NfZXZlbnQgPSBoaXNp X3B0dF9wcm9jZXNzX2V2ZW50Owo+Pj4gK8KgwqDCoCBwdHQtPmF1eHRyYWNlLnByb2Nlc3NfYXV4 dHJhY2VfZXZlbnQgPSBoaXNpX3B0dF9wcm9jZXNzX2F1eHRyYWNlX2V2ZW50Owo+Pj4gK8KgwqDC oCBwdHQtPmF1eHRyYWNlLmZsdXNoX2V2ZW50cyA9IGhpc2lfcHR0X2ZsdXNoOwo+Pj4gK8KgwqDC oCBwdHQtPmF1eHRyYWNlLmZyZWVfZXZlbnRzID0gaGlzaV9wdHRfZnJlZV9ldmVudHM7Cj4+PiAr wqDCoMKgIHB0dC0+YXV4dHJhY2UuZnJlZSA9IGhpc2lfcHR0X2ZyZWU7Cj4+PiArwqDCoMKgIHB0 dC0+YXV4dHJhY2UuZXZzZWxfaXNfYXV4dHJhY2UgPSBoaXNpX3B0dF9ldnNlbF9pc19hdXh0cmFj ZTsKPj4+ICvCoMKgwqAgc2Vzc2lvbi0+YXV4dHJhY2UgPSAmcHR0LT5hdXh0cmFjZTsKPj4+ICsK Pj4+ICvCoMKgwqAgaGlzaV9wdHRfcHJpbnRfaW5mbygmYXV4dHJhY2VfaW5mby0+cHJpdlswXSk7 Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gKwo+Pj4gK2Vycl9mcmVlOgo+Pj4gK8Kg wqDCoCBmcmVlKHB0dCk7Cj4+PiArwqDCoMKgIHJldHVybiBlcnI7Cj4+PiArfQo+Pj4gZGlmZiAt LWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXNpX3B0dC5oIGIvdG9vbHMvcGVyZi91dGlsL2hpc2lf cHR0LmgKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmMw YjZjYmRlMTIyMQo+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4gKysrIGIvdG9vbHMvcGVyZi91dGlsL2hp c2lfcHR0LmgKPj4+IEBAIC0wLDAgKzEsMjggQEAKPj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCAqLwo+Pj4gKy8qCj4+PiArICogSGlTaWxpY29uIFBDSWUgVHJhY2UgYW5k IFR1bmluZyAoUFRUKSBzdXBwb3J0Cj4+PiArICogQ29weXJpZ2h0IChjKSAyMDIyIEhpU2lsaWNv biBUZWNobm9sb2dpZXMgQ28uLCBMdGQuCj4+PiArICovCj4+PiArCj4+PiArI2lmbmRlZiBJTkNM VURFX19QRVJGX0hJU0lfUFRUX0hfXwo+Pj4gKyNkZWZpbmUgSU5DTFVERV9fUEVSRl9ISVNJX1BU VF9IX18KPj4+ICsKPj4+ICsjZGVmaW5lIEhJU0lfUFRUX1BNVV9OQU1FICJoaXNpX3B0dCIKPj4+ ICtlbnVtIHsKPj4+ICvCoMKgwqAgSElTSV9QVFRfUE1VX1RZUEUsCj4+PiArwqDCoMKgIEhJU0lf UFRUX1BFUl9DUFVfTU1BUFMsCj4+PiArwqDCoMKgIEhJU0lfUFRUX0FVWFRSQUNFX1BSSVZfTUFY LAo+Pj4gK307Cj4+PiArCj4+PiArI2RlZmluZSBISVNJX1BUVF9BVVhUUkFDRV9QUklWX1NJWkUg KEhJU0lfUFRUX0FVWFRSQUNFX1BSSVZfTUFYICogc2l6ZW9mKHU2NCkpCj4+PiArdW5pb24gcGVy Zl9ldmVudDsKPj4+ICtzdHJ1Y3QgcGVyZl9zZXNzaW9uOwo+Pj4gK3N0cnVjdCBwZXJmX3BtdTsK Pj4+ICsKPj4+ICtzdHJ1Y3QgYXV4dHJhY2VfcmVjb3JkICpoaXNpX3B0dF9yZWNvcmRpbmdfaW5p dChpbnQgKmVyciwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBwZXJmX3BtdSAqaGlzaV9wdHRfcG11KTsKPj4+ICsKPj4+ICtpbnQgaGlz aV9wdHRfcHJvY2Vzc19hdXh0cmFjZV9pbmZvKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGVyZl9zZXNzaW9u ICpzZXNzaW9uKTsKPj4+ICsKPj4+ICsjZW5kaWYKPj4gLgo+PgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxp c3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=