From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 602A83D6B; Fri, 7 Jun 2024 00:09:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717718968; cv=none; b=cig8UAoxgVAfMKVXz6V1q30tqEgdfof/4+R1ztPicm0TpfPBgdpmKn8H6VAkrdeVHciJToxk+J5mtshSHj1yQP1xJsBiAkPcCWKzLZYwQY4Exsbd8jq57c+TPJbegbn9G3prnyhSZNxupdlDAWN0w+ZCDjVJPP0UrJHcjxnY2lc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717718968; c=relaxed/simple; bh=P43Z2erwmj8B2vWbpL7QxA/jRM327Bp3f0gHcM9G67E=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=anE6KNFePlF2CGrVFq5BGPdf/ZELBKBpTYYVenfTQTYNDcb9/UHJMt4fSUFX7+DzqJNB0wBmaVCY7szYH+yedqSp6lFKDiCaPtZV2Sjy5Ja6XnuzQuHzviwA4++/ASokFnoV5+FGzCR+CRGyNjzkbAZH7+PaOExVgjisYpLw/fs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kJHEqC4J; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kJHEqC4J" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 40BAAC2BD10; Fri, 7 Jun 2024 00:09:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717718967; bh=P43Z2erwmj8B2vWbpL7QxA/jRM327Bp3f0gHcM9G67E=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=kJHEqC4J7HehJfPWzhQ/cjyAHrYLtAV9X9BmAti3FrMgtKmj680wY62uULiAveCrC rGyTDg8mg+sbhOL+PGPKHPuZPX+aZ5vAWgjSlQEzUwS9jNaCIIUverI2uuj/Mg5E6F GF2v8OlqfdkRc4TWbZt6oFEMLMNUkns4ShGCST3E6oAkd7uFKopa0hFhsmuERO8Q1J dE5xqlrqQSX56NZPGWHRfhPKHdbUSuYCyjzCs8t7nOpj+j37Hntt9dd36IUo8Rgv2I +SIhe8S+ScFZgel8DRvx/d4r6LkYTKpgvhAZe1QTP1yaWGCkOLL/cFwUrkQjdRy7hf +wJI8IUS/l5vg== Date: Thu, 6 Jun 2024 17:09:25 -0700 From: Namhyung Kim To: Ian Rogers Cc: Yicong Yang , will@kernel.org, mark.rutland@arm.com, acme@kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, peterz@infradead.org, mingo@redhat.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, james.clark@arm.com, dongli.zhang@oracle.com, jonathan.cameron@huawei.com, prime.zeng@hisilicon.com, linuxarm@huawei.com, yangyicong@hisilicon.com Subject: Re: [PATCH 1/3] perf pmu: Limit PMU cpumask to online CPUs Message-ID: References: <20240603092812.46616-1-yangyicong@huawei.com> <20240603092812.46616-2-yangyicong@huawei.com> Precedence: bulk X-Mailing-List: linux-perf-users@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Hello, On Mon, Jun 03, 2024 at 09:52:15AM -0700, Ian Rogers wrote: > On Mon, Jun 3, 2024 at 2:33 AM Yicong Yang wrote: > > > > From: Yicong Yang > > > > We'll initialize the PMU's cpumask from "cpumask" or "cpus" sysfs > > attributes if provided by the driver without checking the CPUs > > are online or not. In such case that CPUs provided by the driver > > contains the offline CPUs, we'll try to open event on the offline > > CPUs and then rejected by the kernel: > > > > [root@localhost yang]# echo 0 > /sys/devices/system/cpu/cpu0/online > > [root@localhost yang]# ./perf_static stat -e armv8_pmuv3_0/cycles/ --timeout 100 > > Error: > > The sys_perf_event_open() syscall returned with 19 (No such device) for event (cpu-clock). > > /bin/dmesg | grep -i perf may provide additional information. > > > > So it's better to do a double check in the userspace and only include > > the online CPUs from "cpumask" or "cpus" to avoid opening events on > > offline CPUs. > > I see where you are coming from with this but I think it is wrong. The > cpus for an uncore PMU are a hint of the CPU to open on rather than > the set of valid CPUs. For example: > ``` > $ cat /sys/devices/uncore_imc_free_running_0/cpumask > 0 > $ perf stat -vv -e uncore_imc_free_running_0/data_read/ -C 1 -a sleep 0.1 > Using CPUID GenuineIntel-6-8D-1 > Attempt to add: uncore_imc_free_running_0/data_read/ > ..after resolving event: uncore_imc_free_running_0/event=0xff,umask=0x20/ > Control descriptor is not initialized > ------------------------------------------------------------ > perf_event_attr: > type 24 (uncore_imc_free_running_0) > size 136 > config 0x20ff (data_read) > sample_type IDENTIFIER > read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING > disabled 1 > inherit 1 > exclude_guest 1 > ------------------------------------------------------------ > sys_perf_event_open: pid -1 cpu 1 group_fd -1 flags 0x8 > sys_perf_event_open failed, error -22 > switching off cloexec flag > ------------------------------------------------------------ > perf_event_attr: > type 24 (uncore_imc_free_running_0) > size 136 > config 0x20ff (data_read) > sample_type IDENTIFIER > read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING > disabled 1 > inherit 1 > exclude_guest 1 > ------------------------------------------------------------ > sys_perf_event_open: pid -1 cpu 1 group_fd -1 flags 0 > sys_perf_event_open failed, error -22 > switching off exclude_guest, exclude_host > ------------------------------------------------------------ > perf_event_attr: > type 24 (uncore_imc_free_running_0) > size 136 > config 0x20ff (data_read) > sample_type IDENTIFIER > read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING > disabled 1 > inherit 1 > ------------------------------------------------------------ > sys_perf_event_open: pid -1 cpu 1 group_fd -1 flags 0 = 3 > uncore_imc_free_running_0/data_read/: 1: 4005984 102338957 102338957 > uncore_imc_free_running_0/data_read/: 4005984 102338957 102338957 > > Performance counter stats for 'system wide': > > 244.51 MiB uncore_imc_free_running_0/data_read/ > > 0.102320376 seconds time elapsed > ``` > So the CPU mask of the PMU says to open on CPU 0, but on the command > line when I passed "-C 1" it opened it on CPU 1. If the cpumask file > contained an offline CPU then this change would make it so the CPU map > in the tool were empty, however, a different CPU may be programmable > and online. I think Intel uncore PMU driver ignores the CPU parameter and set it to CPU 0 in this case internally. See uncore_pmu_event_init() at https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/events/intel/uncore.c#n761 > > Fwiw, the tool will determine whether the mask is for all valid or a > hint by using the notion of a PMU being "core" or not. That notion > considers whether the mask was loading from a "cpumask" or "cpus" > file: > https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git/tree/tools/perf/util/pmu.c?h=perf-tools-next#n810 > > Thanks, > Ian > > > Signed-off-by: Yicong Yang > > --- > > tools/perf/util/pmu.c | 13 +++++++++++-- > > 1 file changed, 11 insertions(+), 2 deletions(-) > > > > diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c > > index 888ce9912275..51e8d10ee28b 100644 > > --- a/tools/perf/util/pmu.c > > +++ b/tools/perf/util/pmu.c > > @@ -771,8 +771,17 @@ static struct perf_cpu_map *pmu_cpumask(int dirfd, const char *name, bool is_cor > > continue; > > cpus = perf_cpu_map__read(file); > > fclose(file); > > - if (cpus) > > - return cpus; > > + if (cpus) { > > + struct perf_cpu_map *intersect __maybe_unused; > > + > > + if (perf_cpu_map__is_subset(cpu_map__online(), cpus)) > > + return cpus; > > + > > + intersect = perf_cpu_map__intersect(cpus, cpu_map__online()); So IIUC this is for core PMUs with "cpus" file, right? I guess uncore drivers already handles "cpumask" properly.. Thanks, Namhyung > > + perf_cpu_map__put(cpus); > > + if (intersect) > > + return intersect; > > + } > > } > > > > /* Nothing found, for core PMUs assume this means all CPUs. */ > > -- > > 2.24.0 > > 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 34262C27C52 for ; Fri, 7 Jun 2024 00:09: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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ydR8X3kHyzfatuWcrPZxg7rh3ohQNjnoATFMcPCEtdY=; b=iRiRjRv8VMwG5s +JjRZWBlVvl9QpXygVtn28CVzNOTjgclLfMJeb/br+u3c0VcEHvP/RDSdRgue2X3Tcu5sVN431wri fJhamzui1q7S4SHY+6GQ4cbxj9JldSp1ZVW9bWc6wrC4GCrhemiYGeRmfP52l3Eayd+prbgOigseJ SKcNq4bO4juwRofjGq9GVqelDgoJF2tA2U31EkM09YllCk+3+FnpQIwN6suU+OI3Yh9RnyfaTVJHL M50hShu2qukBTMz6Gxu+D4Kc0nK92juc/ISQR9hhrWNXL5UHDwDExH2fNdAPS+fP6v6tL1IGZBPYs rOUUC1gREFNQOqSVeJQg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sFNAk-0000000BmYC-0Ipp; Fri, 07 Jun 2024 00:09:34 +0000 Received: from sin.source.kernel.org ([145.40.73.55]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sFNAg-0000000BmXQ-3nU1 for linux-arm-kernel@lists.infradead.org; Fri, 07 Jun 2024 00:09:32 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 97FA1CE0D97; Fri, 7 Jun 2024 00:09:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 40BAAC2BD10; Fri, 7 Jun 2024 00:09:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717718967; bh=P43Z2erwmj8B2vWbpL7QxA/jRM327Bp3f0gHcM9G67E=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=kJHEqC4J7HehJfPWzhQ/cjyAHrYLtAV9X9BmAti3FrMgtKmj680wY62uULiAveCrC rGyTDg8mg+sbhOL+PGPKHPuZPX+aZ5vAWgjSlQEzUwS9jNaCIIUverI2uuj/Mg5E6F GF2v8OlqfdkRc4TWbZt6oFEMLMNUkns4ShGCST3E6oAkd7uFKopa0hFhsmuERO8Q1J dE5xqlrqQSX56NZPGWHRfhPKHdbUSuYCyjzCs8t7nOpj+j37Hntt9dd36IUo8Rgv2I +SIhe8S+ScFZgel8DRvx/d4r6LkYTKpgvhAZe1QTP1yaWGCkOLL/cFwUrkQjdRy7hf +wJI8IUS/l5vg== Date: Thu, 6 Jun 2024 17:09:25 -0700 From: Namhyung Kim To: Ian Rogers Cc: Yicong Yang , will@kernel.org, mark.rutland@arm.com, acme@kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, peterz@infradead.org, mingo@redhat.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, james.clark@arm.com, dongli.zhang@oracle.com, jonathan.cameron@huawei.com, prime.zeng@hisilicon.com, linuxarm@huawei.com, yangyicong@hisilicon.com Subject: Re: [PATCH 1/3] perf pmu: Limit PMU cpumask to online CPUs Message-ID: References: <20240603092812.46616-1-yangyicong@huawei.com> <20240603092812.46616-2-yangyicong@huawei.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240606_170931_304477_83F446F0 X-CRM114-Status: GOOD ( 35.24 ) 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 SGVsbG8sCgpPbiBNb24sIEp1biAwMywgMjAyNCBhdCAwOTo1MjoxNUFNIC0wNzAwLCBJYW4gUm9n ZXJzIHdyb3RlOgo+IE9uIE1vbiwgSnVuIDMsIDIwMjQgYXQgMjozM+KAr0FNIFlpY29uZyBZYW5n IDx5YW5neWljb25nQGh1YXdlaS5jb20+IHdyb3RlOgo+ID4KPiA+IEZyb206IFlpY29uZyBZYW5n IDx5YW5neWljb25nQGhpc2lsaWNvbi5jb20+Cj4gPgo+ID4gV2UnbGwgaW5pdGlhbGl6ZSB0aGUg UE1VJ3MgY3B1bWFzayBmcm9tICJjcHVtYXNrIiBvciAiY3B1cyIgc3lzZnMKPiA+IGF0dHJpYnV0 ZXMgaWYgcHJvdmlkZWQgYnkgdGhlIGRyaXZlciB3aXRob3V0IGNoZWNraW5nIHRoZSBDUFVzCj4g PiBhcmUgb25saW5lIG9yIG5vdC4gSW4gc3VjaCBjYXNlIHRoYXQgQ1BVcyBwcm92aWRlZCBieSB0 aGUgZHJpdmVyCj4gPiBjb250YWlucyB0aGUgb2ZmbGluZSBDUFVzLCB3ZSdsbCB0cnkgdG8gb3Bl biBldmVudCBvbiB0aGUgb2ZmbGluZQo+ID4gQ1BVcyBhbmQgdGhlbiByZWplY3RlZCBieSB0aGUg a2VybmVsOgo+ID4KPiA+IFtyb290QGxvY2FsaG9zdCB5YW5nXSMgZWNobyAwID4gL3N5cy9kZXZp Y2VzL3N5c3RlbS9jcHUvY3B1MC9vbmxpbmUKPiA+IFtyb290QGxvY2FsaG9zdCB5YW5nXSMgLi9w ZXJmX3N0YXRpYyBzdGF0IC1lIGFybXY4X3BtdXYzXzAvY3ljbGVzLyAtLXRpbWVvdXQgMTAwCj4g PiBFcnJvcjoKPiA+IFRoZSBzeXNfcGVyZl9ldmVudF9vcGVuKCkgc3lzY2FsbCByZXR1cm5lZCB3 aXRoIDE5IChObyBzdWNoIGRldmljZSkgZm9yIGV2ZW50IChjcHUtY2xvY2spLgo+ID4gL2Jpbi9k bWVzZyB8IGdyZXAgLWkgcGVyZiBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgo+ ID4KPiA+IFNvIGl0J3MgYmV0dGVyIHRvIGRvIGEgZG91YmxlIGNoZWNrIGluIHRoZSB1c2Vyc3Bh Y2UgYW5kIG9ubHkgaW5jbHVkZQo+ID4gdGhlIG9ubGluZSBDUFVzIGZyb20gImNwdW1hc2siIG9y ICJjcHVzIiB0byBhdm9pZCBvcGVuaW5nIGV2ZW50cyBvbgo+ID4gb2ZmbGluZSBDUFVzLgo+IAo+ IEkgc2VlIHdoZXJlIHlvdSBhcmUgY29taW5nIGZyb20gd2l0aCB0aGlzIGJ1dCBJIHRoaW5rIGl0 IGlzIHdyb25nLiBUaGUKPiBjcHVzIGZvciBhbiB1bmNvcmUgUE1VIGFyZSBhIGhpbnQgb2YgdGhl IENQVSB0byBvcGVuIG9uIHJhdGhlciB0aGFuCj4gdGhlIHNldCBvZiB2YWxpZCBDUFVzLiBGb3Ig ZXhhbXBsZToKPiBgYGAKPiAkIGNhdCAvc3lzL2RldmljZXMvdW5jb3JlX2ltY19mcmVlX3J1bm5p bmdfMC9jcHVtYXNrCj4gMAo+ICQgcGVyZiBzdGF0IC12diAtZSB1bmNvcmVfaW1jX2ZyZWVfcnVu bmluZ18wL2RhdGFfcmVhZC8gLUMgMSAtYSBzbGVlcCAwLjEKPiBVc2luZyBDUFVJRCBHZW51aW5l SW50ZWwtNi04RC0xCj4gQXR0ZW1wdCB0byBhZGQ6IHVuY29yZV9pbWNfZnJlZV9ydW5uaW5nXzAv ZGF0YV9yZWFkLwo+IC4uYWZ0ZXIgcmVzb2x2aW5nIGV2ZW50OiB1bmNvcmVfaW1jX2ZyZWVfcnVu bmluZ18wL2V2ZW50PTB4ZmYsdW1hc2s9MHgyMC8KPiBDb250cm9sIGRlc2NyaXB0b3IgaXMgbm90 IGluaXRpYWxpemVkCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCj4gcGVyZl9ldmVudF9hdHRyOgo+ICAgdHlwZSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMjQgKHVuY29yZV9pbWNfZnJlZV9ydW5uaW5nXzApCj4gICBzaXpl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzYKPiAgIGNvbmZpZyAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MjBmZiAoZGF0YV9yZWFkKQo+ICAgc2FtcGxlX3R5cGUgICAgICAgICAg ICAgICAgICAgICAgSURFTlRJRklFUgo+ICAgcmVhZF9mb3JtYXQgICAgICAgICAgICAgICAgICAg ICAgVE9UQUxfVElNRV9FTkFCTEVEfFRPVEFMX1RJTUVfUlVOTklORwo+ICAgZGlzYWJsZWQgICAg ICAgICAgICAgICAgICAgICAgICAgMQo+ICAgaW5oZXJpdCAgICAgICAgICAgICAgICAgICAgICAg ICAgMQo+ICAgZXhjbHVkZV9ndWVzdCAgICAgICAgICAgICAgICAgICAgMQo+IC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IHN5c19w ZXJmX2V2ZW50X29wZW46IHBpZCAtMSAgY3B1IDEgIGdyb3VwX2ZkIC0xICBmbGFncyAweDgKPiBz eXNfcGVyZl9ldmVudF9vcGVuIGZhaWxlZCwgZXJyb3IgLTIyCj4gc3dpdGNoaW5nIG9mZiBjbG9l eGVjIGZsYWcKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KPiBwZXJmX2V2ZW50X2F0dHI6Cj4gICB0eXBlICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAyNCAodW5jb3JlX2ltY19mcmVlX3J1bm5pbmdfMCkKPiAgIHNpemUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEzNgo+ICAgY29uZmlnICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgyMGZmIChkYXRhX3JlYWQpCj4gICBzYW1wbGVfdHlwZSAgICAgICAgICAgICAg ICAgICAgICBJREVOVElGSUVSCj4gICByZWFkX2Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICBU T1RBTF9USU1FX0VOQUJMRUR8VE9UQUxfVElNRV9SVU5OSU5HCj4gICBkaXNhYmxlZCAgICAgICAg ICAgICAgICAgICAgICAgICAxCj4gICBpbmhlcml0ICAgICAgICAgICAgICAgICAgICAgICAgICAx Cj4gICBleGNsdWRlX2d1ZXN0ICAgICAgICAgICAgICAgICAgICAxCj4gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gc3lzX3BlcmZf ZXZlbnRfb3BlbjogcGlkIC0xICBjcHUgMSAgZ3JvdXBfZmQgLTEgIGZsYWdzIDAKPiBzeXNfcGVy Zl9ldmVudF9vcGVuIGZhaWxlZCwgZXJyb3IgLTIyCj4gc3dpdGNoaW5nIG9mZiBleGNsdWRlX2d1 ZXN0LCBleGNsdWRlX2hvc3QKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiBwZXJmX2V2ZW50X2F0dHI6Cj4gICB0eXBlICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyNCAodW5jb3JlX2ltY19mcmVlX3J1bm5pbmdfMCkKPiAg IHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNgo+ICAgY29uZmlnICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHgyMGZmIChkYXRhX3JlYWQpCj4gICBzYW1wbGVfdHlwZSAgICAg ICAgICAgICAgICAgICAgICBJREVOVElGSUVSCj4gICByZWFkX2Zvcm1hdCAgICAgICAgICAgICAg ICAgICAgICBUT1RBTF9USU1FX0VOQUJMRUR8VE9UQUxfVElNRV9SVU5OSU5HCj4gICBkaXNhYmxl ZCAgICAgICAgICAgICAgICAgICAgICAgICAxCj4gICBpbmhlcml0ICAgICAgICAgICAgICAgICAg ICAgICAgICAxCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCj4gc3lzX3BlcmZfZXZlbnRfb3BlbjogcGlkIC0xICBjcHUgMSAgZ3Jv dXBfZmQgLTEgIGZsYWdzIDAgPSAzCj4gdW5jb3JlX2ltY19mcmVlX3J1bm5pbmdfMC9kYXRhX3Jl YWQvOiAxOiA0MDA1OTg0IDEwMjMzODk1NyAxMDIzMzg5NTcKPiB1bmNvcmVfaW1jX2ZyZWVfcnVu bmluZ18wL2RhdGFfcmVhZC86IDQwMDU5ODQgMTAyMzM4OTU3IDEwMjMzODk1Nwo+IAo+ICBQZXJm b3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciAnc3lzdGVtIHdpZGUnOgo+IAo+ICAgICAgICAgICAg IDI0NC41MSBNaUIgIHVuY29yZV9pbWNfZnJlZV9ydW5uaW5nXzAvZGF0YV9yZWFkLwo+IAo+ICAg ICAgICAwLjEwMjMyMDM3NiBzZWNvbmRzIHRpbWUgZWxhcHNlZAo+IGBgYAo+IFNvIHRoZSBDUFUg bWFzayBvZiB0aGUgUE1VIHNheXMgdG8gb3BlbiBvbiBDUFUgMCwgYnV0IG9uIHRoZSBjb21tYW5k Cj4gbGluZSB3aGVuIEkgcGFzc2VkICItQyAxIiBpdCBvcGVuZWQgaXQgb24gQ1BVIDEuIElmIHRo ZSBjcHVtYXNrIGZpbGUKPiBjb250YWluZWQgYW4gb2ZmbGluZSBDUFUgdGhlbiB0aGlzIGNoYW5n ZSB3b3VsZCBtYWtlIGl0IHNvIHRoZSBDUFUgbWFwCj4gaW4gdGhlIHRvb2wgd2VyZSBlbXB0eSwg aG93ZXZlciwgYSBkaWZmZXJlbnQgQ1BVIG1heSBiZSBwcm9ncmFtbWFibGUKPiBhbmQgb25saW5l LgoKSSB0aGluayBJbnRlbCB1bmNvcmUgUE1VIGRyaXZlciBpZ25vcmVzIHRoZSBDUFUgcGFyYW1l dGVyIGFuZCBzZXQgaXQgdG8KQ1BVIDAgaW4gdGhpcyBjYXNlIGludGVybmFsbHkuICBTZWUgdW5j b3JlX3BtdV9ldmVudF9pbml0KCkgYXQKaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xp bnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L3RyZWUvYXJjaC94ODYvZXZlbnRzL2lu dGVsL3VuY29yZS5jI243NjEKCj4gCj4gRndpdywgdGhlIHRvb2wgd2lsbCBkZXRlcm1pbmUgd2hl dGhlciB0aGUgbWFzayBpcyBmb3IgYWxsIHZhbGlkIG9yIGEKPiBoaW50IGJ5IHVzaW5nIHRoZSBu b3Rpb24gb2YgYSBQTVUgYmVpbmcgImNvcmUiIG9yIG5vdC4gVGhhdCBub3Rpb24KPiBjb25zaWRl cnMgd2hldGhlciB0aGUgbWFzayB3YXMgbG9hZGluZyBmcm9tIGEgImNwdW1hc2siIG9yICJjcHVz Igo+IGZpbGU6Cj4gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9n aXQvcGVyZi9wZXJmLXRvb2xzLW5leHQuZ2l0L3RyZWUvdG9vbHMvcGVyZi91dGlsL3BtdS5jP2g9 cGVyZi10b29scy1uZXh0I244MTAKPiAKPiBUaGFua3MsCj4gSWFuCj4gCj4gPiBTaWduZWQtb2Zm LWJ5OiBZaWNvbmcgWWFuZyA8eWFuZ3lpY29uZ0BoaXNpbGljb24uY29tPgo+ID4gLS0tCj4gPiAg dG9vbHMvcGVyZi91dGlsL3BtdS5jIHwgMTMgKysrKysrKysrKystLQo+ID4gIDEgZmlsZSBjaGFu Z2VkLCAxMSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQg YS90b29scy9wZXJmL3V0aWwvcG11LmMgYi90b29scy9wZXJmL3V0aWwvcG11LmMKPiA+IGluZGV4 IDg4OGNlOTkxMjI3NS4uNTFlOGQxMGVlMjhiIDEwMDY0NAo+ID4gLS0tIGEvdG9vbHMvcGVyZi91 dGlsL3BtdS5jCj4gPiArKysgYi90b29scy9wZXJmL3V0aWwvcG11LmMKPiA+IEBAIC03NzEsOCAr NzcxLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgcGVyZl9jcHVfbWFwICpwbXVfY3B1bWFzayhpbnQgZGly ZmQsIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfY29yCj4gPiAgICAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKPiA+ICAgICAgICAgICAgICAgICBjcHVzID0gcGVyZl9jcHVfbWFwX19y ZWFkKGZpbGUpOwo+ID4gICAgICAgICAgICAgICAgIGZjbG9zZShmaWxlKTsKPiA+IC0gICAgICAg ICAgICAgICBpZiAoY3B1cykKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcHVz Owo+ID4gKyAgICAgICAgICAgICAgIGlmIChjcHVzKSB7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgcGVyZl9jcHVfbWFwICppbnRlcnNlY3QgX19tYXliZV91bnVzZWQ7Cj4gPiAr Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyZl9jcHVfbWFwX19pc19zdWJzZXQo Y3B1X21hcF9fb25saW5lKCksIGNwdXMpKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gY3B1czsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGludGVy c2VjdCA9IHBlcmZfY3B1X21hcF9faW50ZXJzZWN0KGNwdXMsIGNwdV9tYXBfX29ubGluZSgpKTsK ClNvIElJVUMgdGhpcyBpcyBmb3IgY29yZSBQTVVzIHdpdGggImNwdXMiIGZpbGUsIHJpZ2h0PyAg SSBndWVzcyB1bmNvcmUKZHJpdmVycyBhbHJlYWR5IGhhbmRsZXMgImNwdW1hc2siIHByb3Blcmx5 Li4KClRoYW5rcywKTmFtaHl1bmcKCgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcGVyZl9j cHVfbWFwX19wdXQoY3B1cyk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJz ZWN0KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0 Owo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICAgICAgICAgfQo+ID4KPiA+ICAgICAgICAgLyog Tm90aGluZyBmb3VuZCwgZm9yIGNvcmUgUE1VcyBhc3N1bWUgdGhpcyBtZWFucyBhbGwgQ1BVcy4g Ki8KPiA+IC0tCj4gPiAyLjI0LjAKPiA+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==