Received: by 10.192.165.148 with SMTP id m20csp4547200imm; Tue, 8 May 2018 10:07:17 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoblKDAmGDbjE21Xp4Z+8B/iu077fMm/aAHG6tOxBhSWwQOntqGNPs7RNCsVEwo7UsRRV2u X-Received: by 2002:a63:887:: with SMTP id 129-v6mr32860069pgi.17.1525799237765; Tue, 08 May 2018 10:07:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525799237; cv=none; d=google.com; s=arc-20160816; b=My2xuZ5ByFCs9lcEYXrZ8uV4tQkObDm24sZ5ogzS0lDyFAsS1NAvdiYSW+oIIHpGTH dCazJwjynOn4jXh45H2qL1yE2HmVylrmuH4cus4WUSVczHijof/hsVIrmsQuU4fB1FPx awEaHkfNu3fLGDFHbj/0NiDAEsQqCrE5H8hdrazNkmSmNAIBIPRj252GCujkWVLLw1pw hSCSh7C+Hoc1I+POegsGG+WlL1oVBRYETnPaL2dby/fdaa0lYNdCIkKu2KpP1xxsdxG2 AFpMlJSASl4L+dNKEUME2bGjamYIL+R4ytNX+V6ASPjKBldrU/PGY3vxneto9gxHJ/aR n5Ug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=0f5taKmmqFWJoRqSbZyzLJwypom2cnNk27MCXH0IrQQ=; b=eM90TlNhzB1mADMp/wq9A/a/nQawUHE1AOm7aZOOGg3H63WFGQ0KiQMR+Gdh2MSN7m lIwt+9BySE3K0KGiDTkkP5FlH6zbY4GeCexKNFzMkVXVHpbn/iEbydUS92ueMuewxYok qCOsZh1k8xMLuufDYvr5IJLA7kkIVXW6yGeihdXsL8sphyMc4eWxeNkdiDxkqq8ZofS/ Az4F+q7LkmbRNNHpvxblEdkIH87hkXCrXybVaSUSPiz0syO6LrZ/w5J0iZUa/sxxXCdx R6pNAwS0ktqU4iCpeGfPgbixWxun1EcEAjNWHPFWyv6HYQWr7a4maRcgXpdDAiYWtiM+ Zc4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Ub9sEih8; 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 p66si25060715pfg.329.2018.05.08.10.07.03; Tue, 08 May 2018 10:07:17 -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=Ub9sEih8; 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 S1752824AbeEHRBd (ORCPT + 99 others); Tue, 8 May 2018 13:01:33 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:51095 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751934AbeEHRBb (ORCPT ); Tue, 8 May 2018 13:01:31 -0400 Received: by mail-wm0-f66.google.com with SMTP id t11so20067195wmt.0 for ; Tue, 08 May 2018 10:01:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=0f5taKmmqFWJoRqSbZyzLJwypom2cnNk27MCXH0IrQQ=; b=Ub9sEih88wKCU3VJmSCGPbrGRA8/XvHk7l5ROebQhX7dXSfOTSFz7l2cif8o8j/2X2 /2DH1eo3Xt+t5S5i2BEyzUMgyTJ0zE5fM+9uR/SzDfCUJQjHEDUCzKND41kdmNTOP9dH CylX6hUIVv3eDk9wSrfgQEsf7oSJGqGi4TMww= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=0f5taKmmqFWJoRqSbZyzLJwypom2cnNk27MCXH0IrQQ=; b=YwbCAalyWCoGQ9QYOX9x2ou/U2mWQcBtB+huplRqDGndhCVWfk2v2cUbTkyBJIh13q YPRDpMPSXcvQzky/FGHRC5XNdYW+IhKfg/BYE7mSqc2otQf1v08JNOZ1JAEZH6q+BQhu AdxjSuG4KxsLf6jCYtOFnBK1zBtuiv5a6O25dsgU5RZJCVAIh6E8M+mo1YmjA+wrFrQu K7XImfSG4oXXD9zUps/ipWfwTYafEK0vSSLTROhYZynQsyyM/zWp2jA9ZzQf0pN74rPD azVqBsLO6eczPup1KqdDFEukKjjC2VxZbX05sPi04woE1EiGKZxM7GzQ/4GR64aKhpok uTDA== X-Gm-Message-State: ALQs6tDXYJT+6aOBImdG/1lu/spR7o79JtfTWmy1IX2//gU9xvGEE4yN CoFa3X2heEyJnduBNDY5UkIGQyOzu45OLgXNV56NZg== X-Received: by 2002:a50:b003:: with SMTP id i3-v6mr55078659edd.293.1525798890588; Tue, 08 May 2018 10:01:30 -0700 (PDT) MIME-Version: 1.0 Received: by 10.80.164.161 with HTTP; Tue, 8 May 2018 10:01:30 -0700 (PDT) In-Reply-To: <1525360703-26159-1-git-send-email-leo.yan@linaro.org> References: <1525360703-26159-1-git-send-email-leo.yan@linaro.org> From: Mathieu Poirier Date: Tue, 8 May 2018 11:01:30 -0600 Message-ID: Subject: Re: [PATCH 1/2] perf cs-etm: Support unknown_thread in cs_etm_auxtrace To: Leo Yan Cc: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Alexander Shishkin , Jiri Olsa , Namhyung Kim , linux-arm-kernel , linux-kernel@vger.kernel.org, coresight@lists.linaro.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 3 May 2018 at 09:18, Leo Yan wrote: > 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 > --- > tools/perf/util/cs-etm.c | 25 +++++++++++++++++++++++-- > 1 file changed, 23 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c > index 6533b1a..417302c 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); > } > @@ -266,6 +267,7 @@ static u32 cs_etm__mem_access(struct cs_etm_queue *etmq, u64 address, > if (!thread) { > if (cpumode != PERF_RECORD_MISC_KERNEL) > return -EINVAL; > + Extra line, please remove. With this change: Acked-by: Mathieu Poirier > thread = etmq->etm->unknown_thread; > } > > @@ -1355,6 +1357,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 +1388,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 >