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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D0F04C77B73 for ; Fri, 26 May 2023 19:02:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230226AbjEZTCF (ORCPT ); Fri, 26 May 2023 15:02:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35084 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229626AbjEZTCD (ORCPT ); Fri, 26 May 2023 15:02:03 -0400 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1F11B135; Fri, 26 May 2023 12:02:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1685127722; x=1716663722; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=EQX2q4myVyRX8Tuplypnq4PBKR91Gq8qNgVy1wQnpDw=; b=AbzoyOs+Y1uoqO7u0GIaoRqU5s221X7PAeiiHp+CVpoGJMxzlcC1qyVJ gZx8CrCsOrNfz99jyWKKFUVW++HFwrRs7shFsuNds0MhWbs9ZNmIjFXGL meh/7O6R2JueSTOKQEWAEQcpsoqoIPP0ZW2qQWZ/2tv2OZlg7Ai/WyEyV Wl55cWAvV7f9fbjm4UmuJkNGkDiURydztCQG3UH97tFlf9VM+HRtbsjaY qfpic+k1HK9VOuxdsSin13GYO2CqC5WjBjEqcWeRSssj6MwgYA0a+Hwg/ ar6QK4lspqUS0eU+EyQjwBJzvUXQCIWJdh7gAeyy6siEpWAvziYC+jYZ9 g==; X-IronPort-AV: E=McAfee;i="6600,9927,10722"; a="343774931" X-IronPort-AV: E=Sophos;i="6.00,195,1681196400"; d="scan'208";a="343774931" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2023 12:02:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10722"; a="738377098" X-IronPort-AV: E=Sophos;i="6.00,195,1681196400"; d="scan'208";a="738377098" Received: from linux.intel.com ([10.54.29.200]) by orsmga001.jf.intel.com with ESMTP; 26 May 2023 12:02:00 -0700 Received: from [10.209.100.85] (kliang2-mobl1.ccr.corp.intel.com [10.209.100.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by linux.intel.com (Postfix) with ESMTPS id 6FB3F580B9E; Fri, 26 May 2023 12:01:56 -0700 (PDT) Message-ID: Date: Fri, 26 May 2023 15:01:54 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.11.1 Subject: Re: [PATCH v3 16/35] perf pmu: Remove perf_pmu__hybrid_mounted Content-Language: en-US To: Ian Rogers Cc: Suzuki K Poulose , Mike Leach , Leo Yan , John Garry , Will Deacon , James Clark , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Adrian Hunter , Kajol Jain , Jing Zhang , Ravi Bangoria , Madhavan Srinivasan , Athira Rajeev , Ming Wang , Huacai Chen , Sandipan Das , Dmitrii Dolgov <9erthalion6@gmail.com>, Sean Christopherson , Ali Saidi , Rob Herring , Thomas Richter , Kang Minchul , linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org References: <20230524221831.1741381-1-irogers@google.com> <20230524221831.1741381-17-irogers@google.com> <3d943607-645e-be8d-3a68-90e62e402c3d@linux.intel.com> From: "Liang, Kan" In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-perf-users@vger.kernel.org On 2023-05-26 2:33 p.m., Ian Rogers wrote: > On Fri, May 26, 2023 at 11:14 AM Liang, Kan wrote: >> >> >> >> On 2023-05-24 6:18 p.m., Ian Rogers wrote: >>> perf_pmu__hybrid_mounted is used to detect whether cpu_core or >>> cpu_atom is mounted with a non-empty cpus file by >>> pmu_lookup. pmu_lookup will attempt to read the cpus file too and so >>> the check can be folded into this. >>> >>> Checking hybrid_mounted in pmu_is_uncore is redundant as the next >>> cpumask read will fail returning false. >>> >>> Reduce the scope of perf_pmu__find_hybrid_pmu by making it static. >>> >>> Signed-off-by: Ian Rogers >>> --- >>> tools/perf/util/pmu-hybrid.c | 15 +-------------- >>> tools/perf/util/pmu-hybrid.h | 3 --- >>> tools/perf/util/pmu.c | 26 ++++++++++++++------------ >>> 3 files changed, 15 insertions(+), 29 deletions(-) >>> >>> diff --git a/tools/perf/util/pmu-hybrid.c b/tools/perf/util/pmu-hybrid.c >>> index bc4cb0738c35..7fe943dd3217 100644 >>> --- a/tools/perf/util/pmu-hybrid.c >>> +++ b/tools/perf/util/pmu-hybrid.c >>> @@ -18,20 +18,7 @@ >>> >>> LIST_HEAD(perf_pmu__hybrid_pmus); >>> >>> -bool perf_pmu__hybrid_mounted(const char *name) >>> -{ >>> - int cpu; >>> - char pmu_name[PATH_MAX]; >>> - struct perf_pmu pmu = {.name = pmu_name}; >>> - >>> - if (strncmp(name, "cpu_", 4)) >>> - return false; >>> - >>> - strlcpy(pmu_name, name, sizeof(pmu_name)); >>> - return perf_pmu__scan_file(&pmu, "cpus", "%u", &cpu) > 0; >>> -} >>> - >>> -struct perf_pmu *perf_pmu__find_hybrid_pmu(const char *name) >>> +static struct perf_pmu *perf_pmu__find_hybrid_pmu(const char *name) >>> { >>> struct perf_pmu *pmu; >>> >>> diff --git a/tools/perf/util/pmu-hybrid.h b/tools/perf/util/pmu-hybrid.h >>> index 206b94931531..8dbcae935020 100644 >>> --- a/tools/perf/util/pmu-hybrid.h >>> +++ b/tools/perf/util/pmu-hybrid.h >>> @@ -13,9 +13,6 @@ extern struct list_head perf_pmu__hybrid_pmus; >>> #define perf_pmu__for_each_hybrid_pmu(pmu) \ >>> list_for_each_entry(pmu, &perf_pmu__hybrid_pmus, hybrid_list) >>> >>> -bool perf_pmu__hybrid_mounted(const char *name); >>> - >>> -struct perf_pmu *perf_pmu__find_hybrid_pmu(const char *name); >>> bool perf_pmu__is_hybrid(const char *name); >>> >>> static inline int perf_pmu__hybrid_pmu_num(void) >>> diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c >>> index cd94abe7a87a..e9f3e6a777c0 100644 >>> --- a/tools/perf/util/pmu.c >>> +++ b/tools/perf/util/pmu.c >>> @@ -617,9 +617,6 @@ static bool pmu_is_uncore(int dirfd, const char *name) >>> { >>> int fd; >>> >>> - if (perf_pmu__hybrid_mounted(name)) >>> - return false; >>> - >>> fd = perf_pmu__pathname_fd(dirfd, name, "cpumask", O_PATH); >>> if (fd < 0) >>> return false; >>> @@ -900,6 +897,16 @@ static int pmu_max_precise(int dirfd, struct perf_pmu *pmu) >>> return max_precise; >>> } >>> >>> +/** >>> + * perf_pmu__skip_empty_cpus() - should pmu_lookup skip the named PMU if the >>> + * cpus or cpumask file isn't present? >>> + * @name: Name of PMU. >>> + */ >>> +static bool perf_pmu__skip_empty_cpus(const char *name) >>> +{ >>> + return !strcmp(name, "cpu_core") || !strcmp(name, "cpu_atom"); >> >> Can we use the below to replace? >> return !strncmp(name, "cpu_", 4); >> >> Otherwise, anytime a new core PMU name is introduced, I have to patch >> the function. > > I dislike this function but was carrying it forward, I think we can > get rid of it. The point of erroring is to not have core PMUs when > there are no online CPUs associated with it. For existing core PMUs > this just isn't something that can happen as otherwise what CPU are > you running on. For hybrid it can happen and we know we care because > the PMU's type is core. For hybrid, I think it can only happen when there is a kernel bug, e.g., a new core PMU is added but forgets to set the CPU mask. > So why not change the error to be when the cpu > map is empty and the CPU is core? I don't think PT has cpu map. Other PMUs, e.g., msr, don't have cpu map either. They are not core PMU. Actually, I'm OK with just removing the function. Maybe we can add a test to check the CPU mask on hybrid. If it doesn't exist, it should be a bug of perf. Thanks, Kan > I'm going to assume that my logic is > sound and change the code in v4, but please complain. > > Thanks, > Ian > >> Thanks, >> Kan >> >>> +} >>> + >>> static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name) >>> { >>> struct perf_pmu *pmu; >>> @@ -907,15 +914,8 @@ static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name) >>> LIST_HEAD(aliases); >>> __u32 type; >>> char *name = pmu_find_real_name(lookup_name); >>> - bool is_hybrid = perf_pmu__hybrid_mounted(name); >>> char *alias_name; >>> >>> - /* >>> - * Check pmu name for hybrid and the pmu may be invalid in sysfs >>> - */ >>> - if (!strncmp(name, "cpu_", 4) && !is_hybrid) >>> - return NULL; >>> - >>> /* >>> * The pmu data we store & need consists of the pmu >>> * type value and format definitions. Load both right >>> @@ -935,8 +935,10 @@ static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name) >>> return NULL; >>> >>> pmu->cpus = pmu_cpumask(dirfd, name); >>> - pmu->name = strdup(name); >>> + if (!pmu->cpus && perf_pmu__skip_empty_cpus(name)) >>> + goto err; >>> >>> + pmu->name = strdup(name); >>> if (!pmu->name) >>> goto err; >>> >>> @@ -967,7 +969,7 @@ static struct perf_pmu *pmu_lookup(int dirfd, const char *lookup_name) >>> list_splice(&aliases, &pmu->aliases); >>> list_add_tail(&pmu->list, &pmus); >>> >>> - if (is_hybrid) >>> + if (!strcmp(name, "cpu_core") || !strcmp(name, "cpu_atom")) >>> list_add_tail(&pmu->hybrid_list, &perf_pmu__hybrid_pmus); >>> else >>> INIT_LIST_HEAD(&pmu->hybrid_list); 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 D2014C77B7A for ; Fri, 26 May 2023 19:02:35 +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=kB77L0DBwSXG8XjI+K3GOZnnvs1KxJk1w1Nu7SHd7qU=; b=VmvLxIcK808vSS mCejfBx5tQ7+eMCt+69Wp0KiGTMhDjvKFX4I6heirir581tEhKXx94qQVwdx+w8Bk2j2n0bOlEreb b4JtwsA9nfSQUK2YwstK9HAXx9BeXjoCZfQBo2hV1RhIOu+jpVKhBIMYzFXg7n+mL9a5SoVDKcTZc R3qjMHLpw9o8Hvm02JTe15ckQ5rdGwsP/Atj7gDnEqqpVI/NlcuXg74cIksNGIdiqEY5AKse3TtQ8 ZEkZjzHxYDLzn+o/jLC/dtdHKFpmYGOarhn5GCK5BxJ6Ln1r4Iz7eGp/1Zx8xwug8/BRb1lMpNUQe O4IggDCfOuBnX6IcoQXg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q2chW-003aYX-1f; Fri, 26 May 2023 19:02:10 +0000 Received: from mga02.intel.com ([134.134.136.20]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q2chR-003aWD-2i for linux-arm-kernel@lists.infradead.org; Fri, 26 May 2023 19:02:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1685127725; x=1716663725; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=EQX2q4myVyRX8Tuplypnq4PBKR91Gq8qNgVy1wQnpDw=; b=BTdNBKnnmBArqFUGK9oo2nBjoj4xQf0nAwPChMf7l1s58sAoXHmw6sTS 6kTt1foulXvLq8GMYZpfCWLUq5jmt/Pnp8vdUJmklOemGGk4ELAIz9By1 VjG4tBAK2jvkbq1JRJvI+SyBqrvOkMfM0MBVDQ/Dd0kI+iaraNCzR4YiI g+IPkSD0G0VuCPwgDQt7EniisT7XwEOhPpLR5qkGiJNC0hVd0SBvqkSr8 JEJN5UXbcANPOetLl1hhwNQMBK2WP0im0NoqLMotZKs0qO8Uu+9Q7d5es 78+RQQgdpLj7ZPvYbD0098iTpmRMJ22WMepu0rsx7NRbDlxL9k6KDCQY/ g==; X-IronPort-AV: E=McAfee;i="6600,9927,10722"; a="343774937" X-IronPort-AV: E=Sophos;i="6.00,195,1681196400"; d="scan'208";a="343774937" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2023 12:02:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10722"; a="738377098" X-IronPort-AV: E=Sophos;i="6.00,195,1681196400"; d="scan'208";a="738377098" Received: from linux.intel.com ([10.54.29.200]) by orsmga001.jf.intel.com with ESMTP; 26 May 2023 12:02:00 -0700 Received: from [10.209.100.85] (kliang2-mobl1.ccr.corp.intel.com [10.209.100.85]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by linux.intel.com (Postfix) with ESMTPS id 6FB3F580B9E; Fri, 26 May 2023 12:01:56 -0700 (PDT) Message-ID: Date: Fri, 26 May 2023 15:01:54 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.11.1 Subject: Re: [PATCH v3 16/35] perf pmu: Remove perf_pmu__hybrid_mounted Content-Language: en-US To: Ian Rogers Cc: Suzuki K Poulose , Mike Leach , Leo Yan , John Garry , Will Deacon , James Clark , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Adrian Hunter , Kajol Jain , Jing Zhang , Ravi Bangoria , Madhavan Srinivasan , Athira Rajeev , Ming Wang , Huacai Chen , Sandipan Das , Dmitrii Dolgov <9erthalion6@gmail.com>, Sean Christopherson , Ali Saidi , Rob Herring , Thomas Richter , Kang Minchul , linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org References: <20230524221831.1741381-1-irogers@google.com> <20230524221831.1741381-17-irogers@google.com> <3d943607-645e-be8d-3a68-90e62e402c3d@linux.intel.com> From: "Liang, Kan" In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230526_120205_956532_FC61435C X-CRM114-Status: GOOD ( 34.23 ) 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 CgpPbiAyMDIzLTA1LTI2IDI6MzMgcC5tLiwgSWFuIFJvZ2VycyB3cm90ZToKPiBPbiBGcmksIE1h eSAyNiwgMjAyMyBhdCAxMToxNOKAr0FNIExpYW5nLCBLYW4gPGthbi5saWFuZ0BsaW51eC5pbnRl bC5jb20+IHdyb3RlOgo+Pgo+Pgo+Pgo+PiBPbiAyMDIzLTA1LTI0IDY6MTggcC5tLiwgSWFuIFJv Z2VycyB3cm90ZToKPj4+IHBlcmZfcG11X19oeWJyaWRfbW91bnRlZCBpcyB1c2VkIHRvIGRldGVj dCB3aGV0aGVyIGNwdV9jb3JlIG9yCj4+PiBjcHVfYXRvbSBpcyBtb3VudGVkIHdpdGggYSBub24t ZW1wdHkgY3B1cyBmaWxlIGJ5Cj4+PiBwbXVfbG9va3VwLiBwbXVfbG9va3VwIHdpbGwgYXR0ZW1w dCB0byByZWFkIHRoZSBjcHVzIGZpbGUgdG9vIGFuZCBzbwo+Pj4gdGhlIGNoZWNrIGNhbiBiZSBm b2xkZWQgaW50byB0aGlzLgo+Pj4KPj4+IENoZWNraW5nIGh5YnJpZF9tb3VudGVkIGluIHBtdV9p c191bmNvcmUgaXMgcmVkdW5kYW50IGFzIHRoZSBuZXh0Cj4+PiBjcHVtYXNrIHJlYWQgd2lsbCBm YWlsIHJldHVybmluZyBmYWxzZS4KPj4+Cj4+PiBSZWR1Y2UgdGhlIHNjb3BlIG9mIHBlcmZfcG11 X19maW5kX2h5YnJpZF9wbXUgYnkgbWFraW5nIGl0IHN0YXRpYy4KPj4+Cj4+PiBTaWduZWQtb2Zm LWJ5OiBJYW4gUm9nZXJzIDxpcm9nZXJzQGdvb2dsZS5jb20+Cj4+PiAtLS0KPj4+ICB0b29scy9w ZXJmL3V0aWwvcG11LWh5YnJpZC5jIHwgMTUgKy0tLS0tLS0tLS0tLS0tCj4+PiAgdG9vbHMvcGVy Zi91dGlsL3BtdS1oeWJyaWQuaCB8ICAzIC0tLQo+Pj4gIHRvb2xzL3BlcmYvdXRpbC9wbXUuYyAg ICAgICAgfCAyNiArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQo+Pj4gIDMgZmlsZXMgY2hhbmdl ZCwgMTUgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBh L3Rvb2xzL3BlcmYvdXRpbC9wbXUtaHlicmlkLmMgYi90b29scy9wZXJmL3V0aWwvcG11LWh5YnJp ZC5jCj4+PiBpbmRleCBiYzRjYjA3MzhjMzUuLjdmZTk0M2RkMzIxNyAxMDA2NDQKPj4+IC0tLSBh L3Rvb2xzL3BlcmYvdXRpbC9wbXUtaHlicmlkLmMKPj4+ICsrKyBiL3Rvb2xzL3BlcmYvdXRpbC9w bXUtaHlicmlkLmMKPj4+IEBAIC0xOCwyMCArMTgsNyBAQAo+Pj4KPj4+ICBMSVNUX0hFQUQocGVy Zl9wbXVfX2h5YnJpZF9wbXVzKTsKPj4+Cj4+PiAtYm9vbCBwZXJmX3BtdV9faHlicmlkX21vdW50 ZWQoY29uc3QgY2hhciAqbmFtZSkKPj4+IC17Cj4+PiAtICAgICBpbnQgY3B1Owo+Pj4gLSAgICAg Y2hhciBwbXVfbmFtZVtQQVRIX01BWF07Cj4+PiAtICAgICBzdHJ1Y3QgcGVyZl9wbXUgcG11ID0g ey5uYW1lID0gcG11X25hbWV9Owo+Pj4gLQo+Pj4gLSAgICAgaWYgKHN0cm5jbXAobmFtZSwgImNw dV8iLCA0KSkKPj4+IC0gICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4gLQo+Pj4gLSAgICAg c3RybGNweShwbXVfbmFtZSwgbmFtZSwgc2l6ZW9mKHBtdV9uYW1lKSk7Cj4+PiAtICAgICByZXR1 cm4gcGVyZl9wbXVfX3NjYW5fZmlsZSgmcG11LCAiY3B1cyIsICIldSIsICZjcHUpID4gMDsKPj4+ IC19Cj4+PiAtCj4+PiAtc3RydWN0IHBlcmZfcG11ICpwZXJmX3BtdV9fZmluZF9oeWJyaWRfcG11 KGNvbnN0IGNoYXIgKm5hbWUpCj4+PiArc3RhdGljIHN0cnVjdCBwZXJmX3BtdSAqcGVyZl9wbXVf X2ZpbmRfaHlicmlkX3BtdShjb25zdCBjaGFyICpuYW1lKQo+Pj4gIHsKPj4+ICAgICAgIHN0cnVj dCBwZXJmX3BtdSAqcG11Owo+Pj4KPj4+IGRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcG11 LWh5YnJpZC5oIGIvdG9vbHMvcGVyZi91dGlsL3BtdS1oeWJyaWQuaAo+Pj4gaW5kZXggMjA2Yjk0 OTMxNTMxLi44ZGJjYWU5MzUwMjAgMTAwNjQ0Cj4+PiAtLS0gYS90b29scy9wZXJmL3V0aWwvcG11 LWh5YnJpZC5oCj4+PiArKysgYi90b29scy9wZXJmL3V0aWwvcG11LWh5YnJpZC5oCj4+PiBAQCAt MTMsOSArMTMsNiBAQCBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBwZXJmX3BtdV9faHlicmlkX3Bt dXM7Cj4+PiAgI2RlZmluZSBwZXJmX3BtdV9fZm9yX2VhY2hfaHlicmlkX3BtdShwbXUpICAgXAo+ Pj4gICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShwbXUsICZwZXJmX3BtdV9faHlicmlkX3BtdXMs IGh5YnJpZF9saXN0KQo+Pj4KPj4+IC1ib29sIHBlcmZfcG11X19oeWJyaWRfbW91bnRlZChjb25z dCBjaGFyICpuYW1lKTsKPj4+IC0KPj4+IC1zdHJ1Y3QgcGVyZl9wbXUgKnBlcmZfcG11X19maW5k X2h5YnJpZF9wbXUoY29uc3QgY2hhciAqbmFtZSk7Cj4+PiAgYm9vbCBwZXJmX3BtdV9faXNfaHli cmlkKGNvbnN0IGNoYXIgKm5hbWUpOwo+Pj4KPj4+ICBzdGF0aWMgaW5saW5lIGludCBwZXJmX3Bt dV9faHlicmlkX3BtdV9udW0odm9pZCkKPj4+IGRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwv cG11LmMgYi90b29scy9wZXJmL3V0aWwvcG11LmMKPj4+IGluZGV4IGNkOTRhYmU3YTg3YS4uZTlm M2U2YTc3N2MwIDEwMDY0NAo+Pj4gLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BtdS5jCj4+PiArKysg Yi90b29scy9wZXJmL3V0aWwvcG11LmMKPj4+IEBAIC02MTcsOSArNjE3LDYgQEAgc3RhdGljIGJv b2wgcG11X2lzX3VuY29yZShpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKm5hbWUpCj4+PiAgewo+Pj4g ICAgICAgaW50IGZkOwo+Pj4KPj4+IC0gICAgIGlmIChwZXJmX3BtdV9faHlicmlkX21vdW50ZWQo bmFtZSkpCj4+PiAtICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4+IC0KPj4+ICAgICAgIGZk ID0gcGVyZl9wbXVfX3BhdGhuYW1lX2ZkKGRpcmZkLCBuYW1lLCAiY3B1bWFzayIsIE9fUEFUSCk7 Cj4+PiAgICAgICBpZiAoZmQgPCAwKQo+Pj4gICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4+ PiBAQCAtOTAwLDYgKzg5NywxNiBAQCBzdGF0aWMgaW50IHBtdV9tYXhfcHJlY2lzZShpbnQgZGly ZmQsIHN0cnVjdCBwZXJmX3BtdSAqcG11KQo+Pj4gICAgICAgcmV0dXJuIG1heF9wcmVjaXNlOwo+ Pj4gIH0KPj4+Cj4+PiArLyoqCj4+PiArICogcGVyZl9wbXVfX3NraXBfZW1wdHlfY3B1cygpIC0g c2hvdWxkIHBtdV9sb29rdXAgc2tpcCB0aGUgbmFtZWQgUE1VIGlmIHRoZQo+Pj4gKyAqICAgICAg Y3B1cyBvciBjcHVtYXNrIGZpbGUgaXNuJ3QgcHJlc2VudD8KPj4+ICsgKiBAbmFtZTogTmFtZSBv ZiBQTVUuCj4+PiArICovCj4+PiArc3RhdGljIGJvb2wgcGVyZl9wbXVfX3NraXBfZW1wdHlfY3B1 cyhjb25zdCBjaGFyICpuYW1lKQo+Pj4gK3sKPj4+ICsgICAgIHJldHVybiAhc3RyY21wKG5hbWUs ICJjcHVfY29yZSIpIHx8ICFzdHJjbXAobmFtZSwgImNwdV9hdG9tIik7Cj4+Cj4+IENhbiB3ZSB1 c2UgdGhlIGJlbG93IHRvIHJlcGxhY2U/Cj4+IHJldHVybiAhc3RybmNtcChuYW1lLCAiY3B1XyIs IDQpOwo+Pgo+PiBPdGhlcndpc2UsIGFueXRpbWUgYSBuZXcgY29yZSBQTVUgbmFtZSBpcyBpbnRy b2R1Y2VkLCBJIGhhdmUgdG8gcGF0Y2gKPj4gdGhlIGZ1bmN0aW9uLgo+IAo+IEkgZGlzbGlrZSB0 aGlzIGZ1bmN0aW9uIGJ1dCB3YXMgY2FycnlpbmcgaXQgZm9yd2FyZCwgSSB0aGluayB3ZSBjYW4K PiBnZXQgcmlkIG9mIGl0LiBUaGUgcG9pbnQgb2YgZXJyb3JpbmcgaXMgdG8gbm90IGhhdmUgY29y ZSBQTVVzIHdoZW4KPiB0aGVyZSBhcmUgbm8gb25saW5lIENQVXMgYXNzb2NpYXRlZCB3aXRoIGl0 LiBGb3IgZXhpc3RpbmcgY29yZSBQTVVzCj4gdGhpcyBqdXN0IGlzbid0IHNvbWV0aGluZyB0aGF0 IGNhbiBoYXBwZW4gYXMgb3RoZXJ3aXNlIHdoYXQgQ1BVIGFyZQo+IHlvdSBydW5uaW5nIG9uLiBG b3IgaHlicmlkIGl0IGNhbiBoYXBwZW4gYW5kIHdlIGtub3cgd2UgY2FyZSBiZWNhdXNlCj4gdGhl IFBNVSdzIHR5cGUgaXMgY29yZS4gCgpGb3IgaHlicmlkLCBJIHRoaW5rIGl0IGNhbiBvbmx5IGhh cHBlbiB3aGVuIHRoZXJlIGlzIGEga2VybmVsIGJ1ZywgZS5nLiwKYSBuZXcgY29yZSBQTVUgaXMg YWRkZWQgYnV0IGZvcmdldHMgdG8gc2V0IHRoZSBDUFUgbWFzay4KCj4gU28gd2h5IG5vdCBjaGFu Z2UgdGhlIGVycm9yIHRvIGJlIHdoZW4gdGhlIGNwdQo+IG1hcCBpcyBlbXB0eSBhbmQgdGhlIENQ VSBpcyBjb3JlPwoKSSBkb24ndCB0aGluayBQVCBoYXMgY3B1IG1hcC4gT3RoZXIgUE1VcywgZS5n LiwgbXNyLCBkb24ndCBoYXZlIGNwdSBtYXAKZWl0aGVyLiBUaGV5IGFyZSBub3QgY29yZSBQTVUu CgpBY3R1YWxseSwgSSdtIE9LIHdpdGgganVzdCByZW1vdmluZyB0aGUgZnVuY3Rpb24uIE1heWJl IHdlIGNhbiBhZGQgYQp0ZXN0IHRvIGNoZWNrIHRoZSBDUFUgbWFzayBvbiBoeWJyaWQuIElmIGl0 IGRvZXNuJ3QgZXhpc3QsIGl0IHNob3VsZCBiZQphIGJ1ZyBvZiBwZXJmLgoKVGhhbmtzLApLYW4K Cj4gSSdtIGdvaW5nIHRvIGFzc3VtZSB0aGF0IG15IGxvZ2ljIGlzCj4gc291bmQgYW5kIGNoYW5n ZSB0aGUgY29kZSBpbiB2NCwgYnV0IHBsZWFzZSBjb21wbGFpbi4KPiAKPiBUaGFua3MsCj4gSWFu Cj4gCj4+IFRoYW5rcywKPj4gS2FuCj4+Cj4+PiArfQo+Pj4gKwo+Pj4gIHN0YXRpYyBzdHJ1Y3Qg cGVyZl9wbXUgKnBtdV9sb29rdXAoaW50IGRpcmZkLCBjb25zdCBjaGFyICpsb29rdXBfbmFtZSkK Pj4+ICB7Cj4+PiAgICAgICBzdHJ1Y3QgcGVyZl9wbXUgKnBtdTsKPj4+IEBAIC05MDcsMTUgKzkx NCw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGVyZl9wbXUgKnBtdV9sb29rdXAoaW50IGRpcmZkLCBjb25z dCBjaGFyICpsb29rdXBfbmFtZSkKPj4+ICAgICAgIExJU1RfSEVBRChhbGlhc2VzKTsKPj4+ICAg ICAgIF9fdTMyIHR5cGU7Cj4+PiAgICAgICBjaGFyICpuYW1lID0gcG11X2ZpbmRfcmVhbF9uYW1l KGxvb2t1cF9uYW1lKTsKPj4+IC0gICAgIGJvb2wgaXNfaHlicmlkID0gcGVyZl9wbXVfX2h5YnJp ZF9tb3VudGVkKG5hbWUpOwo+Pj4gICAgICAgY2hhciAqYWxpYXNfbmFtZTsKPj4+Cj4+PiAtICAg ICAvKgo+Pj4gLSAgICAgICogQ2hlY2sgcG11IG5hbWUgZm9yIGh5YnJpZCBhbmQgdGhlIHBtdSBt YXkgYmUgaW52YWxpZCBpbiBzeXNmcwo+Pj4gLSAgICAgICovCj4+PiAtICAgICBpZiAoIXN0cm5j bXAobmFtZSwgImNwdV8iLCA0KSAmJiAhaXNfaHlicmlkKQo+Pj4gLSAgICAgICAgICAgICByZXR1 cm4gTlVMTDsKPj4+IC0KPj4+ICAgICAgIC8qCj4+PiAgICAgICAgKiBUaGUgcG11IGRhdGEgd2Ug c3RvcmUgJiBuZWVkIGNvbnNpc3RzIG9mIHRoZSBwbXUKPj4+ICAgICAgICAqIHR5cGUgdmFsdWUg YW5kIGZvcm1hdCBkZWZpbml0aW9ucy4gTG9hZCBib3RoIHJpZ2h0Cj4+PiBAQCAtOTM1LDggKzkz NSwxMCBAQCBzdGF0aWMgc3RydWN0IHBlcmZfcG11ICpwbXVfbG9va3VwKGludCBkaXJmZCwgY29u c3QgY2hhciAqbG9va3VwX25hbWUpCj4+PiAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+Pj4K Pj4+ICAgICAgIHBtdS0+Y3B1cyA9IHBtdV9jcHVtYXNrKGRpcmZkLCBuYW1lKTsKPj4+IC0gICAg IHBtdS0+bmFtZSA9IHN0cmR1cChuYW1lKTsKPj4+ICsgICAgIGlmICghcG11LT5jcHVzICYmIHBl cmZfcG11X19za2lwX2VtcHR5X2NwdXMobmFtZSkpCj4+PiArICAgICAgICAgICAgIGdvdG8gZXJy Owo+Pj4KPj4+ICsgICAgIHBtdS0+bmFtZSA9IHN0cmR1cChuYW1lKTsKPj4+ICAgICAgIGlmICgh cG11LT5uYW1lKQo+Pj4gICAgICAgICAgICAgICBnb3RvIGVycjsKPj4+Cj4+PiBAQCAtOTY3LDcg Kzk2OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGVyZl9wbXUgKnBtdV9sb29rdXAoaW50IGRpcmZkLCBj b25zdCBjaGFyICpsb29rdXBfbmFtZSkKPj4+ICAgICAgIGxpc3Rfc3BsaWNlKCZhbGlhc2VzLCAm cG11LT5hbGlhc2VzKTsKPj4+ICAgICAgIGxpc3RfYWRkX3RhaWwoJnBtdS0+bGlzdCwgJnBtdXMp Owo+Pj4KPj4+IC0gICAgIGlmIChpc19oeWJyaWQpCj4+PiArICAgICBpZiAoIXN0cmNtcChuYW1l LCAiY3B1X2NvcmUiKSB8fCAhc3RyY21wKG5hbWUsICJjcHVfYXRvbSIpKQo+Pj4gICAgICAgICAg ICAgICBsaXN0X2FkZF90YWlsKCZwbXUtPmh5YnJpZF9saXN0LCAmcGVyZl9wbXVfX2h5YnJpZF9w bXVzKTsKPj4+ICAgICAgIGVsc2UKPj4+ICAgICAgICAgICAgICAgSU5JVF9MSVNUX0hFQUQoJnBt dS0+aHlicmlkX2xpc3QpOwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=