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=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, 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 3EE45C433DB for ; Fri, 15 Jan 2021 13:03:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1147F22473 for ; Fri, 15 Jan 2021 13:03:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731903AbhAOMca (ORCPT ); Fri, 15 Jan 2021 07:32:30 -0500 Received: from foss.arm.com ([217.140.110.172]:38832 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728163AbhAOMcK (ORCPT ); Fri, 15 Jan 2021 07:32:10 -0500 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 F112EED1; Fri, 15 Jan 2021 04:31:24 -0800 (PST) Received: from [10.57.56.97] (unknown [10.57.56.97]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6A9873F70D; Fri, 15 Jan 2021 04:31:23 -0800 (PST) Subject: Re: [PATCH V2 08/11] coresight: core: Add support for dedicated percpu sinks To: Anshuman Khandual , linux-arm-kernel@lists.infradead.org, coresight@lists.linaro.org Cc: mathieu.poirier@linaro.org, mike.leach@linaro.org, Linu Cherian , linux-kernel@vger.kernel.org References: <1610511498-4058-1-git-send-email-anshuman.khandual@arm.com> <1610511498-4058-9-git-send-email-anshuman.khandual@arm.com> <83939b79-31de-2984-7418-7e4c026dba3a@arm.com> <6dc0baeb-cc9b-562b-ac4d-03fe894be099@arm.com> From: Suzuki K Poulose Message-ID: <1ae508a9-69f5-af33-acd0-d305f6039187@arm.com> Date: Fri, 15 Jan 2021 12:31:14 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: <6dc0baeb-cc9b-562b-ac4d-03fe894be099@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 1/15/21 2:36 AM, Anshuman Khandual wrote: > > > On 1/13/21 3:13 PM, Suzuki K Poulose wrote: >> On 1/13/21 4:18 AM, Anshuman Khandual wrote: >>> Add support for dedicated sinks that are bound to individual CPUs. (e.g, >>> TRBE). To allow quicker access to the sink for a given CPU bound source, >>> keep a percpu array of the sink devices. Also, add support for building >>> a path to the CPU local sink from the ETM. >>> >>> This adds a new percpu sink type CORESIGHT_DEV_SUBTYPE_SINK_PERCPU_SYSMEM. >>> This new sink type is exclusively available and can only work with percpu >>> source type device CORESIGHT_DEV_SUBTYPE_SOURCE_PERCPU_PROC. >>> >>> This defines a percpu structure that accommodates a single coresight_device >>> which can be used to store an initialized instance from a sink driver. As >>> these sinks are exclusively linked and dependent on corresponding percpu >>> sources devices, they should also be the default sink device during a perf >>> session. >>> >>> Outwards device connections are scanned while establishing paths between a >>> source and a sink device. But such connections are not present for certain >>> percpu source and sink devices which are exclusively linked and dependent. >>> Build the path directly and skip connection scanning for such devices. >>> >>> Cc: Mathieu Poirier >>> Cc: Mike Leach >>> Cc: Suzuki K Poulose >>> Signed-off-by: Anshuman Khandual >>> --- >>>   drivers/hwtracing/coresight/coresight-core.c | 14 ++++++++++++++ >>>   include/linux/coresight.h                    | 12 ++++++++++++ >>>   2 files changed, 26 insertions(+) >>> >>> diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c >>> index 0062c89..b300606 100644 >>> --- a/drivers/hwtracing/coresight/coresight-core.c >>> +++ b/drivers/hwtracing/coresight/coresight-core.c >>> @@ -23,6 +23,7 @@ >>>   #include "coresight-priv.h" >>>     static DEFINE_MUTEX(coresight_mutex); >>> +DEFINE_PER_CPU(struct coresight_device *, csdev_sink); >>>     /** >>>    * struct coresight_node - elements of a path, from source to sink >>> @@ -784,6 +785,13 @@ static int _coresight_build_path(struct coresight_device *csdev, >>>       if (csdev == sink) >>>           goto out; >>>   +    if (coresight_is_percpu_source(csdev) && coresight_is_percpu_sink(sink) && >>> +        sink == per_cpu(csdev_sink, source_ops(csdev)->cpu_id(csdev))) { >>> +        _coresight_build_path(sink, sink, path); >>> +        found = true; >>> +        goto out; >>> +    } >>> + >>>       /* Not a sink - recursively explore each port found on this element */ >>>       for (i = 0; i < csdev->pdata->nr_outport; i++) { >>>           struct coresight_device *child_dev; >>> @@ -998,6 +1006,12 @@ coresight_find_default_sink(struct coresight_device *csdev) >>>   { >>>       int depth = 0; >>>   +    if (coresight_is_percpu_source(csdev)) { >> >> On a system without per_cpu sink, this would reset the default sink for the source device >> every single time and fallback to searching every single time. > > Right. > >> So I think it would be better if did check if the def_sink was not set. >> We could fold this into the case below may be. i.e, >> >> >>     if (!csdev->def_sink) { >>         if (coresight_is_percpu_source(csdev)) >>             csdev->def_sink = per_cpu(csdev_sink, source_ops(csdev)->cpu_id(csdev)); >>         if (!csdev->def_sink)            csdev->def_sink = coresight_find_sink(csdev, &depth); >>     } >> >> Otherwise looks good to me. > > struct coresight_device * > coresight_find_default_sink(struct coresight_device *csdev) > { > int depth = 0; > > /* look for a default sink if we have not found for this device */ > if (!csdev->def_sink) { > if (coresight_is_percpu_source(csdev)) > csdev->def_sink = per_cpu(csdev_sink, source_ops(csdev)->cpu_id(csdev)); > if (!csdev->def_sink) > csdev->def_sink = coresight_find_sink(csdev, &depth); > } > return csdev->def_sink; > } > > Would this be better instead ? coresight_find_sink() is invoked both when the > source is not percpu (traditional coresight sources) and also as a fallback in > case a percpu sink is not found for the percpu source device. Yes, this is exactly what I proposed above. Cheers Suzuki 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=-15.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,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 B3B58C433E0 for ; Fri, 15 Jan 2021 12:33:21 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 1D94323370 for ; Fri, 15 Jan 2021 12:33:20 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1D94323370 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=0jG7+UqsNHsC5C4k2y65aJPXkEhilSBPGfq1gEG2co8=; b=frhzqb9mX4YyrDaon8Zmazt/9 COexAR3C1xOFV3w9AJZVchPw7LJlXfBbTVtee8U0Y9hL2piLRYopBhNyz7K8vjH8Q7fljyodEXjRv Bg2+Tr7ZyfUOglDWDcuwtBBKpuO8NKdX0D2FwK0MQAULCSZKYv6ZdGdzkK9s3O13HXpSznC7wKb8Y Z6+HDA/9b3HOg3KPZZKjLBUrUNK7a3vuH5bU9rQ6q9JW0Uioz/x/hD6qMlaGSXoDCug+8t8B3Aalv luo6y/ILbhK/aX5ViTu1W5HqFUSxsvwEarrvk68+ulVjjuRXyzSM5OHETHEWMB98wvEcOfCgT9WjS 9WHISeb5g==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l0OGM-0004gQ-3Q; Fri, 15 Jan 2021 12:31:34 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l0OGJ-0004fu-JJ for linux-arm-kernel@lists.infradead.org; Fri, 15 Jan 2021 12:31:32 +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 F112EED1; Fri, 15 Jan 2021 04:31:24 -0800 (PST) Received: from [10.57.56.97] (unknown [10.57.56.97]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6A9873F70D; Fri, 15 Jan 2021 04:31:23 -0800 (PST) Subject: Re: [PATCH V2 08/11] coresight: core: Add support for dedicated percpu sinks To: Anshuman Khandual , linux-arm-kernel@lists.infradead.org, coresight@lists.linaro.org References: <1610511498-4058-1-git-send-email-anshuman.khandual@arm.com> <1610511498-4058-9-git-send-email-anshuman.khandual@arm.com> <83939b79-31de-2984-7418-7e4c026dba3a@arm.com> <6dc0baeb-cc9b-562b-ac4d-03fe894be099@arm.com> From: Suzuki K Poulose Message-ID: <1ae508a9-69f5-af33-acd0-d305f6039187@arm.com> Date: Fri, 15 Jan 2021 12:31:14 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: <6dc0baeb-cc9b-562b-ac4d-03fe894be099@arm.com> Content-Language: en-GB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210115_073131_745454_7EC5585F X-CRM114-Status: GOOD ( 28.34 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-kernel@vger.kernel.org, Linu Cherian , mathieu.poirier@linaro.org, mike.leach@linaro.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMS8xNS8yMSAyOjM2IEFNLCBBbnNodW1hbiBLaGFuZHVhbCB3cm90ZToKPiAKPiAKPiBPbiAx LzEzLzIxIDM6MTMgUE0sIFN1enVraSBLIFBvdWxvc2Ugd3JvdGU6Cj4+IE9uIDEvMTMvMjEgNDox OCBBTSwgQW5zaHVtYW4gS2hhbmR1YWwgd3JvdGU6Cj4+PiBBZGQgc3VwcG9ydCBmb3IgZGVkaWNh dGVkIHNpbmtzIHRoYXQgYXJlIGJvdW5kIHRvIGluZGl2aWR1YWwgQ1BVcy4gKGUuZywKPj4+IFRS QkUpLiBUbyBhbGxvdyBxdWlja2VyIGFjY2VzcyB0byB0aGUgc2luayBmb3IgYSBnaXZlbiBDUFUg Ym91bmQgc291cmNlLAo+Pj4ga2VlcCBhIHBlcmNwdSBhcnJheSBvZiB0aGUgc2luayBkZXZpY2Vz LiBBbHNvLCBhZGQgc3VwcG9ydCBmb3IgYnVpbGRpbmcKPj4+IGEgcGF0aCB0byB0aGUgQ1BVIGxv Y2FsIHNpbmsgZnJvbSB0aGUgRVRNLgo+Pj4KPj4+IFRoaXMgYWRkcyBhIG5ldyBwZXJjcHUgc2lu ayB0eXBlIENPUkVTSUdIVF9ERVZfU1VCVFlQRV9TSU5LX1BFUkNQVV9TWVNNRU0uCj4+PiBUaGlz IG5ldyBzaW5rIHR5cGUgaXMgZXhjbHVzaXZlbHkgYXZhaWxhYmxlIGFuZCBjYW4gb25seSB3b3Jr IHdpdGggcGVyY3B1Cj4+PiBzb3VyY2UgdHlwZSBkZXZpY2UgQ09SRVNJR0hUX0RFVl9TVUJUWVBF X1NPVVJDRV9QRVJDUFVfUFJPQy4KPj4+Cj4+PiBUaGlzIGRlZmluZXMgYSBwZXJjcHUgc3RydWN0 dXJlIHRoYXQgYWNjb21tb2RhdGVzIGEgc2luZ2xlIGNvcmVzaWdodF9kZXZpY2UKPj4+IHdoaWNo IGNhbiBiZSB1c2VkIHRvIHN0b3JlIGFuIGluaXRpYWxpemVkIGluc3RhbmNlIGZyb20gYSBzaW5r IGRyaXZlci4gQXMKPj4+IHRoZXNlIHNpbmtzIGFyZSBleGNsdXNpdmVseSBsaW5rZWQgYW5kIGRl cGVuZGVudCBvbiBjb3JyZXNwb25kaW5nIHBlcmNwdQo+Pj4gc291cmNlcyBkZXZpY2VzLCB0aGV5 IHNob3VsZCBhbHNvIGJlIHRoZSBkZWZhdWx0IHNpbmsgZGV2aWNlIGR1cmluZyBhIHBlcmYKPj4+ IHNlc3Npb24uCj4+Pgo+Pj4gT3V0d2FyZHMgZGV2aWNlIGNvbm5lY3Rpb25zIGFyZSBzY2FubmVk IHdoaWxlIGVzdGFibGlzaGluZyBwYXRocyBiZXR3ZWVuIGEKPj4+IHNvdXJjZSBhbmQgYSBzaW5r IGRldmljZS4gQnV0IHN1Y2ggY29ubmVjdGlvbnMgYXJlIG5vdCBwcmVzZW50IGZvciBjZXJ0YWlu Cj4+PiBwZXJjcHUgc291cmNlIGFuZCBzaW5rIGRldmljZXMgd2hpY2ggYXJlIGV4Y2x1c2l2ZWx5 IGxpbmtlZCBhbmQgZGVwZW5kZW50Lgo+Pj4gQnVpbGQgdGhlIHBhdGggZGlyZWN0bHkgYW5kIHNr aXAgY29ubmVjdGlvbiBzY2FubmluZyBmb3Igc3VjaCBkZXZpY2VzLgo+Pj4KPj4+IENjOiBNYXRo aWV1IFBvaXJpZXIgPG1hdGhpZXUucG9pcmllckBsaW5hcm8ub3JnPgo+Pj4gQ2M6IE1pa2UgTGVh Y2ggPG1pa2UubGVhY2hAbGluYXJvLm9yZz4KPj4+IENjOiBTdXp1a2kgSyBQb3Vsb3NlIDxzdXp1 a2kucG91bG9zZUBhcm0uY29tPgo+Pj4gU2lnbmVkLW9mZi1ieTogQW5zaHVtYW4gS2hhbmR1YWwg PGFuc2h1bWFuLmtoYW5kdWFsQGFybS5jb20+Cj4+PiAtLS0KPj4+ICDCoCBkcml2ZXJzL2h3dHJh Y2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWNvcmUuYyB8IDE0ICsrKysrKysrKysrKysrCj4+PiAg wqAgaW5jbHVkZS9saW51eC9jb3Jlc2lnaHQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHwgMTIgKysrKysrKysrKysrCj4+PiAgwqAgMiBmaWxlcyBjaGFuZ2VkLCAyNiBp bnNlcnRpb25zKCspCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVz aWdodC9jb3Jlc2lnaHQtY29yZS5jIGIvZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVz aWdodC1jb3JlLmMKPj4+IGluZGV4IDAwNjJjODkuLmIzMDA2MDYgMTAwNjQ0Cj4+PiAtLS0gYS9k cml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LWNvcmUuYwo+Pj4gKysrIGIvZHJp dmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC1jb3JlLmMKPj4+IEBAIC0yMyw2ICsy Myw3IEBACj4+PiAgwqAgI2luY2x1ZGUgImNvcmVzaWdodC1wcml2LmgiCj4+PiAgwqAgwqAgc3Rh dGljIERFRklORV9NVVRFWChjb3Jlc2lnaHRfbXV0ZXgpOwo+Pj4gK0RFRklORV9QRVJfQ1BVKHN0 cnVjdCBjb3Jlc2lnaHRfZGV2aWNlICosIGNzZGV2X3NpbmspOwo+Pj4gIMKgIMKgIC8qKgo+Pj4g IMKgwqAgKiBzdHJ1Y3QgY29yZXNpZ2h0X25vZGUgLSBlbGVtZW50cyBvZiBhIHBhdGgsIGZyb20g c291cmNlIHRvIHNpbmsKPj4+IEBAIC03ODQsNiArNzg1LDEzIEBAIHN0YXRpYyBpbnQgX2NvcmVz aWdodF9idWlsZF9wYXRoKHN0cnVjdCBjb3Jlc2lnaHRfZGV2aWNlICpjc2RldiwKPj4+ICDCoMKg wqDCoMKgIGlmIChjc2RldiA9PSBzaW5rKQo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG91 dDsKPj4+ICDCoCArwqDCoMKgIGlmIChjb3Jlc2lnaHRfaXNfcGVyY3B1X3NvdXJjZShjc2Rldikg JiYgY29yZXNpZ2h0X2lzX3BlcmNwdV9zaW5rKHNpbmspICYmCj4+PiArwqDCoMKgwqDCoMKgwqAg c2luayA9PSBwZXJfY3B1KGNzZGV2X3NpbmssIHNvdXJjZV9vcHMoY3NkZXYpLT5jcHVfaWQoY3Nk ZXYpKSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIF9jb3Jlc2lnaHRfYnVpbGRfcGF0aChzaW5rLCBz aW5rLCBwYXRoKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBmb3VuZCA9IHRydWU7Cj4+PiArwqDCoMKg wqDCoMKgwqAgZ290byBvdXQ7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICDCoMKgwqDCoMKgIC8q IE5vdCBhIHNpbmsgLSByZWN1cnNpdmVseSBleHBsb3JlIGVhY2ggcG9ydCBmb3VuZCBvbiB0aGlz IGVsZW1lbnQgKi8KPj4+ICDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBjc2Rldi0+cGRhdGEt Pm5yX291dHBvcnQ7IGkrKykgewo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY29yZXNp Z2h0X2RldmljZSAqY2hpbGRfZGV2Owo+Pj4gQEAgLTk5OCw2ICsxMDA2LDEyIEBAIGNvcmVzaWdo dF9maW5kX2RlZmF1bHRfc2luayhzdHJ1Y3QgY29yZXNpZ2h0X2RldmljZSAqY3NkZXYpCj4+PiAg wqAgewo+Pj4gIMKgwqDCoMKgwqAgaW50IGRlcHRoID0gMDsKPj4+ICDCoCArwqDCoMKgIGlmIChj b3Jlc2lnaHRfaXNfcGVyY3B1X3NvdXJjZShjc2RldikpIHsKPj4KPj4gT24gYSBzeXN0ZW0gd2l0 aG91dCBwZXJfY3B1IHNpbmssIHRoaXMgd291bGQgcmVzZXQgdGhlIGRlZmF1bHQgc2luayBmb3Ig dGhlIHNvdXJjZSBkZXZpY2UKPj4gZXZlcnkgc2luZ2xlIHRpbWUgYW5kIGZhbGxiYWNrIHRvIHNl YXJjaGluZyBldmVyeSBzaW5nbGUgdGltZS4KPiAKPiBSaWdodC4KPiAKPj4gU28gSSB0aGluayBp dCB3b3VsZCBiZSBiZXR0ZXIgaWYgZGlkIGNoZWNrIGlmIHRoZSBkZWZfc2luayB3YXMgbm90IHNl dC4KPj4gV2UgY291bGQgZm9sZCB0aGlzIGludG8gdGhlIGNhc2UgYmVsb3cgbWF5IGJlLiBpLmUs Cj4+Cj4+Cj4+ICDCoMKgwqDCoGlmICghY3NkZXYtPmRlZl9zaW5rKSB7Cj4+ICDCoMKgwqDCoMKg wqDCoCBpZiAoY29yZXNpZ2h0X2lzX3BlcmNwdV9zb3VyY2UoY3NkZXYpKQo+PiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjc2Rldi0+ZGVmX3NpbmsgPSBwZXJfY3B1KGNzZGV2X3NpbmssIHNvdXJj ZV9vcHMoY3NkZXYpLT5jcHVfaWQoY3NkZXYpKTsKPj4gIMKgwqDCoMKgwqDCoMKgIGlmICghY3Nk ZXYtPmRlZl9zaW5rKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3NkZXYtPmRlZl9zaW5rID0gY29y ZXNpZ2h0X2ZpbmRfc2luayhjc2RldiwgJmRlcHRoKTsKPj4gIMKgwqDCoMKgfQo+Pgo+PiBPdGhl cndpc2UgbG9va3MgZ29vZCB0byBtZS4KPiAKPiBzdHJ1Y3QgY29yZXNpZ2h0X2RldmljZSAqCj4g Y29yZXNpZ2h0X2ZpbmRfZGVmYXVsdF9zaW5rKHN0cnVjdCBjb3Jlc2lnaHRfZGV2aWNlICpjc2Rl dikKPiB7Cj4gICAgICAgICAgaW50IGRlcHRoID0gMDsKPiAKPiAgICAgICAgICAvKiBsb29rIGZv ciBhIGRlZmF1bHQgc2luayBpZiB3ZSBoYXZlIG5vdCBmb3VuZCBmb3IgdGhpcyBkZXZpY2UgKi8K PiAgICAgICAgICBpZiAoIWNzZGV2LT5kZWZfc2luaykgewo+ICAgICAgICAgICAgICAgICAgaWYg KGNvcmVzaWdodF9pc19wZXJjcHVfc291cmNlKGNzZGV2KSkKPiAgICAgICAgICAgICAgICAgICAg ICAgICAgY3NkZXYtPmRlZl9zaW5rID0gcGVyX2NwdShjc2Rldl9zaW5rLCBzb3VyY2Vfb3BzKGNz ZGV2KS0+Y3B1X2lkKGNzZGV2KSk7Cj4gICAgICAgICAgICAgICAgICBpZiAoIWNzZGV2LT5kZWZf c2luaykKPiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NkZXYtPmRlZl9zaW5rID0gY29yZXNp Z2h0X2ZpbmRfc2luayhjc2RldiwgJmRlcHRoKTsKPiAgICAgICAgICB9Cj4gICAgICAgICAgcmV0 dXJuIGNzZGV2LT5kZWZfc2luazsKPiB9Cj4gCj4gV291bGQgdGhpcyBiZSBiZXR0ZXIgaW5zdGVh ZCA/IGNvcmVzaWdodF9maW5kX3NpbmsoKSBpcyBpbnZva2VkIGJvdGggd2hlbiB0aGUKPiBzb3Vy Y2UgaXMgbm90IHBlcmNwdSAodHJhZGl0aW9uYWwgY29yZXNpZ2h0IHNvdXJjZXMpIGFuZCBhbHNv IGFzIGEgZmFsbGJhY2sgaW4KPiBjYXNlIGEgcGVyY3B1IHNpbmsgaXMgbm90IGZvdW5kIGZvciB0 aGUgcGVyY3B1IHNvdXJjZSBkZXZpY2UuClllcywgdGhpcyBpcyBleGFjdGx5IHdoYXQgSSBwcm9w b3NlZCBhYm92ZS4KCkNoZWVycwpTdXp1a2kKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK