From patchwork Wed Aug 1 21:36:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnaldo Carvalho de Melo X-Patchwork-Id: 143312 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp1377541ljj; Wed, 1 Aug 2018 14:37:43 -0700 (PDT) X-Google-Smtp-Source: AAOMgpeQ//btF58oafqYaRC0dRYFmnscuZ1S9e8PzKEvrdpUSDwa9RwSuRaNyeuhvOZEM3D4gu66 X-Received: by 2002:a63:455c:: with SMTP id u28-v6mr87431pgk.210.1533159463764; Wed, 01 Aug 2018 14:37:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533159463; cv=none; d=google.com; s=arc-20160816; b=ER2XhYJZa7/WVG3uLk+rcIyzhsz0ZtPrB87OEdCPbQsuzvf/4qOEU4ncMDrq2xXrDT tcE+CDwUU/LKZMObkXu3pbrcXRB+PDhADuHtoq5VK/FfTE645MUHY+2krJm/RKOqKOAo +tZL/rQf+pzyQEAF43MRqlUPeUsou1mVQytIO+F7RHcu+TqizahniW+kjNX2otptNDJ9 yO4mnqFVqDwuTq7Pr++gWgGOab8QLb/XMOfhaokfsKIUTdj5kdUiGFn4cbJl4HuMbNky 67y9Onje5laMiz3rLGUFodAfARlSKEVzqjT+AST1ncds/+4pozgs6ncznpemU+UB1fhP 1C4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=QwUCeM5FEp9xxb62CHdnAMcA6Qv838MhjUKuu6sDE9w=; b=qAbDzt2fz8uHV1k8HI7bD1vRDFBNzANjG2ANZ5vBbL198+eUKV6ykjbuOKgZewcGUJ L3zWhS3lvooCeaDySTYczlzbQNunz9gLDT/MetP32DKLzLNjb0t/uPpcbKMMCS1+oKZK AJnihmUm49M4JvCBpsk1ZIdblGwd0chJ1f3efOBhlZVUZIISXioKRXBViUcBT8CZQo51 LwIbNGBWB+JEen04O23O3XXqbJnQEkIvdcwKiMno9/ykXjdo1vve48ccWLK4WfWXxqt6 ZaOAORA6mX8JyNAu/S2i4xcKDcjZ9x+J7qqdvPanT2L9XT4F3aUR3KVEmd4+9XU4i5f4 LxVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=fJFp1zSK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e21-v6si82139pgl.148.2018.08.01.14.37.43; Wed, 01 Aug 2018 14:37:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=fJFp1zSK; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387686AbeHAXZ2 (ORCPT + 31 others); Wed, 1 Aug 2018 19:25:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:39370 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387439AbeHAXZ1 (ORCPT ); Wed, 1 Aug 2018 19:25:27 -0400 Received: from jouet.infradead.org (unknown [179.97.41.186]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id BAC2020844; Wed, 1 Aug 2018 21:37:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1533159460; bh=cBJxGGiRQ8OhCHI0jL0TIWRSIpaffOEAEiNllGfDtW8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fJFp1zSK8K9NBuJ+YJ68XgzsGfth4YCaccLSXPC2AzXu0rkrtHS5Dbo0P/31RFvcr aEadS8tbsW4Z0rH8HlSlDw6C1VULxe2nsyhn+x/jyvY0uzpTmeAgpQzTlnfdOhymuI xxRYRnwxkgxqqG/nFfZ5MiX2f2+5RB5zctiXptYs= From: Arnaldo Carvalho de Melo To: Ingo Molnar Cc: Clark Williams , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Leo Yan , Alexander Shishkin , Jiri Olsa , Kim Phillips , Mike Leach , Namhyung Kim , Peter Zijlstra , Robert Walker , linux-arm-kernel@lists.infradead.org, Arnaldo Carvalho de Melo Subject: [PATCH 12/21] perf cs-etm: Fix start tracing packet handling Date: Wed, 1 Aug 2018 18:36:39 -0300 Message-Id: <20180801213648.4814-13-acme@kernel.org> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180801213648.4814-1-acme@kernel.org> References: <20180801213648.4814-1-acme@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Leo Yan Usually the start tracing packet is a CS_ETM_TRACE_ON packet, this packet is passed to cs_etm__flush(); cs_etm__flush() will check the condition 'prev_packet->sample_type == CS_ETM_RANGE' but 'prev_packet' is allocated by zalloc() so 'prev_packet->sample_type' is zero in initialization and this condition is false. So cs_etm__flush() will directly bail out without handling the start tracing packet. This patch is to introduce a new sample type CS_ETM_EMPTY, which is used to indicate the packet is an empty packet. cs_etm__flush() will swap packets when it finds the previous packet is empty, so this can record the start tracing packet into 'etmq->prev_packet'. Signed-off-by: Leo Yan Reviewed-by: Mathieu Poirier Cc: Alexander Shishkin Cc: Jiri Olsa Cc: Kim Phillips Cc: Mike Leach Cc: Namhyung Kim Cc: Peter Zijlstra Cc: Robert Walker Cc: linux-arm-kernel@lists.infradead.org Link: http://lkml.kernel.org/r/1531295145-596-4-git-send-email-leo.yan@linaro.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/cs-etm-decoder/cs-etm-decoder.h | 1 + tools/perf/util/cs-etm.c | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) -- 2.14.4 diff --git a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h index 743f5f444304..612b5755f742 100644 --- a/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h +++ b/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h @@ -23,6 +23,7 @@ struct cs_etm_buffer { }; enum cs_etm_sample_type { + CS_ETM_EMPTY = 0, CS_ETM_RANGE = 1 << 0, CS_ETM_TRACE_ON = 1 << 1, }; diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c index 8b2c099e750a..ae7c9c880cb2 100644 --- a/tools/perf/util/cs-etm.c +++ b/tools/perf/util/cs-etm.c @@ -924,8 +924,14 @@ static int cs_etm__flush(struct cs_etm_queue *etmq) int err = 0; struct cs_etm_packet *tmp; + if (!etmq->prev_packet) + return 0; + + /* Handle start tracing packet */ + if (etmq->prev_packet->sample_type == CS_ETM_EMPTY) + goto swap_packet; + if (etmq->etm->synth_opts.last_branch && - etmq->prev_packet && etmq->prev_packet->sample_type == CS_ETM_RANGE) { /* * Generate a last branch event for the branches left in the @@ -944,6 +950,10 @@ static int cs_etm__flush(struct cs_etm_queue *etmq) etmq->period_instructions = 0; + } + +swap_packet: + if (etmq->etm->synth_opts.last_branch) { /* * Swap PACKET with PREV_PACKET: PACKET becomes PREV_PACKET for * the next incoming packet. @@ -1023,6 +1033,13 @@ static int cs_etm__run_decoder(struct cs_etm_queue *etmq) */ cs_etm__flush(etmq); break; + case CS_ETM_EMPTY: + /* + * Should not receive empty packet, + * report error. + */ + pr_err("CS ETM Trace: empty packet\n"); + return -EINVAL; default: break; }