From patchwork Tue Feb 9 09:58:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Clark X-Patchwork-Id: 12077649 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=-17.3 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,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT 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 5E8A8C433DB for ; Tue, 9 Feb 2021 10:00:52 +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 E210964EAC for ; Tue, 9 Feb 2021 10:00:51 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E210964EAC 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-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=3/kzkYFNdE6eZpg2Xa6w5tGZmHk8QVCEaXFcKa96ZM4=; b=RvibyBG84DGfmUn355hhbjOig GozK12+FdbdZN+Ig3jVmisAHhNAu+zDtgQ8QksrItPXAY7TsW2ELEXO/71v9TuPWpIJI0H6rbLXGZ fewNHGc7l8C3uGm+I7Vh0d3z/3t3YlDoeCc4oyR88Hp87PG0nmpVtKshliHV4stxyvY1kLM5dJeXC 3IPzY4s7wIjxCwWrxt/vvTHXjOJ/PhdJhuoCRerBb+ICq8djs1IJPLOULVengxcWcKJATzi7pUD98 CZOuVIWwQ3R9NQ/Ek4sjZSKioii0Un82ZPpKyhcXWNqTfL+6sq87sY7bDwtTcgr1+BDzk1igafjA9 ohYlXSBTg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l9Po0-0001rj-Bg; Tue, 09 Feb 2021 09:59:36 +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 1l9Pns-0001o6-Qd for linux-arm-kernel@lists.infradead.org; Tue, 09 Feb 2021 09:59:30 +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 C6FF2106F; Tue, 9 Feb 2021 01:59:23 -0800 (PST) Received: from e121896.arm.com (unknown [10.57.44.191]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 47FD33F73B; Tue, 9 Feb 2021 01:59:20 -0800 (PST) From: James Clark To: coresight@lists.linaro.org Subject: [RFC PATCH 2/5] perf cs-etm: Only search timestamp in current sample's queue. Date: Tue, 9 Feb 2021 11:58:54 +0200 Message-Id: <20210209095857.28419-3-james.clark@arm.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20210209095857.28419-1-james.clark@arm.com> References: <20210209095857.28419-1-james.clark@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210209_045929_420717_302381A9 X-CRM114-Status: GOOD ( 20.92 ) 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: Mark Rutland , branislav.rankov@arm.com, al.grant@arm.com, denik@chromium.org, Mathieu Poirier , Alexander Shishkin , Jiri Olsa , John Garry , linux-kernel@vger.kernel.org, James Clark , Leo Yan , Namhyung Kim , Will Deacon , linux-arm-kernel@lists.infradead.org, Mike Leach Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Change initial timestamp search to only operate on the queue related to the current event. In a later change the bounds of the aux record will also be used to reset the decoder and the record is only relevant to a single queue. This doesn't work --per-thread mode where cpu == -1 so a further change will be required. Also this change makes some files that had coresight data but didn't syntesise any events start working and generating events. I'm not sure of the reason for that. I'd expect this change to only affect the ordering of events. Signed-off-by: James Clark --- tools/perf/util/cs-etm.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c index 440001cdd3b8..9ebe43d60d1e 100644 --- a/tools/perf/util/cs-etm.c +++ b/tools/perf/util/cs-etm.c @@ -97,7 +97,7 @@ struct cs_etm_queue { /* RB tree for quick conversion between traceID and metadata pointers */ static struct intlist *traceid_list; -static int cs_etm__update_queues(struct cs_etm_auxtrace *etm); +static int cs_etm__update_queues(struct cs_etm_auxtrace *etm, int cpu); static int cs_etm__process_queues(struct cs_etm_auxtrace *etm); static int cs_etm__process_timeless_queues(struct cs_etm_auxtrace *etm, pid_t tid); @@ -524,7 +524,7 @@ static void cs_etm__dump_event(struct cs_etm_auxtrace *etm, static int cs_etm__flush_events(struct perf_session *session, struct perf_tool *tool) { - int ret; + //int ret; struct cs_etm_auxtrace *etm = container_of(session->auxtrace, struct cs_etm_auxtrace, auxtrace); @@ -534,10 +534,12 @@ static int cs_etm__flush_events(struct perf_session *session, if (!tool->ordered_events) return -EINVAL; - ret = cs_etm__update_queues(etm); + // TODO: does this need to be here? It is already called in cs_etm__process_event + // when the aux records are available. + //ret = cs_etm__update_queues(etm); - if (ret < 0) - return ret; + //if (ret < 0) + // return ret; if (etm->timeless_decoding) return cs_etm__process_timeless_queues(etm, -1); @@ -851,10 +853,7 @@ static int cs_etm__setup_queue(struct cs_etm_auxtrace *etm, etmq->queue_nr = queue_nr; etmq->offset = 0; - if (etm->timeless_decoding) - return 0; - else - return cs_etm__seach_first_timestamp(etmq); + return 0; } static int cs_etm__setup_queues(struct cs_etm_auxtrace *etm) @@ -874,14 +873,20 @@ static int cs_etm__setup_queues(struct cs_etm_auxtrace *etm) return 0; } -static int cs_etm__update_queues(struct cs_etm_auxtrace *etm) +static int cs_etm__update_queues(struct cs_etm_auxtrace *etm, int cpu) { + int ret; if (etm->queues.new_data) { etm->queues.new_data = false; - return cs_etm__setup_queues(etm); + ret = cs_etm__setup_queues(etm); + if (ret) + return ret; } - return 0; + if (!etm->timeless_decoding) + return cs_etm__seach_first_timestamp(etm->queues.queue_array[cpu].priv); + else + return 0; } static inline @@ -2358,8 +2363,9 @@ static int cs_etm__process_event(struct perf_session *session, else timestamp = 0; - if (timestamp || etm->timeless_decoding) { - err = cs_etm__update_queues(etm); + if ((timestamp || etm->timeless_decoding) + && event->header.type == PERF_RECORD_AUX) { + err = cs_etm__update_queues(etm, sample->cpu); if (err) return err; }