Received: by 10.192.165.148 with SMTP id m20csp5059259imm; Tue, 8 May 2018 21:16:11 -0700 (PDT) X-Google-Smtp-Source: AB8JxZo7fkrc2yGo3mpyuSdC6GmGlgvLeaEvRs6bZjgTUdoDi3ci6VN646i9YDupZluKMx0SFpys X-Received: by 2002:a65:56c2:: with SMTP id w2-v6mr20045808pgs.381.1525839371633; Tue, 08 May 2018 21:16:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525839371; cv=none; d=google.com; s=arc-20160816; b=SyFNrFO2SQ0BKIhzq34jaL87I490L+NeHzyxQXaOGTYCo89zOG8MZ0P0GXTpfQlYUn JFIedTFBWtJn7Qc1VxzvvBmWeKgiYDh28ApB32h1IFVD+tYSE6TEdwHXAHd/xDnbcw3a O/u0qx0d10gVZTDw1xekM5KTSs8Bv2MS5ixlqjm3ePq04qGgbHuGQ8JIsMztCyVx7ICv FwFLrETLKy2bCqng/CWoAeWbPJtDJvknclNTX0xEwY21FYKRB1D7tXlStKQTGy8nSv9/ AAek5tnsOxCD6OZU7JmSLOJ3UFqcIJNVSWDZUH8BjigLTZfxYQuxMGnlVdN7wbzbRRq2 8oCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=Wum+rzdoXN+FHN2IKXvcJz2kTVf930y5axBnIVXgUj4=; b=TGTTbvqUgcoY+VKJvptsfAGC1kAFLzy4t4M1u/FeSS8AYc8Zyns835ABn4LVsLFaBc uqYlBIJ2ILT2zKmEzu/ll8Gs6IItLw9K5xjD+u4aoX0ZcgpUVigp1VsNc4gc4BBsIkPd rbFodiuQNbW1C840LDlLYWxqNqLpM4pBEBLV8ku/lB1llI+TU2hFy7QMmTHgQa2fW0Pz s8V6CBmIb49bX1AYlmIFJLs7G7ACN2hswlotX/P3VNBm1NDrBxPscPgR04Kd4e8/vEcE zbAmIvItXXDJn1SvUOJyJo4D6Afa4hBWwZaWdLdrNK++YSKD4PeISfiVidJTr/KfVt6T b2Dw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Rss+uuNp; 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=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y23-v6si15908922pgv.318.2018.05.08.21.15.56; Tue, 08 May 2018 21:16:11 -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=@linaro.org header.s=google header.b=Rss+uuNp; 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=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751364AbeEIEPo (ORCPT + 99 others); Wed, 9 May 2018 00:15:44 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:55863 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750784AbeEIEPn (ORCPT ); Wed, 9 May 2018 00:15:43 -0400 Received: by mail-wm0-f67.google.com with SMTP id a8so22024226wmg.5 for ; Tue, 08 May 2018 21:15:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=Wum+rzdoXN+FHN2IKXvcJz2kTVf930y5axBnIVXgUj4=; b=Rss+uuNpbwulzodJp4Hr53RXSbcg/WPkoP98xHzFjkCddf5N0SmjdqBrCi/0cOHd0V aqKHJl3SjFVlzrKbf950zIYjypNVF5zQ3fFkHNqR4CUHDcVJ2+EGakt0JDyrU1lB3Lu1 htFDR/clcuKaql/pJy3DvxtHAl/vOxYYew3wI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Wum+rzdoXN+FHN2IKXvcJz2kTVf930y5axBnIVXgUj4=; b=FhlPdS2nF9/ItH4JW7LibcquhEkKRQHqdzaB7DaCZWqKglUwPgdzH2YcXhi/kEsjvt rbwVfj5AuN2TfSupuDHwFbDlxypSHDR49KU7zCHknChBRYdO/d+Ip4lqyOYG8faHrRYv ct7TTf835izVHwXDWVmlJ8y4uJJvF1ZjmiwndBhvZ6sSpXsFfFj8QVqmbPN8KpR9ZW1y tSUwPCicQ/vSA8PBWZuqPnOqztlXGNzjQNkbDsG9jUCoOBtqdslwUtWOK57+bflz5kfI Cy6ZF1OZYSqE72ixGJDzasABshJE0rL8rsjhr30pOkQ+mHNUiB+g03mU4m1M9UDir12Q 11QQ== X-Gm-Message-State: ALKqPwdbD1VvYmy1ngz237yeLDkhfkH3lN2m1f3eSdrmtlbHc0D6nIs0 3QL50P5g9b4P2569agEnr8h2ow== X-Received: by 10.28.109.144 with SMTP id b16mr4479953wmi.138.1525839342627; Tue, 08 May 2018 21:15:42 -0700 (PDT) Received: from localhost.localdomain (li1489-133.members.linode.com. [139.162.172.133]) by smtp.gmail.com with ESMTPSA id m35-v6sm27354849wrm.51.2018.05.08.21.15.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 08 May 2018 21:15:41 -0700 (PDT) From: Leo Yan To: Mathieu Poirier , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org Cc: Leo Yan Subject: [PATCH v2 1/2] perf cs-etm: Support unknown_thread in cs_etm_auxtrace Date: Wed, 9 May 2018 12:15:11 +0800 Message-Id: <1525839312-20544-1-git-send-email-leo.yan@linaro.org> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org CoreSight doesn't allocate thread structure for unknown_thread in etm auxtrace, so unknown_thread is NULL pointer. If the perf data doesn't contain valid tid and then cs_etm__mem_access() uses unknown_thread instead as thread handler, this results in segmentation fault when thread__find_addr_map() accesses thread handler. This commit creates new thread data which is used by unknown_thread, so CoreSight tracing can roll back to use unknown_thread if perf data doesn't include valid thread info. This commit also releases thread data for initialization failure case and for normal auxtrace free flow. Signed-off-by: Leo Yan Acked-by: Mathieu Poirier --- tools/perf/util/cs-etm.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c index 6533b1a..69f21de 100644 --- a/tools/perf/util/cs-etm.c +++ b/tools/perf/util/cs-etm.c @@ -239,6 +239,7 @@ static void cs_etm__free(struct perf_session *session) for (i = 0; i < aux->num_cpu; i++) zfree(&aux->metadata[i]); + thread__zput(aux->unknown_thread); zfree(&aux->metadata); zfree(&aux); } @@ -1355,6 +1356,23 @@ int cs_etm__process_auxtrace_info(union perf_event *event, etm->auxtrace.free = cs_etm__free; session->auxtrace = &etm->auxtrace; + etm->unknown_thread = thread__new(999999999, 999999999); + if (!etm->unknown_thread) + goto err_free_queues; + + /* + * Initialize list node so that at thread__zput() we can avoid + * segmentation fault at list_del_init(). + */ + INIT_LIST_HEAD(&etm->unknown_thread->node); + + err = thread__set_comm(etm->unknown_thread, "unknown", 0); + if (err) + goto err_delete_thread; + + if (thread__init_map_groups(etm->unknown_thread, etm->machine)) + goto err_delete_thread; + if (dump_trace) { cs_etm__print_auxtrace_info(auxtrace_info->priv, num_cpu); return 0; @@ -1369,16 +1387,18 @@ int cs_etm__process_auxtrace_info(union perf_event *event, err = cs_etm__synth_events(etm, session); if (err) - goto err_free_queues; + goto err_delete_thread; err = auxtrace_queues__process_index(&etm->queues, session); if (err) - goto err_free_queues; + goto err_delete_thread; etm->data_queued = etm->queues.populated; return 0; +err_delete_thread: + thread__zput(etm->unknown_thread); err_free_queues: auxtrace_queues__free(&etm->queues); session->auxtrace = NULL; -- 2.7.4