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 8F080C433EF for ; Mon, 10 Jan 2022 20:46:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245744AbiAJUqz (ORCPT ); Mon, 10 Jan 2022 15:46:55 -0500 Received: from dfw.source.kernel.org ([139.178.84.217]:56122 "EHLO dfw.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239437AbiAJUqz (ORCPT ); Mon, 10 Jan 2022 15:46:55 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 017D16142A; Mon, 10 Jan 2022 20:46:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1EBE0C36AE9; Mon, 10 Jan 2022 20:46:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641847614; bh=Dtflepn+hs76RtWPokXd1DOmPXiHaN6eq1lXsTLyWmg=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=qrNxssoBeMjoafavVz145FCWK9CtI5coeuqFnX+LojAFvZm7MMJ0+B4boc0WzmItp 6jNRlwyk/6uvPcrWS1RMldYmzAAXrgEqJyCHuTBfFpvK+5ELxUdqnH+kDhAjpINfax 3fBh6UXm5AtgBVruuZeMGTn5ukldPsledxcV+QyFsC/OMKFRKP3rkHlUiKNIiYUoUJ DOw/5SKVdgRoc9uc1r7zj9KgQASSbxkHknvfZBwCTTD5uTzrxMhNZQKkAhm7fwVKSp 6YDiIWzV2eIHvRO05UerdTb42AWmW0xOugp9M9eG7b3e84h1bx7LyguAVsWtA6Klgg dj7Dww7n1dGuA== Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id 2742D40714; Mon, 10 Jan 2022 17:46:52 -0300 (-03) Date: Mon, 10 Jan 2022 17:46:52 -0300 From: Arnaldo Carvalho de Melo To: Ian Rogers Cc: Andi Kleen , Jiri Olsa , Namhyung Kim , John Garry , Kajol Jain , "Paul A . Clarke" , Riccardo Mancini , Kan Liang , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Vineet Singh , James Clark , Mathieu Poirier , Suzuki K Poulose , Mike Leach , Leo Yan , coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, zhengjun.xing@intel.com, eranian@google.com Subject: Re: [PATCH v3 06/48] perf cpumap: Switch cpu_map__build_map to cpu function Message-ID: References: <20211230072030.302559-1-irogers@google.com> <20211230072030.302559-8-irogers@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20211230072030.302559-8-irogers@google.com> X-Url: http://acmel.wordpress.com Precedence: bulk List-ID: X-Mailing-List: linux-perf-users@vger.kernel.org Em Wed, Dec 29, 2021 at 11:19:48PM -0800, Ian Rogers escreveu: > Avoid error prone cpu_map + idx variant. Remove now unused functions. At this point we need to remove the now unused perf_env__get_cpu(), and then deal with the fallout in the following patches that needlessly modify this unused function. Doing that now. - Arnaldo ⬢[acme@toolbox perf]$ git diff diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 6b985abaa2d22c58..40cb3518f27e2309 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -1477,22 +1477,6 @@ static void perf_stat__exit_aggr_mode(void) stat_config.cpus_aggr_map = NULL; } -static inline int perf_env__get_cpu(void *data, struct perf_cpu_map *map, int idx) -{ - struct perf_env *env = data; - int cpu; - - if (idx > map->nr) - return -1; - - cpu = map->map[idx]; - - if (cpu >= env->nr_cpus_avail) - return -1; - - return cpu; -} - static struct aggr_cpu_id perf_env__get_socket_aggr_by_cpu(int cpu, void *data) { struct perf_env *env = data; > Reviewed-by: James Clark > Signed-off-by: Ian Rogers > --- > tools/perf/builtin-stat.c | 28 ++++------------------------ > tools/perf/util/cpumap.c | 12 ++++++------ > tools/perf/util/cpumap.h | 2 +- > 3 files changed, 11 insertions(+), 31 deletions(-) > > diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c > index 9791ae9b1a53..6b985abaa2d2 100644 > --- a/tools/perf/builtin-stat.c > +++ b/tools/perf/builtin-stat.c > @@ -1504,11 +1504,6 @@ static struct aggr_cpu_id perf_env__get_socket_aggr_by_cpu(int cpu, void *data) > return id; > } > > -static struct aggr_cpu_id perf_env__get_socket(struct perf_cpu_map *map, int idx, void *data) > -{ > - return perf_env__get_socket_aggr_by_cpu(perf_env__get_cpu(data, map, idx), data); > -} > - > static struct aggr_cpu_id perf_env__get_die_aggr_by_cpu(int cpu, void *data) > { > struct perf_env *env = data; > @@ -1527,11 +1522,6 @@ static struct aggr_cpu_id perf_env__get_die_aggr_by_cpu(int cpu, void *data) > return id; > } > > -static struct aggr_cpu_id perf_env__get_die(struct perf_cpu_map *map, int idx, void *data) > -{ > - return perf_env__get_die_aggr_by_cpu(perf_env__get_cpu(data, map, idx), data); > -} > - > static struct aggr_cpu_id perf_env__get_core_aggr_by_cpu(int cpu, void *data) > { > struct perf_env *env = data; > @@ -1551,11 +1541,6 @@ static struct aggr_cpu_id perf_env__get_core_aggr_by_cpu(int cpu, void *data) > return id; > } > > -static struct aggr_cpu_id perf_env__get_core(struct perf_cpu_map *map, int idx, void *data) > -{ > - return perf_env__get_core_aggr_by_cpu(perf_env__get_cpu(data, map, idx), data); > -} > - > static struct aggr_cpu_id perf_env__get_node_aggr_by_cpu(int cpu, void *data) > { > struct aggr_cpu_id id = cpu_map__empty_aggr_cpu_id(); > @@ -1564,33 +1549,28 @@ static struct aggr_cpu_id perf_env__get_node_aggr_by_cpu(int cpu, void *data) > return id; > } > > -static struct aggr_cpu_id perf_env__get_node(struct perf_cpu_map *map, int idx, void *data) > -{ > - return perf_env__get_node_aggr_by_cpu(perf_env__get_cpu(data, map, idx), data); > -} > - > static int perf_env__build_socket_map(struct perf_env *env, struct perf_cpu_map *cpus, > struct cpu_aggr_map **sockp) > { > - return cpu_map__build_map(cpus, sockp, perf_env__get_socket, env); > + return cpu_map__build_map(cpus, sockp, perf_env__get_socket_aggr_by_cpu, env); > } > > static int perf_env__build_die_map(struct perf_env *env, struct perf_cpu_map *cpus, > struct cpu_aggr_map **diep) > { > - return cpu_map__build_map(cpus, diep, perf_env__get_die, env); > + return cpu_map__build_map(cpus, diep, perf_env__get_die_aggr_by_cpu, env); > } > > static int perf_env__build_core_map(struct perf_env *env, struct perf_cpu_map *cpus, > struct cpu_aggr_map **corep) > { > - return cpu_map__build_map(cpus, corep, perf_env__get_core, env); > + return cpu_map__build_map(cpus, corep, perf_env__get_core_aggr_by_cpu, env); > } > > static int perf_env__build_node_map(struct perf_env *env, struct perf_cpu_map *cpus, > struct cpu_aggr_map **nodep) > { > - return cpu_map__build_map(cpus, nodep, perf_env__get_node, env); > + return cpu_map__build_map(cpus, nodep, perf_env__get_node_aggr_by_cpu, env); > } > > static struct aggr_cpu_id perf_stat__get_socket_file(struct perf_stat_config *config __maybe_unused, > diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c > index 49fba2c53822..feaf34b25efc 100644 > --- a/tools/perf/util/cpumap.c > +++ b/tools/perf/util/cpumap.c > @@ -163,7 +163,7 @@ static int cmp_aggr_cpu_id(const void *a_pointer, const void *b_pointer) > } > > int cpu_map__build_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **res, > - struct aggr_cpu_id (*f)(struct perf_cpu_map *map, int cpu, void *data), > + struct aggr_cpu_id (*f)(int cpu, void *data), > void *data) > { > int nr = cpus->nr; > @@ -178,7 +178,7 @@ int cpu_map__build_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **res, > c->nr = 0; > > for (cpu = 0; cpu < nr; cpu++) { > - s1 = f(cpus, cpu, data); > + s1 = f(cpu, data); > for (s2 = 0; s2 < c->nr; s2++) { > if (cpu_map__compare_aggr_cpu_id(s1, c->map[s2])) > break; > @@ -290,22 +290,22 @@ struct aggr_cpu_id cpu_map__get_node(struct perf_cpu_map *map, int idx, void *da > > int cpu_map__build_socket_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **sockp) > { > - return cpu_map__build_map(cpus, sockp, cpu_map__get_socket, NULL); > + return cpu_map__build_map(cpus, sockp, cpu_map__get_socket_aggr_by_cpu, NULL); > } > > int cpu_map__build_die_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **diep) > { > - return cpu_map__build_map(cpus, diep, cpu_map__get_die, NULL); > + return cpu_map__build_map(cpus, diep, cpu_map__get_die_aggr_by_cpu, NULL); > } > > int cpu_map__build_core_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **corep) > { > - return cpu_map__build_map(cpus, corep, cpu_map__get_core, NULL); > + return cpu_map__build_map(cpus, corep, cpu_map__get_core_aggr_by_cpu, NULL); > } > > int cpu_map__build_node_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **numap) > { > - return cpu_map__build_map(cpus, numap, cpu_map__get_node, NULL); > + return cpu_map__build_map(cpus, numap, cpu_map__get_node_aggr_by_cpu, NULL); > } > > /* setup simple routines to easily access node numbers given a cpu number */ > diff --git a/tools/perf/util/cpumap.h b/tools/perf/util/cpumap.h > index c62d67704425..9648816c4255 100644 > --- a/tools/perf/util/cpumap.h > +++ b/tools/perf/util/cpumap.h > @@ -63,7 +63,7 @@ int cpu__max_present_cpu(void); > int cpu__get_node(int cpu); > > int cpu_map__build_map(struct perf_cpu_map *cpus, struct cpu_aggr_map **res, > - struct aggr_cpu_id (*f)(struct perf_cpu_map *map, int cpu, void *data), > + struct aggr_cpu_id (*f)(int cpu, void *data), > void *data); > > int cpu_map__cpu(struct perf_cpu_map *cpus, int idx); > -- > 2.34.1.448.ga2b2bfdf31-goog -- - Arnaldo 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 F35B5C433F5 for ; Mon, 10 Jan 2022 20:48:19 +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=+X3af6Y7COpy2VwNY0FqQH+S4LYDfjC+PQ1g7yVaBho=; b=zVB+Re8qI0JP7u RnUk4dp0Wzl2XX/4s/ZlBvIxQBMXecIP7CSXbujQXvowN5s+KWDlvh1TaWBfO+f616qbdxy2st8jJ lIdU8g01Upnw9o0uJw7F6CaxQU9CEa/kDVJzRI7lzBEHhq2/FK0cOMEESjVgNNzj/zDq6F5ThlAvz rxxWyipyUqgnVouwVy62K5Epq6ZO96PXpZ4NcV7SLilxAkSqYaORDeiiIcTAtLpcnNRnWUlHp0F1w P06VN1tUhnQqIHmNydC/lv04QTW88QIvrnR64AWwUUBkQYNNi/ccYN73r7dLgBgOqohP7NSSg7IA4 CXeDFeJX5jYLdtFJRdGw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n71ZD-00DHYD-RW; Mon, 10 Jan 2022 20:47:00 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n71ZA-00DHXe-E1 for linux-arm-kernel@bombadil.infradead.org; Mon, 10 Jan 2022 20:46:56 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Transfer-Encoding: Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=cAyMRDjkSPvI5mmxGVrUYT6lIWPB64uGOupKmvGrD9M=; b=KFKwo+kxcTfqU3etRq4e1vgJ77 Zr+Pgo3SfCiqoOmTL31/s0DsewVcoloEtuy0ueJxhTkjW35H4+1llvFmBRIBsRooc3yCldbMJlJuA uiU0URabISBMIfgLQ5MO6VUTbRo6rSKhNPijsCJsVUa6QY18w8RLoWHknsNblIUS+naowJzh0QpjT 37et6jCE4/wXUrJCDkCMqtPUtLSHrkGEvkF+r+XQ4x/w0q+iuAn6zy9FElMm5NCEttHZO51qn/smB MzrTkrRpDm8LexwrrJ94NZTnETil21AeIefXkfgHQbkGP4KosExyH3OdeMWX14ctyzFfLOF5/4l1+ 2+nysTeQ==; Received: from [179.97.37.151] (helo=quaco.ghostprotocols.net) by casper.infradead.org with esmtpsa (Exim 4.94.2 #2 (Red Hat Linux)) id 1n71Z8-002i9r-9y; Mon, 10 Jan 2022 20:46:55 +0000 Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id 2742D40714; Mon, 10 Jan 2022 17:46:52 -0300 (-03) Date: Mon, 10 Jan 2022 17:46:52 -0300 From: Arnaldo Carvalho de Melo To: Ian Rogers Cc: Andi Kleen , Jiri Olsa , Namhyung Kim , John Garry , Kajol Jain , "Paul A . Clarke" , Riccardo Mancini , Kan Liang , Peter Zijlstra , Ingo Molnar , Mark Rutland , Alexander Shishkin , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Vineet Singh , James Clark , Mathieu Poirier , Suzuki K Poulose , Mike Leach , Leo Yan , coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, zhengjun.xing@intel.com, eranian@google.com Subject: Re: [PATCH v3 06/48] perf cpumap: Switch cpu_map__build_map to cpu function Message-ID: References: <20211230072030.302559-1-irogers@google.com> <20211230072030.302559-8-irogers@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20211230072030.302559-8-irogers@google.com> X-Url: http://acmel.wordpress.com 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 RW0gV2VkLCBEZWMgMjksIDIwMjEgYXQgMTE6MTk6NDhQTSAtMDgwMCwgSWFuIFJvZ2VycyBlc2Ny ZXZldToKPiBBdm9pZCBlcnJvciBwcm9uZSBjcHVfbWFwICsgaWR4IHZhcmlhbnQuIFJlbW92ZSBu b3cgdW51c2VkIGZ1bmN0aW9ucy4KCkF0IHRoaXMgcG9pbnQgd2UgbmVlZCB0byByZW1vdmUgdGhl IG5vdyB1bnVzZWQgcGVyZl9lbnZfX2dldF9jcHUoKSwgYW5kCnRoZW4gZGVhbCB3aXRoIHRoZSBm YWxsb3V0IGluIHRoZSBmb2xsb3dpbmcgcGF0Y2hlcyB0aGF0IG5lZWRsZXNzbHkKbW9kaWZ5IHRo aXMgdW51c2VkIGZ1bmN0aW9uLgoKRG9pbmcgdGhhdCBub3cuCgotIEFybmFsZG8KCuKsolthY21l QHRvb2xib3ggcGVyZl0kIGdpdCBkaWZmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4t c3RhdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwppbmRleCA2Yjk4NWFiYWEyZDIyYzU4 Li40MGNiMzUxOGYyN2UyMzA5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5j CisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKQEAgLTE0NzcsMjIgKzE0NzcsNiBAQCBz dGF0aWMgdm9pZCBwZXJmX3N0YXRfX2V4aXRfYWdncl9tb2RlKHZvaWQpCiAgICAgICAgc3RhdF9j b25maWcuY3B1c19hZ2dyX21hcCA9IE5VTEw7CiB9Cgotc3RhdGljIGlubGluZSBpbnQgcGVyZl9l bnZfX2dldF9jcHUodm9pZCAqZGF0YSwgc3RydWN0IHBlcmZfY3B1X21hcCAqbWFwLCBpbnQgaWR4 KQotewotICAgICAgIHN0cnVjdCBwZXJmX2VudiAqZW52ID0gZGF0YTsKLSAgICAgICBpbnQgY3B1 OwotCi0gICAgICAgaWYgKGlkeCA+IG1hcC0+bnIpCi0gICAgICAgICAgICAgICByZXR1cm4gLTE7 Ci0KLSAgICAgICBjcHUgPSBtYXAtPm1hcFtpZHhdOwotCi0gICAgICAgaWYgKGNwdSA+PSBlbnYt Pm5yX2NwdXNfYXZhaWwpCi0gICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICByZXR1 cm4gY3B1OwotfQotCiBzdGF0aWMgc3RydWN0IGFnZ3JfY3B1X2lkIHBlcmZfZW52X19nZXRfc29j a2V0X2FnZ3JfYnlfY3B1KGludCBjcHUsIHZvaWQgKmRhdGEpCiB7CiAgICAgICAgc3RydWN0IHBl cmZfZW52ICplbnYgPSBkYXRhOwogCj4gUmV2aWV3ZWQtYnk6IEphbWVzIENsYXJrIDxqYW1lcy5j bGFya0Bhcm0uY29tPgo+IFNpZ25lZC1vZmYtYnk6IElhbiBSb2dlcnMgPGlyb2dlcnNAZ29vZ2xl LmNvbT4KPiAtLS0KPiAgdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyB8IDI4ICsrKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KPiAgdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5jICB8IDEyICsrKysr Ky0tLS0tLQo+ICB0b29scy9wZXJmL3V0aWwvY3B1bWFwLmggIHwgIDIgKy0KPiAgMyBmaWxlcyBj aGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMK PiBpbmRleCA5NzkxYWU5YjFhNTMuLjZiOTg1YWJhYTJkMiAxMDA2NDQKPiAtLS0gYS90b29scy9w ZXJmL2J1aWx0aW4tc3RhdC5jCj4gKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwo+IEBA IC0xNTA0LDExICsxNTA0LDYgQEAgc3RhdGljIHN0cnVjdCBhZ2dyX2NwdV9pZCBwZXJmX2Vudl9f Z2V0X3NvY2tldF9hZ2dyX2J5X2NwdShpbnQgY3B1LCB2b2lkICpkYXRhKQo+ICAJcmV0dXJuIGlk Owo+ICB9Cj4gIAo+IC1zdGF0aWMgc3RydWN0IGFnZ3JfY3B1X2lkIHBlcmZfZW52X19nZXRfc29j a2V0KHN0cnVjdCBwZXJmX2NwdV9tYXAgKm1hcCwgaW50IGlkeCwgdm9pZCAqZGF0YSkKPiAtewo+ IC0JcmV0dXJuIHBlcmZfZW52X19nZXRfc29ja2V0X2FnZ3JfYnlfY3B1KHBlcmZfZW52X19nZXRf Y3B1KGRhdGEsIG1hcCwgaWR4KSwgZGF0YSk7Cj4gLX0KPiAtCj4gIHN0YXRpYyBzdHJ1Y3QgYWdn cl9jcHVfaWQgcGVyZl9lbnZfX2dldF9kaWVfYWdncl9ieV9jcHUoaW50IGNwdSwgdm9pZCAqZGF0 YSkKPiAgewo+ICAJc3RydWN0IHBlcmZfZW52ICplbnYgPSBkYXRhOwo+IEBAIC0xNTI3LDExICsx NTIyLDYgQEAgc3RhdGljIHN0cnVjdCBhZ2dyX2NwdV9pZCBwZXJmX2Vudl9fZ2V0X2RpZV9hZ2dy X2J5X2NwdShpbnQgY3B1LCB2b2lkICpkYXRhKQo+ICAJcmV0dXJuIGlkOwo+ICB9Cj4gIAo+IC1z dGF0aWMgc3RydWN0IGFnZ3JfY3B1X2lkIHBlcmZfZW52X19nZXRfZGllKHN0cnVjdCBwZXJmX2Nw dV9tYXAgKm1hcCwgaW50IGlkeCwgdm9pZCAqZGF0YSkKPiAtewo+IC0JcmV0dXJuIHBlcmZfZW52 X19nZXRfZGllX2FnZ3JfYnlfY3B1KHBlcmZfZW52X19nZXRfY3B1KGRhdGEsIG1hcCwgaWR4KSwg ZGF0YSk7Cj4gLX0KPiAtCj4gIHN0YXRpYyBzdHJ1Y3QgYWdncl9jcHVfaWQgcGVyZl9lbnZfX2dl dF9jb3JlX2FnZ3JfYnlfY3B1KGludCBjcHUsIHZvaWQgKmRhdGEpCj4gIHsKPiAgCXN0cnVjdCBw ZXJmX2VudiAqZW52ID0gZGF0YTsKPiBAQCAtMTU1MSwxMSArMTU0MSw2IEBAIHN0YXRpYyBzdHJ1 Y3QgYWdncl9jcHVfaWQgcGVyZl9lbnZfX2dldF9jb3JlX2FnZ3JfYnlfY3B1KGludCBjcHUsIHZv aWQgKmRhdGEpCj4gIAlyZXR1cm4gaWQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgYWdncl9j cHVfaWQgcGVyZl9lbnZfX2dldF9jb3JlKHN0cnVjdCBwZXJmX2NwdV9tYXAgKm1hcCwgaW50IGlk eCwgdm9pZCAqZGF0YSkKPiAtewo+IC0JcmV0dXJuIHBlcmZfZW52X19nZXRfY29yZV9hZ2dyX2J5 X2NwdShwZXJmX2Vudl9fZ2V0X2NwdShkYXRhLCBtYXAsIGlkeCksIGRhdGEpOwo+IC19Cj4gLQo+ ICBzdGF0aWMgc3RydWN0IGFnZ3JfY3B1X2lkIHBlcmZfZW52X19nZXRfbm9kZV9hZ2dyX2J5X2Nw dShpbnQgY3B1LCB2b2lkICpkYXRhKQo+ICB7Cj4gIAlzdHJ1Y3QgYWdncl9jcHVfaWQgaWQgPSBj cHVfbWFwX19lbXB0eV9hZ2dyX2NwdV9pZCgpOwo+IEBAIC0xNTY0LDMzICsxNTQ5LDI4IEBAIHN0 YXRpYyBzdHJ1Y3QgYWdncl9jcHVfaWQgcGVyZl9lbnZfX2dldF9ub2RlX2FnZ3JfYnlfY3B1KGlu dCBjcHUsIHZvaWQgKmRhdGEpCj4gIAlyZXR1cm4gaWQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBzdHJ1 Y3QgYWdncl9jcHVfaWQgcGVyZl9lbnZfX2dldF9ub2RlKHN0cnVjdCBwZXJmX2NwdV9tYXAgKm1h cCwgaW50IGlkeCwgdm9pZCAqZGF0YSkKPiAtewo+IC0JcmV0dXJuIHBlcmZfZW52X19nZXRfbm9k ZV9hZ2dyX2J5X2NwdShwZXJmX2Vudl9fZ2V0X2NwdShkYXRhLCBtYXAsIGlkeCksIGRhdGEpOwo+ IC19Cj4gLQo+ICBzdGF0aWMgaW50IHBlcmZfZW52X19idWlsZF9zb2NrZXRfbWFwKHN0cnVjdCBw ZXJmX2VudiAqZW52LCBzdHJ1Y3QgcGVyZl9jcHVfbWFwICpjcHVzLAo+ICAJCQkJICAgICAgc3Ry dWN0IGNwdV9hZ2dyX21hcCAqKnNvY2twKQo+ICB7Cj4gLQlyZXR1cm4gY3B1X21hcF9fYnVpbGRf bWFwKGNwdXMsIHNvY2twLCBwZXJmX2Vudl9fZ2V0X3NvY2tldCwgZW52KTsKPiArCXJldHVybiBj cHVfbWFwX19idWlsZF9tYXAoY3B1cywgc29ja3AsIHBlcmZfZW52X19nZXRfc29ja2V0X2FnZ3Jf YnlfY3B1LCBlbnYpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IHBlcmZfZW52X19idWlsZF9kaWVf bWFwKHN0cnVjdCBwZXJmX2VudiAqZW52LCBzdHJ1Y3QgcGVyZl9jcHVfbWFwICpjcHVzLAo+ICAJ CQkJICAgc3RydWN0IGNwdV9hZ2dyX21hcCAqKmRpZXApCj4gIHsKPiAtCXJldHVybiBjcHVfbWFw X19idWlsZF9tYXAoY3B1cywgZGllcCwgcGVyZl9lbnZfX2dldF9kaWUsIGVudik7Cj4gKwlyZXR1 cm4gY3B1X21hcF9fYnVpbGRfbWFwKGNwdXMsIGRpZXAsIHBlcmZfZW52X19nZXRfZGllX2FnZ3Jf YnlfY3B1LCBlbnYpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IHBlcmZfZW52X19idWlsZF9jb3Jl X21hcChzdHJ1Y3QgcGVyZl9lbnYgKmVudiwgc3RydWN0IHBlcmZfY3B1X21hcCAqY3B1cywKPiAg CQkJCSAgICBzdHJ1Y3QgY3B1X2FnZ3JfbWFwICoqY29yZXApCj4gIHsKPiAtCXJldHVybiBjcHVf bWFwX19idWlsZF9tYXAoY3B1cywgY29yZXAsIHBlcmZfZW52X19nZXRfY29yZSwgZW52KTsKPiAr CXJldHVybiBjcHVfbWFwX19idWlsZF9tYXAoY3B1cywgY29yZXAsIHBlcmZfZW52X19nZXRfY29y ZV9hZ2dyX2J5X2NwdSwgZW52KTsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBwZXJmX2Vudl9fYnVp bGRfbm9kZV9tYXAoc3RydWN0IHBlcmZfZW52ICplbnYsIHN0cnVjdCBwZXJmX2NwdV9tYXAgKmNw dXMsCj4gIAkJCQkgICAgc3RydWN0IGNwdV9hZ2dyX21hcCAqKm5vZGVwKQo+ICB7Cj4gLQlyZXR1 cm4gY3B1X21hcF9fYnVpbGRfbWFwKGNwdXMsIG5vZGVwLCBwZXJmX2Vudl9fZ2V0X25vZGUsIGVu dik7Cj4gKwlyZXR1cm4gY3B1X21hcF9fYnVpbGRfbWFwKGNwdXMsIG5vZGVwLCBwZXJmX2Vudl9f Z2V0X25vZGVfYWdncl9ieV9jcHUsIGVudik7Cj4gIH0KPiAgCj4gIHN0YXRpYyBzdHJ1Y3QgYWdn cl9jcHVfaWQgcGVyZl9zdGF0X19nZXRfc29ja2V0X2ZpbGUoc3RydWN0IHBlcmZfc3RhdF9jb25m aWcgKmNvbmZpZyBfX21heWJlX3VudXNlZCwKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGls L2NwdW1hcC5jIGIvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5jCj4gaW5kZXggNDlmYmEyYzUzODIy Li5mZWFmMzRiMjVlZmMgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5jCj4g KysrIGIvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5jCj4gQEAgLTE2Myw3ICsxNjMsNyBAQCBzdGF0 aWMgaW50IGNtcF9hZ2dyX2NwdV9pZChjb25zdCB2b2lkICphX3BvaW50ZXIsIGNvbnN0IHZvaWQg KmJfcG9pbnRlcikKPiAgfQo+ICAKPiAgaW50IGNwdV9tYXBfX2J1aWxkX21hcChzdHJ1Y3QgcGVy Zl9jcHVfbWFwICpjcHVzLCBzdHJ1Y3QgY3B1X2FnZ3JfbWFwICoqcmVzLAo+IC0JCSAgICAgICBz dHJ1Y3QgYWdncl9jcHVfaWQgKCpmKShzdHJ1Y3QgcGVyZl9jcHVfbWFwICptYXAsIGludCBjcHUs IHZvaWQgKmRhdGEpLAo+ICsJCSAgICAgICBzdHJ1Y3QgYWdncl9jcHVfaWQgKCpmKShpbnQgY3B1 LCB2b2lkICpkYXRhKSwKPiAgCQkgICAgICAgdm9pZCAqZGF0YSkKPiAgewo+ICAJaW50IG5yID0g Y3B1cy0+bnI7Cj4gQEAgLTE3OCw3ICsxNzgsNyBAQCBpbnQgY3B1X21hcF9fYnVpbGRfbWFwKHN0 cnVjdCBwZXJmX2NwdV9tYXAgKmNwdXMsIHN0cnVjdCBjcHVfYWdncl9tYXAgKipyZXMsCj4gIAlj LT5uciA9IDA7Cj4gIAo+ICAJZm9yIChjcHUgPSAwOyBjcHUgPCBucjsgY3B1KyspIHsKPiAtCQlz MSA9IGYoY3B1cywgY3B1LCBkYXRhKTsKPiArCQlzMSA9IGYoY3B1LCBkYXRhKTsKPiAgCQlmb3Ig KHMyID0gMDsgczIgPCBjLT5ucjsgczIrKykgewo+ICAJCQlpZiAoY3B1X21hcF9fY29tcGFyZV9h Z2dyX2NwdV9pZChzMSwgYy0+bWFwW3MyXSkpCj4gIAkJCQlicmVhazsKPiBAQCAtMjkwLDIyICsy OTAsMjIgQEAgc3RydWN0IGFnZ3JfY3B1X2lkIGNwdV9tYXBfX2dldF9ub2RlKHN0cnVjdCBwZXJm X2NwdV9tYXAgKm1hcCwgaW50IGlkeCwgdm9pZCAqZGEKPiAgCj4gIGludCBjcHVfbWFwX19idWls ZF9zb2NrZXRfbWFwKHN0cnVjdCBwZXJmX2NwdV9tYXAgKmNwdXMsIHN0cnVjdCBjcHVfYWdncl9t YXAgKipzb2NrcCkKPiAgewo+IC0JcmV0dXJuIGNwdV9tYXBfX2J1aWxkX21hcChjcHVzLCBzb2Nr cCwgY3B1X21hcF9fZ2V0X3NvY2tldCwgTlVMTCk7Cj4gKwlyZXR1cm4gY3B1X21hcF9fYnVpbGRf bWFwKGNwdXMsIHNvY2twLCBjcHVfbWFwX19nZXRfc29ja2V0X2FnZ3JfYnlfY3B1LCBOVUxMKTsK PiAgfQo+ICAKPiAgaW50IGNwdV9tYXBfX2J1aWxkX2RpZV9tYXAoc3RydWN0IHBlcmZfY3B1X21h cCAqY3B1cywgc3RydWN0IGNwdV9hZ2dyX21hcCAqKmRpZXApCj4gIHsKPiAtCXJldHVybiBjcHVf bWFwX19idWlsZF9tYXAoY3B1cywgZGllcCwgY3B1X21hcF9fZ2V0X2RpZSwgTlVMTCk7Cj4gKwly ZXR1cm4gY3B1X21hcF9fYnVpbGRfbWFwKGNwdXMsIGRpZXAsIGNwdV9tYXBfX2dldF9kaWVfYWdn cl9ieV9jcHUsIE5VTEwpOwo+ICB9Cj4gIAo+ICBpbnQgY3B1X21hcF9fYnVpbGRfY29yZV9tYXAo c3RydWN0IHBlcmZfY3B1X21hcCAqY3B1cywgc3RydWN0IGNwdV9hZ2dyX21hcCAqKmNvcmVwKQo+ ICB7Cj4gLQlyZXR1cm4gY3B1X21hcF9fYnVpbGRfbWFwKGNwdXMsIGNvcmVwLCBjcHVfbWFwX19n ZXRfY29yZSwgTlVMTCk7Cj4gKwlyZXR1cm4gY3B1X21hcF9fYnVpbGRfbWFwKGNwdXMsIGNvcmVw LCBjcHVfbWFwX19nZXRfY29yZV9hZ2dyX2J5X2NwdSwgTlVMTCk7Cj4gIH0KPiAgCj4gIGludCBj cHVfbWFwX19idWlsZF9ub2RlX21hcChzdHJ1Y3QgcGVyZl9jcHVfbWFwICpjcHVzLCBzdHJ1Y3Qg Y3B1X2FnZ3JfbWFwICoqbnVtYXApCj4gIHsKPiAtCXJldHVybiBjcHVfbWFwX19idWlsZF9tYXAo Y3B1cywgbnVtYXAsIGNwdV9tYXBfX2dldF9ub2RlLCBOVUxMKTsKPiArCXJldHVybiBjcHVfbWFw X19idWlsZF9tYXAoY3B1cywgbnVtYXAsIGNwdV9tYXBfX2dldF9ub2RlX2FnZ3JfYnlfY3B1LCBO VUxMKTsKPiAgfQo+ICAKPiAgLyogc2V0dXAgc2ltcGxlIHJvdXRpbmVzIHRvIGVhc2lseSBhY2Nl c3Mgbm9kZSBudW1iZXJzIGdpdmVuIGEgY3B1IG51bWJlciAqLwo+IGRpZmYgLS1naXQgYS90b29s cy9wZXJmL3V0aWwvY3B1bWFwLmggYi90b29scy9wZXJmL3V0aWwvY3B1bWFwLmgKPiBpbmRleCBj NjJkNjc3MDQ0MjUuLjk2NDg4MTZjNDI1NSAxMDA2NDQKPiAtLS0gYS90b29scy9wZXJmL3V0aWwv Y3B1bWFwLmgKPiArKysgYi90b29scy9wZXJmL3V0aWwvY3B1bWFwLmgKPiBAQCAtNjMsNyArNjMs NyBAQCBpbnQgY3B1X19tYXhfcHJlc2VudF9jcHUodm9pZCk7Cj4gIGludCBjcHVfX2dldF9ub2Rl KGludCBjcHUpOwo+ICAKPiAgaW50IGNwdV9tYXBfX2J1aWxkX21hcChzdHJ1Y3QgcGVyZl9jcHVf bWFwICpjcHVzLCBzdHJ1Y3QgY3B1X2FnZ3JfbWFwICoqcmVzLAo+IC0JCSAgICAgICBzdHJ1Y3Qg YWdncl9jcHVfaWQgKCpmKShzdHJ1Y3QgcGVyZl9jcHVfbWFwICptYXAsIGludCBjcHUsIHZvaWQg KmRhdGEpLAo+ICsJCSAgICAgICBzdHJ1Y3QgYWdncl9jcHVfaWQgKCpmKShpbnQgY3B1LCB2b2lk ICpkYXRhKSwKPiAgCQkgICAgICAgdm9pZCAqZGF0YSk7Cj4gIAo+ICBpbnQgY3B1X21hcF9fY3B1 KHN0cnVjdCBwZXJmX2NwdV9tYXAgKmNwdXMsIGludCBpZHgpOwo+IC0tIAo+IDIuMzQuMS40NDgu Z2EyYjJiZmRmMzEtZ29vZwoKLS0gCgotIEFybmFsZG8KCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cmxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK