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 B736DC74A5B for ; Wed, 29 Mar 2023 12:41:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229631AbjC2MlQ (ORCPT ); Wed, 29 Mar 2023 08:41:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50712 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229518AbjC2MlP (ORCPT ); Wed, 29 Mar 2023 08:41:15 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 475A710FB; Wed, 29 Mar 2023 05:41:14 -0700 (PDT) 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 ams.source.kernel.org (Postfix) with ESMTPS id D60C0B822EF; Wed, 29 Mar 2023 12:41:12 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2228CC433D2; Wed, 29 Mar 2023 12:41:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1680093671; bh=AeXknwOHG8vGYt3L0NOe7Mxndq7qLckTYmJtgD8EfK4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=rBShWkndwhzQX3jWACy49eUWVXlJg4bSdiLjXqFIO3t4HKtbrdVFUNQ+GKBBJu3y1 8S2nPDgXokUBnvVgBltVormIDljL8n2vcTuHEXQZ4a3FJWTgkfSfFJ70eDn3CsRE4W uXX65GSVN97aEGgmVRSebh8GUdzxOdYVsHOY7NoOOiWDFkozd4+MlY8i287QKarP4F tXyR+CKLRzJRVSuW0+Gs9PlCxydLCvOr3b7DactR1ZC91cHAYmseruTq0hXpfFAs+M WpXbK9+AcpjwYvPq6NK2Jwgzoup2K7lRT5LFA3947x1Ldx8iUOX00AjzCf/tOWPhtp zEZAtrCG7CHJg== Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id B3D304052D; Wed, 29 Mar 2023 09:41:08 -0300 (-03) Date: Wed, 29 Mar 2023 09:41:08 -0300 From: Arnaldo Carvalho de Melo To: Mike Leach Cc: linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org, coresight@lists.linaro.org, linux-kernel@vger.kernel.org, suzuki.poulose@arm.com, leo.yan@linaro.org, peterz@infradead.org, mingo@redhat.com, will@kernel.org, john.garry@huawei.com, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@redhat.com, namhyung@kernel.org, gankulkarni@os.amperecomputing.com, darren@os.amperecomputing.com, James Clark Subject: Re: [PATCH v8 1/3] perf: cs-etm: Move mapping of Trace ID and cpu into helper function Message-ID: References: <20230329111422.3693-1-mike.leach@linaro.org> <20230329111422.3693-2-mike.leach@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230329111422.3693-2-mike.leach@linaro.org> X-Url: http://acmel.wordpress.com Precedence: bulk List-ID: X-Mailing-List: linux-perf-users@vger.kernel.org Em Wed, Mar 29, 2023 at 12:14:20PM +0100, Mike Leach escreveu: > The information to associate Trace ID and CPU will be changing. > > Drivers will start outputting this as a hardware ID packet in the data > file which if present will be used in preference to the AUXINFO values. CC /tmp/build/perf-tools-next/util/symbol-elf.o LD /tmp/build/perf-tools-next/util/cs-etm-decoder/perf-in.o util/cs-etm.c: In function ‘cs_etm__process_auxtrace_info_full’: util/cs-etm.c:2866:26: error: unused variable ‘inode’ [-Werror=unused-variable] 2866 | struct int_node *inode; | ^~~~~ cc1: all warnings being treated as errors make[4]: *** [/var/home/acme/git/perf-tools-next/tools/build/Makefile.build:97: /tmp/build/perf-tools-next/util/cs-etm.o] Error 1 make[4]: *** Waiting for unfinished jobs.... gmake[3]: *** [/var/home/acme/git/perf-tools-next/tools/build/Makefile.build:140: util] Err Trying to fix... > To prepare for this we provide a helper functions to do the individual ID > mapping, and one to extract the IDs from the completed metadata blocks. > > Signed-off-by: Mike Leach > Reviewed-by: James Clark > Acked-by: Suzuki K Poulose > --- > tools/include/linux/coresight-pmu.h | 5 ++ > tools/perf/util/cs-etm.c | 91 +++++++++++++++++++---------- > tools/perf/util/cs-etm.h | 14 ++++- > 3 files changed, 77 insertions(+), 33 deletions(-) > > diff --git a/tools/include/linux/coresight-pmu.h b/tools/include/linux/coresight-pmu.h > index 6c2fd6cc5a98..db9c7c0abb6a 100644 > --- a/tools/include/linux/coresight-pmu.h > +++ b/tools/include/linux/coresight-pmu.h > @@ -7,9 +7,14 @@ > #ifndef _LINUX_CORESIGHT_PMU_H > #define _LINUX_CORESIGHT_PMU_H > > +#include > + > #define CORESIGHT_ETM_PMU_NAME "cs_etm" > #define CORESIGHT_ETM_PMU_SEED 0x10 > > +/* CoreSight trace ID is currently the bottom 7 bits of the value */ > +#define CORESIGHT_TRACE_ID_VAL_MASK GENMASK(6, 0) > + > /* > * Below are the definition of bit offsets for perf option, and works as > * arbitrary values for all ETM versions. > diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c > index f65bac5ddbdb..f6ca07f68b25 100644 > --- a/tools/perf/util/cs-etm.c > +++ b/tools/perf/util/cs-etm.c > @@ -196,6 +196,30 @@ int cs_etm__get_pid_fmt(u8 trace_chan_id, u64 *pid_fmt) > return 0; > } > > +static int cs_etm__map_trace_id(u8 trace_chan_id, u64 *cpu_metadata) > +{ > + struct int_node *inode; > + > + /* Get an RB node for this CPU */ > + inode = intlist__findnew(traceid_list, trace_chan_id); > + > + /* Something went wrong, no need to continue */ > + if (!inode) > + return -ENOMEM; > + > + /* > + * The node for that CPU should not be taken. > + * Back out if that's the case. > + */ > + if (inode->priv) > + return -EINVAL; > + > + /* All good, associate the traceID with the metadata pointer */ > + inode->priv = cpu_metadata; > + > + return 0; > +} > + > void cs_etm__etmq_set_traceid_queue_timestamp(struct cs_etm_queue *etmq, > u8 trace_chan_id) > { > @@ -2804,6 +2828,36 @@ static bool cs_etm__has_virtual_ts(u64 **metadata, int num_cpu) > return true; > } > > +/* map trace ids to correct metadata block, from information in metadata */ > +static int cs_etm__map_trace_ids_metadata(int num_cpu, u64 **metadata) > +{ > + u64 cs_etm_magic; > + u8 trace_chan_id; > + int i, err; > + > + for (i = 0; i < num_cpu; i++) { > + cs_etm_magic = metadata[i][CS_ETM_MAGIC]; > + switch (cs_etm_magic) { > + case __perf_cs_etmv3_magic: > + trace_chan_id = (u8)((metadata[i][CS_ETM_ETMTRACEIDR]) & > + CORESIGHT_TRACE_ID_VAL_MASK); > + break; > + case __perf_cs_etmv4_magic: > + case __perf_cs_ete_magic: > + trace_chan_id = (u8)((metadata[i][CS_ETMV4_TRCTRACEIDR]) & > + CORESIGHT_TRACE_ID_VAL_MASK); > + break; > + default: > + /* unknown magic number */ > + return -EINVAL; > + } > + err = cs_etm__map_trace_id(trace_chan_id, metadata[i]); > + if (err) > + return err; > + } > + return 0; > +} > + > int cs_etm__process_auxtrace_info_full(union perf_event *event, > struct perf_session *session) > { > @@ -2814,7 +2868,7 @@ int cs_etm__process_auxtrace_info_full(union perf_event *event, > int event_header_size = sizeof(struct perf_event_header); > int total_size = auxtrace_info->header.size; > int priv_size = 0; > - int num_cpu, trcidr_idx; > + int num_cpu; > int err = 0; > int i, j; > u64 *ptr = NULL; > @@ -2853,23 +2907,13 @@ int cs_etm__process_auxtrace_info_full(union perf_event *event, > cs_etm__create_meta_blk(ptr, &i, > CS_ETM_PRIV_MAX, > CS_ETM_NR_TRC_PARAMS_V0); > - > - /* The traceID is our handle */ > - trcidr_idx = CS_ETM_ETMTRACEIDR; > - > } else if (ptr[i] == __perf_cs_etmv4_magic) { > metadata[j] = > cs_etm__create_meta_blk(ptr, &i, > CS_ETMV4_PRIV_MAX, > CS_ETMV4_NR_TRC_PARAMS_V0); > - > - /* The traceID is our handle */ > - trcidr_idx = CS_ETMV4_TRCTRACEIDR; > } else if (ptr[i] == __perf_cs_ete_magic) { > metadata[j] = cs_etm__create_meta_blk(ptr, &i, CS_ETE_PRIV_MAX, -1); > - > - /* ETE shares first part of metadata with ETMv4 */ > - trcidr_idx = CS_ETMV4_TRCTRACEIDR; > } else { > ui__error("CS ETM Trace: Unrecognised magic number %#"PRIx64". File could be from a newer version of perf.\n", > ptr[i]); > @@ -2881,26 +2925,6 @@ int cs_etm__process_auxtrace_info_full(union perf_event *event, > err = -ENOMEM; > goto err_free_metadata; > } > - > - /* Get an RB node for this CPU */ > - inode = intlist__findnew(traceid_list, metadata[j][trcidr_idx]); > - > - /* Something went wrong, no need to continue */ > - if (!inode) { > - err = -ENOMEM; > - goto err_free_metadata; > - } > - > - /* > - * The node for that CPU should not be taken. > - * Back out if that's the case. > - */ > - if (inode->priv) { > - err = -EINVAL; > - goto err_free_metadata; > - } > - /* All good, associate the traceID with the metadata pointer */ > - inode->priv = metadata[j]; > } > > /* > @@ -2994,6 +3018,11 @@ int cs_etm__process_auxtrace_info_full(union perf_event *event, > if (err) > goto err_delete_thread; > > + /* before aux records are queued, need to map metadata to trace IDs */ > + err = cs_etm__map_trace_ids_metadata(num_cpu, metadata); > + if (err) > + goto err_delete_thread; > + > err = cs_etm__queue_aux_records(session); > if (err) > goto err_delete_thread; > diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h > index 98a4f7113d2f..6d3078e042b4 100644 > --- a/tools/perf/util/cs-etm.h > +++ b/tools/perf/util/cs-etm.h > @@ -29,13 +29,17 @@ enum { > /* > * Update the version for new format. > * > - * New version 1 format adds a param count to the per cpu metadata. > + * Version 1: format adds a param count to the per cpu metadata. > * This allows easy adding of new metadata parameters. > * Requires that new params always added after current ones. > * Also allows client reader to handle file versions that are different by > * checking the number of params in the file vs the number expected. > + * > + * Version 2: Drivers will use PERF_RECORD_AUX_OUTPUT_HW_ID to output > + * CoreSight Trace ID. ...TRACEIDR metadata will be set to unused ID. > */ > -#define CS_HEADER_CURRENT_VERSION 1 > +#define CS_HEADER_CURRENT_VERSION 2 > +#define CS_AUX_HW_ID_VERSION_MIN 2 > > /* Beginning of header common to both ETMv3 and V4 */ > enum { > @@ -97,6 +101,12 @@ enum { > CS_ETE_PRIV_MAX > }; > > +/* > + * Check for valid CoreSight trace ID. If an invalid value is present in the metadata, > + * then IDs are present in the hardware ID packet in the data file. > + */ > +#define CS_IS_VALID_TRACE_ID(id) ((id > 0) && (id < 0x70)) > + > /* > * ETMv3 exception encoding number: > * See Embedded Trace Macrocell specification (ARM IHI 0014Q) > -- > 2.32.0 > -- - 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 819E0C74A5B for ; Wed, 29 Mar 2023 12:42:11 +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=oB6MXnO1i+aEcJ+SmpK30S6g4MnsUtvwbJB1kJInC0A=; b=l9tjIQtio7RqyZ fgaNQO5cA0ov0AdZW9jWBAQLe/frl0RktOK4DrZF9yNe/Dlaszm00SCxG55a8ccBNijs4YSKaP0A9 hC3yj1k0OepRJDF3Icc5WFBE8ldoYPQbwXImOw9C+5+qXHN0VwwzZBUCp1E5zzylimuiB3ZaEImtU GyYYW0GG7wSUw6Y4HQb6XwDubeiSa5xDqjq+nbGhDG0qwxXIK5bU0dbr73LfSlN5Y0woGUp7IFHb5 doX/hTZeXhsGdaGYKuLc+xcer5eU9yLfsP0uAxpXQPsWBAuU60Y+0BK4UFZdhRy1OUXkMRnf/fXFk c6bdpuZHhQT2Bx3PZpig==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1phV77-000DTe-0n; Wed, 29 Mar 2023 12:41:17 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1phV76-000DT8-02 for linux-arm-kernel@bombadil.infradead.org; Wed, 29 Mar 2023 12:41:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; 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=LA5hL94sdSAXcmgLU/dwaB0Vckfvbat3lwJYrj31c/E=; b=d8ABe/EVRNWa/6HGnRtmWi+bWo UAq6QE56rwAlFIWOwkTa97dX+h4G2t3iV4O5AzhLquarkTrWoJYY6Z4X9cvxtu6XactCmrqaksHO5 yjtrPkrKTBx0goN7hGba5FUfFFu1CEOaE6K83YA/6cJYkUPeN5TS8E7gYK7JyvC4QG4A3tMLt9is0 QKv3GRkrl5n3dqo4KjAy485bLk6a3zHqj7cDf0rCq8VHzYLZc20R6YzKcVm6gYu34b8V+DL6iAm6d ayl9bjzY/hZaJIH0dzkRrqblD78T714FXu6nyKT3EXNq7/c1fToyydfPD26pwQk7p6Xe7LOkNSYrw nYSvjRRw==; Received: from [187.19.239.165] (helo=quaco.ghostprotocols.net) by desiato.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1phV72-006qZu-2k; Wed, 29 Mar 2023 12:41:13 +0000 Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id B3D304052D; Wed, 29 Mar 2023 09:41:08 -0300 (-03) Date: Wed, 29 Mar 2023 09:41:08 -0300 From: Arnaldo Carvalho de Melo To: Mike Leach Cc: linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org, coresight@lists.linaro.org, linux-kernel@vger.kernel.org, suzuki.poulose@arm.com, leo.yan@linaro.org, peterz@infradead.org, mingo@redhat.com, will@kernel.org, john.garry@huawei.com, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@redhat.com, namhyung@kernel.org, gankulkarni@os.amperecomputing.com, darren@os.amperecomputing.com, James Clark Subject: Re: [PATCH v8 1/3] perf: cs-etm: Move mapping of Trace ID and cpu into helper function Message-ID: References: <20230329111422.3693-1-mike.leach@linaro.org> <20230329111422.3693-2-mike.leach@linaro.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20230329111422.3693-2-mike.leach@linaro.org> 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 RW0gV2VkLCBNYXIgMjksIDIwMjMgYXQgMTI6MTQ6MjBQTSArMDEwMCwgTWlrZSBMZWFjaCBlc2Ny ZXZldToKPiBUaGUgaW5mb3JtYXRpb24gdG8gYXNzb2NpYXRlIFRyYWNlIElEIGFuZCBDUFUgd2ls bCBiZSBjaGFuZ2luZy4KPiAKPiBEcml2ZXJzIHdpbGwgc3RhcnQgb3V0cHV0dGluZyB0aGlzIGFz IGEgaGFyZHdhcmUgSUQgcGFja2V0IGluIHRoZSBkYXRhCj4gZmlsZSB3aGljaCBpZiBwcmVzZW50 IHdpbGwgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRoZSBBVVhJTkZPIHZhbHVlcy4KCiAgQ0Mg ICAgICAvdG1wL2J1aWxkL3BlcmYtdG9vbHMtbmV4dC91dGlsL3N5bWJvbC1lbGYubwogIExEICAg ICAgL3RtcC9idWlsZC9wZXJmLXRvb2xzLW5leHQvdXRpbC9jcy1ldG0tZGVjb2Rlci9wZXJmLWlu Lm8KdXRpbC9jcy1ldG0uYzogSW4gZnVuY3Rpb24g4oCYY3NfZXRtX19wcm9jZXNzX2F1eHRyYWNl X2luZm9fZnVsbOKAmToKdXRpbC9jcy1ldG0uYzoyODY2OjI2OiBlcnJvcjogdW51c2VkIHZhcmlh YmxlIOKAmGlub2Rl4oCZIFstV2Vycm9yPXVudXNlZC12YXJpYWJsZV0KIDI4NjYgfCAgICAgICAg IHN0cnVjdCBpbnRfbm9kZSAqaW5vZGU7CiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg IF5+fn5+CmNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCm1ha2VbNF06 ICoqKiBbL3Zhci9ob21lL2FjbWUvZ2l0L3BlcmYtdG9vbHMtbmV4dC90b29scy9idWlsZC9NYWtl ZmlsZS5idWlsZDo5NzogL3RtcC9idWlsZC9wZXJmLXRvb2xzLW5leHQvdXRpbC9jcy1ldG0ub10g RXJyb3IgMQptYWtlWzRdOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgpnbWFr ZVszXTogKioqIFsvdmFyL2hvbWUvYWNtZS9naXQvcGVyZi10b29scy1uZXh0L3Rvb2xzL2J1aWxk L01ha2VmaWxlLmJ1aWxkOjE0MDogdXRpbF0gRXJyCgpUcnlpbmcgdG8gZml4Li4uCiAKPiBUbyBw cmVwYXJlIGZvciB0aGlzIHdlIHByb3ZpZGUgYSBoZWxwZXIgZnVuY3Rpb25zIHRvIGRvIHRoZSBp bmRpdmlkdWFsIElECj4gbWFwcGluZywgYW5kIG9uZSB0byBleHRyYWN0IHRoZSBJRHMgZnJvbSB0 aGUgY29tcGxldGVkIG1ldGFkYXRhIGJsb2Nrcy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBNaWtlIExl YWNoIDxtaWtlLmxlYWNoQGxpbmFyby5vcmc+Cj4gUmV2aWV3ZWQtYnk6IEphbWVzIENsYXJrIDxq YW1lcy5jbGFya0Bhcm0uY29tPgo+IEFja2VkLWJ5OiBTdXp1a2kgSyBQb3Vsb3NlIDxzdXp1a2ku cG91bG9zZUBhcm0uY29tPgo+IC0tLQo+ICB0b29scy9pbmNsdWRlL2xpbnV4L2NvcmVzaWdodC1w bXUuaCB8ICA1ICsrCj4gIHRvb2xzL3BlcmYvdXRpbC9jcy1ldG0uYyAgICAgICAgICAgIHwgOTEg KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KPiAgdG9vbHMvcGVyZi91dGlsL2NzLWV0bS5o ICAgICAgICAgICAgfCAxNCArKysrLQo+ICAzIGZpbGVzIGNoYW5nZWQsIDc3IGluc2VydGlvbnMo KyksIDMzIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL2xpbnV4 L2NvcmVzaWdodC1wbXUuaCBiL3Rvb2xzL2luY2x1ZGUvbGludXgvY29yZXNpZ2h0LXBtdS5oCj4g aW5kZXggNmMyZmQ2Y2M1YTk4Li5kYjljN2MwYWJiNmEgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvaW5j bHVkZS9saW51eC9jb3Jlc2lnaHQtcG11LmgKPiArKysgYi90b29scy9pbmNsdWRlL2xpbnV4L2Nv cmVzaWdodC1wbXUuaAo+IEBAIC03LDkgKzcsMTQgQEAKPiAgI2lmbmRlZiBfTElOVVhfQ09SRVNJ R0hUX1BNVV9ICj4gICNkZWZpbmUgX0xJTlVYX0NPUkVTSUdIVF9QTVVfSAo+ICAKPiArI2luY2x1 ZGUgPGxpbnV4L2JpdHMuaD4KPiArCj4gICNkZWZpbmUgQ09SRVNJR0hUX0VUTV9QTVVfTkFNRSAi Y3NfZXRtIgo+ICAjZGVmaW5lIENPUkVTSUdIVF9FVE1fUE1VX1NFRUQgIDB4MTAKPiAgCj4gKy8q IENvcmVTaWdodCB0cmFjZSBJRCBpcyBjdXJyZW50bHkgdGhlIGJvdHRvbSA3IGJpdHMgb2YgdGhl IHZhbHVlICovCj4gKyNkZWZpbmUgQ09SRVNJR0hUX1RSQUNFX0lEX1ZBTF9NQVNLCUdFTk1BU0so NiwgMCkKPiArCj4gIC8qCj4gICAqIEJlbG93IGFyZSB0aGUgZGVmaW5pdGlvbiBvZiBiaXQgb2Zm c2V0cyBmb3IgcGVyZiBvcHRpb24sIGFuZCB3b3JrcyBhcwo+ICAgKiBhcmJpdHJhcnkgdmFsdWVz IGZvciBhbGwgRVRNIHZlcnNpb25zLgo+IGRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY3Mt ZXRtLmMgYi90b29scy9wZXJmL3V0aWwvY3MtZXRtLmMKPiBpbmRleCBmNjViYWM1ZGRiZGIuLmY2 Y2EwN2Y2OGIyNSAxMDA2NDQKPiAtLS0gYS90b29scy9wZXJmL3V0aWwvY3MtZXRtLmMKPiArKysg Yi90b29scy9wZXJmL3V0aWwvY3MtZXRtLmMKPiBAQCAtMTk2LDYgKzE5NiwzMCBAQCBpbnQgY3Nf ZXRtX19nZXRfcGlkX2ZtdCh1OCB0cmFjZV9jaGFuX2lkLCB1NjQgKnBpZF9mbXQpCj4gIAlyZXR1 cm4gMDsKPiAgfQo+ICAKPiArc3RhdGljIGludCBjc19ldG1fX21hcF90cmFjZV9pZCh1OCB0cmFj ZV9jaGFuX2lkLCB1NjQgKmNwdV9tZXRhZGF0YSkKPiArewo+ICsJc3RydWN0IGludF9ub2RlICpp bm9kZTsKPiArCj4gKwkvKiBHZXQgYW4gUkIgbm9kZSBmb3IgdGhpcyBDUFUgKi8KPiArCWlub2Rl ID0gaW50bGlzdF9fZmluZG5ldyh0cmFjZWlkX2xpc3QsIHRyYWNlX2NoYW5faWQpOwo+ICsKPiAr CS8qIFNvbWV0aGluZyB3ZW50IHdyb25nLCBubyBuZWVkIHRvIGNvbnRpbnVlICovCj4gKwlpZiAo IWlub2RlKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgbm9kZSBm b3IgdGhhdCBDUFUgc2hvdWxkIG5vdCBiZSB0YWtlbi4KPiArCSAqIEJhY2sgb3V0IGlmIHRoYXQn cyB0aGUgY2FzZS4KPiArCSAqLwo+ICsJaWYgKGlub2RlLT5wcml2KQo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsKPiArCS8qIEFsbCBnb29kLCBhc3NvY2lhdGUgdGhlIHRyYWNlSUQgd2l0aCB0aGUg bWV0YWRhdGEgcG9pbnRlciAqLwo+ICsJaW5vZGUtPnByaXYgPSBjcHVfbWV0YWRhdGE7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gIHZvaWQgY3NfZXRtX19ldG1xX3NldF90cmFjZWlkX3F1 ZXVlX3RpbWVzdGFtcChzdHJ1Y3QgY3NfZXRtX3F1ZXVlICpldG1xLAo+ICAJCQkJCSAgICAgIHU4 IHRyYWNlX2NoYW5faWQpCj4gIHsKPiBAQCAtMjgwNCw2ICsyODI4LDM2IEBAIHN0YXRpYyBib29s IGNzX2V0bV9faGFzX3ZpcnR1YWxfdHModTY0ICoqbWV0YWRhdGEsIGludCBudW1fY3B1KQo+ICAJ cmV0dXJuIHRydWU7Cj4gIH0KPiAgCj4gKy8qIG1hcCB0cmFjZSBpZHMgdG8gY29ycmVjdCBtZXRh ZGF0YSBibG9jaywgZnJvbSBpbmZvcm1hdGlvbiBpbiBtZXRhZGF0YSAqLwo+ICtzdGF0aWMgaW50 IGNzX2V0bV9fbWFwX3RyYWNlX2lkc19tZXRhZGF0YShpbnQgbnVtX2NwdSwgdTY0ICoqbWV0YWRh dGEpCj4gK3sKPiArCXU2NCBjc19ldG1fbWFnaWM7Cj4gKwl1OCB0cmFjZV9jaGFuX2lkOwo+ICsJ aW50IGksIGVycjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NwdTsgaSsrKSB7Cj4gKwkJ Y3NfZXRtX21hZ2ljID0gbWV0YWRhdGFbaV1bQ1NfRVRNX01BR0lDXTsKPiArCQlzd2l0Y2ggKGNz X2V0bV9tYWdpYykgewo+ICsJCWNhc2UgX19wZXJmX2NzX2V0bXYzX21hZ2ljOgo+ICsJCQl0cmFj ZV9jaGFuX2lkID0gKHU4KSgobWV0YWRhdGFbaV1bQ1NfRVRNX0VUTVRSQUNFSURSXSkgJgo+ICsJ CQkJCSAgICAgQ09SRVNJR0hUX1RSQUNFX0lEX1ZBTF9NQVNLKTsKPiArCQkJYnJlYWs7Cj4gKwkJ Y2FzZSBfX3BlcmZfY3NfZXRtdjRfbWFnaWM6Cj4gKwkJY2FzZSBfX3BlcmZfY3NfZXRlX21hZ2lj Ogo+ICsJCQl0cmFjZV9jaGFuX2lkID0gKHU4KSgobWV0YWRhdGFbaV1bQ1NfRVRNVjRfVFJDVFJB Q0VJRFJdKSAmCj4gKwkJCQkJICAgICAgQ09SRVNJR0hUX1RSQUNFX0lEX1ZBTF9NQVNLKTsKPiAr CQkJYnJlYWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJLyogdW5rbm93biBtYWdpYyBudW1iZXIgKi8K PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJCWVyciA9IGNzX2V0bV9fbWFwX3RyYWNl X2lkKHRyYWNlX2NoYW5faWQsIG1ldGFkYXRhW2ldKTsKPiArCQlpZiAoZXJyKQo+ICsJCQlyZXR1 cm4gZXJyOwo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gIGludCBjc19ldG1fX3Byb2Nl c3NfYXV4dHJhY2VfaW5mb19mdWxsKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAo+ICAJCQkJICAg ICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCj4gIHsKPiBAQCAtMjgxNCw3ICsyODY4 LDcgQEAgaW50IGNzX2V0bV9fcHJvY2Vzc19hdXh0cmFjZV9pbmZvX2Z1bGwodW5pb24gcGVyZl9l dmVudCAqZXZlbnQsCj4gIAlpbnQgZXZlbnRfaGVhZGVyX3NpemUgPSBzaXplb2Yoc3RydWN0IHBl cmZfZXZlbnRfaGVhZGVyKTsKPiAgCWludCB0b3RhbF9zaXplID0gYXV4dHJhY2VfaW5mby0+aGVh ZGVyLnNpemU7Cj4gIAlpbnQgcHJpdl9zaXplID0gMDsKPiAtCWludCBudW1fY3B1LCB0cmNpZHJf aWR4Owo+ICsJaW50IG51bV9jcHU7Cj4gIAlpbnQgZXJyID0gMDsKPiAgCWludCBpLCBqOwo+ICAJ dTY0ICpwdHIgPSBOVUxMOwo+IEBAIC0yODUzLDIzICsyOTA3LDEzIEBAIGludCBjc19ldG1fX3By b2Nlc3NfYXV4dHJhY2VfaW5mb19mdWxsKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAo+ICAJCQkJ Y3NfZXRtX19jcmVhdGVfbWV0YV9ibGsocHRyLCAmaSwKPiAgCQkJCQkJCUNTX0VUTV9QUklWX01B WCwKPiAgCQkJCQkJCUNTX0VUTV9OUl9UUkNfUEFSQU1TX1YwKTsKPiAtCj4gLQkJCS8qIFRoZSB0 cmFjZUlEIGlzIG91ciBoYW5kbGUgKi8KPiAtCQkJdHJjaWRyX2lkeCA9IENTX0VUTV9FVE1UUkFD RUlEUjsKPiAtCj4gIAkJfSBlbHNlIGlmIChwdHJbaV0gPT0gX19wZXJmX2NzX2V0bXY0X21hZ2lj KSB7Cj4gIAkJCW1ldGFkYXRhW2pdID0KPiAgCQkJCWNzX2V0bV9fY3JlYXRlX21ldGFfYmxrKHB0 ciwgJmksCj4gIAkJCQkJCQlDU19FVE1WNF9QUklWX01BWCwKPiAgCQkJCQkJCUNTX0VUTVY0X05S X1RSQ19QQVJBTVNfVjApOwo+IC0KPiAtCQkJLyogVGhlIHRyYWNlSUQgaXMgb3VyIGhhbmRsZSAq Lwo+IC0JCQl0cmNpZHJfaWR4ID0gQ1NfRVRNVjRfVFJDVFJBQ0VJRFI7Cj4gIAkJfSBlbHNlIGlm IChwdHJbaV0gPT0gX19wZXJmX2NzX2V0ZV9tYWdpYykgewo+ICAJCQltZXRhZGF0YVtqXSA9IGNz X2V0bV9fY3JlYXRlX21ldGFfYmxrKHB0ciwgJmksIENTX0VURV9QUklWX01BWCwgLTEpOwo+IC0K PiAtCQkJLyogRVRFIHNoYXJlcyBmaXJzdCBwYXJ0IG9mIG1ldGFkYXRhIHdpdGggRVRNdjQgKi8K PiAtCQkJdHJjaWRyX2lkeCA9IENTX0VUTVY0X1RSQ1RSQUNFSURSOwo+ICAJCX0gZWxzZSB7Cj4g IAkJCXVpX19lcnJvcigiQ1MgRVRNIFRyYWNlOiBVbnJlY29nbmlzZWQgbWFnaWMgbnVtYmVyICUj IlBSSXg2NCIuIEZpbGUgY291bGQgYmUgZnJvbSBhIG5ld2VyIHZlcnNpb24gb2YgcGVyZi5cbiIs Cj4gIAkJCQkgIHB0cltpXSk7Cj4gQEAgLTI4ODEsMjYgKzI5MjUsNiBAQCBpbnQgY3NfZXRtX19w cm9jZXNzX2F1eHRyYWNlX2luZm9fZnVsbCh1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKPiAgCQkJ ZXJyID0gLUVOT01FTTsKPiAgCQkJZ290byBlcnJfZnJlZV9tZXRhZGF0YTsKPiAgCQl9Cj4gLQo+ IC0JCS8qIEdldCBhbiBSQiBub2RlIGZvciB0aGlzIENQVSAqLwo+IC0JCWlub2RlID0gaW50bGlz dF9fZmluZG5ldyh0cmFjZWlkX2xpc3QsIG1ldGFkYXRhW2pdW3RyY2lkcl9pZHhdKTsKPiAtCj4g LQkJLyogU29tZXRoaW5nIHdlbnQgd3JvbmcsIG5vIG5lZWQgdG8gY29udGludWUgKi8KPiAtCQlp ZiAoIWlub2RlKSB7Cj4gLQkJCWVyciA9IC1FTk9NRU07Cj4gLQkJCWdvdG8gZXJyX2ZyZWVfbWV0 YWRhdGE7Cj4gLQkJfQo+IC0KPiAtCQkvKgo+IC0JCSAqIFRoZSBub2RlIGZvciB0aGF0IENQVSBz aG91bGQgbm90IGJlIHRha2VuLgo+IC0JCSAqIEJhY2sgb3V0IGlmIHRoYXQncyB0aGUgY2FzZS4K PiAtCQkgKi8KPiAtCQlpZiAoaW5vZGUtPnByaXYpIHsKPiAtCQkJZXJyID0gLUVJTlZBTDsKPiAt CQkJZ290byBlcnJfZnJlZV9tZXRhZGF0YTsKPiAtCQl9Cj4gLQkJLyogQWxsIGdvb2QsIGFzc29j aWF0ZSB0aGUgdHJhY2VJRCB3aXRoIHRoZSBtZXRhZGF0YSBwb2ludGVyICovCj4gLQkJaW5vZGUt PnByaXYgPSBtZXRhZGF0YVtqXTsKPiAgCX0KPiAgCj4gIAkvKgo+IEBAIC0yOTk0LDYgKzMwMTgs MTEgQEAgaW50IGNzX2V0bV9fcHJvY2Vzc19hdXh0cmFjZV9pbmZvX2Z1bGwodW5pb24gcGVyZl9l dmVudCAqZXZlbnQsCj4gIAlpZiAoZXJyKQo+ICAJCWdvdG8gZXJyX2RlbGV0ZV90aHJlYWQ7Cj4g IAo+ICsJLyogYmVmb3JlIGF1eCByZWNvcmRzIGFyZSBxdWV1ZWQsIG5lZWQgdG8gbWFwIG1ldGFk YXRhIHRvIHRyYWNlIElEcyAqLwo+ICsJZXJyID0gY3NfZXRtX19tYXBfdHJhY2VfaWRzX21ldGFk YXRhKG51bV9jcHUsIG1ldGFkYXRhKTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBlcnJfZGVsZXRl X3RocmVhZDsKPiArCj4gIAllcnIgPSBjc19ldG1fX3F1ZXVlX2F1eF9yZWNvcmRzKHNlc3Npb24p Owo+ICAJaWYgKGVycikKPiAgCQlnb3RvIGVycl9kZWxldGVfdGhyZWFkOwo+IGRpZmYgLS1naXQg YS90b29scy9wZXJmL3V0aWwvY3MtZXRtLmggYi90b29scy9wZXJmL3V0aWwvY3MtZXRtLmgKPiBp bmRleCA5OGE0ZjcxMTNkMmYuLjZkMzA3OGUwNDJiNCAxMDA2NDQKPiAtLS0gYS90b29scy9wZXJm L3V0aWwvY3MtZXRtLmgKPiArKysgYi90b29scy9wZXJmL3V0aWwvY3MtZXRtLmgKPiBAQCAtMjks MTMgKzI5LDE3IEBAIGVudW0gewo+ICAvKgo+ICAgKiBVcGRhdGUgdGhlIHZlcnNpb24gZm9yIG5l dyBmb3JtYXQuCj4gICAqCj4gLSAqIE5ldyB2ZXJzaW9uIDEgZm9ybWF0IGFkZHMgYSBwYXJhbSBj b3VudCB0byB0aGUgcGVyIGNwdSBtZXRhZGF0YS4KPiArICogVmVyc2lvbiAxOiBmb3JtYXQgYWRk cyBhIHBhcmFtIGNvdW50IHRvIHRoZSBwZXIgY3B1IG1ldGFkYXRhLgo+ICAgKiBUaGlzIGFsbG93 cyBlYXN5IGFkZGluZyBvZiBuZXcgbWV0YWRhdGEgcGFyYW1ldGVycy4KPiAgICogUmVxdWlyZXMg dGhhdCBuZXcgcGFyYW1zIGFsd2F5cyBhZGRlZCBhZnRlciBjdXJyZW50IG9uZXMuCj4gICAqIEFs c28gYWxsb3dzIGNsaWVudCByZWFkZXIgdG8gaGFuZGxlIGZpbGUgdmVyc2lvbnMgdGhhdCBhcmUg ZGlmZmVyZW50IGJ5Cj4gICAqIGNoZWNraW5nIHRoZSBudW1iZXIgb2YgcGFyYW1zIGluIHRoZSBm aWxlIHZzIHRoZSBudW1iZXIgZXhwZWN0ZWQuCj4gKyAqCj4gKyAqIFZlcnNpb24gMjogRHJpdmVy cyB3aWxsIHVzZSBQRVJGX1JFQ09SRF9BVVhfT1VUUFVUX0hXX0lEIHRvIG91dHB1dAo+ICsgKiBD b3JlU2lnaHQgVHJhY2UgSUQuIC4uLlRSQUNFSURSIG1ldGFkYXRhIHdpbGwgYmUgc2V0IHRvIHVu dXNlZCBJRC4KPiAgICovCj4gLSNkZWZpbmUgQ1NfSEVBREVSX0NVUlJFTlRfVkVSU0lPTiAxCj4g KyNkZWZpbmUgQ1NfSEVBREVSX0NVUlJFTlRfVkVSU0lPTgkyCj4gKyNkZWZpbmUgQ1NfQVVYX0hX X0lEX1ZFUlNJT05fTUlOCTIKPiAgCj4gIC8qIEJlZ2lubmluZyBvZiBoZWFkZXIgY29tbW9uIHRv IGJvdGggRVRNdjMgYW5kIFY0ICovCj4gIGVudW0gewo+IEBAIC05Nyw2ICsxMDEsMTIgQEAgZW51 bSB7Cj4gIAlDU19FVEVfUFJJVl9NQVgKPiAgfTsKPiAgCj4gKy8qCj4gKyAqIENoZWNrIGZvciB2 YWxpZCBDb3JlU2lnaHQgdHJhY2UgSUQuIElmIGFuIGludmFsaWQgdmFsdWUgaXMgcHJlc2VudCBp biB0aGUgbWV0YWRhdGEsCj4gKyAqIHRoZW4gSURzIGFyZSBwcmVzZW50IGluIHRoZSBoYXJkd2Fy ZSBJRCBwYWNrZXQgaW4gdGhlIGRhdGEgZmlsZS4KPiArICovCj4gKyNkZWZpbmUgQ1NfSVNfVkFM SURfVFJBQ0VfSUQoaWQpICgoaWQgPiAwKSAmJiAoaWQgPCAweDcwKSkKPiArCj4gIC8qCj4gICAq IEVUTXYzIGV4Y2VwdGlvbiBlbmNvZGluZyBudW1iZXI6Cj4gICAqIFNlZSBFbWJlZGRlZCBUcmFj ZSBNYWNyb2NlbGwgc3BlY2lmaWNhdGlvbiAoQVJNIElISSAwMDE0USkKPiAtLSAKPiAyLjMyLjAK PiAKCi0tIAoKLSBBcm5hbGRvCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==