From patchwork Wed Oct 3 11:36:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Olsa X-Patchwork-Id: 10624657 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 90A9415A6 for ; Wed, 3 Oct 2018 11:37:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 813DF28765 for ; Wed, 3 Oct 2018 11:37:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7489D28821; Wed, 3 Oct 2018 11:37:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4DC8B28765 for ; Wed, 3 Oct 2018 11:37:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject: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=wfOMPsOIHnlDZ+mU9hLf91ZOYjk9e9FsN0zVWYiO6eM=; b=H464JUrccd2hhJ fatQO8tck9vimnBA3P/DBSGGDc1LF6VWLlmadsdgCoBQNhgAzf/+EEoqFMKvdu1reARL/zY8a7u8T yEBiCjYgbY3qn6QsoKAdSxtGgaaPhmNt4KH5fLfMO8Q+lsiPvHjkcvReKIp6aXSzTj0RH655DQJyP YjopW5NDplE0XVNf3rTQvfVW7ODSV9dFjV38YfU7cfxmoyyh0EEcVpu9wT2PXuTcSusLABnneyb1H e8Vu6OTYvhtvTqjZ/a9eQtcIBj6yjhBc/lrVoemZ7u5VhgYA7e7W5Mz2Q9ZQx7q2/0t0gS4cQzpoC ZhA36idDnSpMEmSmgMIQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1g7fSh-0008Ra-BI; Wed, 03 Oct 2018 11:37:03 +0000 Received: from mx1.redhat.com ([209.132.183.28]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1g7fSc-0008Qe-AR for linux-arm-kernel@lists.infradead.org; Wed, 03 Oct 2018 11:37:00 +0000 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0C0C13082A26; Wed, 3 Oct 2018 11:36:47 +0000 (UTC) Received: from krava (unknown [10.40.205.180]) by smtp.corp.redhat.com (Postfix) with SMTP id 241CB63F85; Wed, 3 Oct 2018 11:36:43 +0000 (UTC) Date: Wed, 3 Oct 2018 13:36:43 +0200 From: Jiri Olsa To: John Garry Subject: [PATCH] perf tools: Allocate id array in perf_event__synthesize_event_update_cpus Message-ID: <20181003113643.GA31725@krava> References: <712b7c31-f681-7737-71e7-c028b8d2bba5@huawei.com> <20180927160210.GF6916@krava> <4ac88076-60fa-4509-7fa0-2f99d73174d2@huawei.com> <20181002111621.GA6357@krava> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20181002111621.GA6357@krava> User-Agent: Mutt/1.10.1 (2018-07-13) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Wed, 03 Oct 2018 11:36:47 +0000 (UTC) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181003_043658_481515_789F4D89 X-CRM114-Status: GOOD ( 21.34 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Andi Kleen , Peter Zijlstra , Will Deacon , Linuxarm , Arnaldo Carvalho de Melo , "linux-kernel@vger.kernel.org" , Alexander Shishkin , Ingo Molnar , Namhyung Kim , "linux-arm-kernel@lists.infradead.org" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP On Tue, Oct 02, 2018 at 01:16:21PM +0200, Jiri Olsa wrote: > On Tue, Oct 02, 2018 at 11:41:36AM +0100, John Garry wrote: > > SNIP > > > > > > > > > > --- > > > diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c > > > index 1ec1d9bc2d63..fb2a0dab3978 100644 > > > --- a/tools/perf/util/header.c > > > +++ b/tools/perf/util/header.c > > > @@ -29,6 +29,7 @@ > > > #include "symbol.h" > > > #include "debug.h" > > > #include "cpumap.h" > > > +#include "thread_map.h" > > > #include "pmu.h" > > > #include "vdso.h" > > > #include "strbuf.h" > > > @@ -3579,6 +3580,11 @@ perf_event__synthesize_event_update_cpus(struct perf_tool *tool, > > > if (!evsel->own_cpus) > > > return 0; > > > > > > + if (!evsel->id || > > > > for my test, evsel->id is NULL > > > > > + perf_evsel__alloc_id(evsel, cpu_map__nr(evsel->cpus), > > > + thread_map__nr(evsel->threads))) > > > > and then this function is not called as we return immediately. So did you > > really want this: > > > > if (!evsel->id && perf_evsel__alloc_id(...)) > > return -ENOMEM; > > ugh.. yes ;-) thanks for the fix.. I'll double > check the logic and post the patch this week actualy, we also need to populate those ids ;-) so calling perf_evsel__store_ids instead.. attaching the full patch thanks, jirka --- John reported crash when recording on an event under pmu with cpumask defined: root@localhost:~# ./perf_debug_ record -e armv8_pmuv3_0/br_mis_pred/ sleep 1 perf: Segmentation fault Obtained 9 stack frames. ./perf_debug_() [0x4c5ef8] [0xffff82ba267c] ./perf_debug_() [0x4bc5a8] ./perf_debug_() [0x419550] ./perf_debug_() [0x41a928] ./perf_debug_() [0x472f58] ./perf_debug_() [0x473210] ./perf_debug_() [0x4070f4] /lib/aarch64-linux-gnu/libc.so.6(__libc_start_main+0xe0) [0xffff8294c8a0] Segmentation fault (core dumped) We synthesize an update event that needs to touch the evsel id array, which is not defined at that time. Fixing this by allocating the array and getting IDs before it's used. Reported-by: John Garry Link: http://lkml.kernel.org/n/tip-8x4n7o34yheigoxm1jibflm6@git.kernel.org Signed-off-by: Jiri Olsa --- tools/perf/util/header.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 1ec1d9bc2d63..14ca27f79d4a 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -29,6 +29,7 @@ #include "symbol.h" #include "debug.h" #include "cpumap.h" +#include "thread_map.h" #include "pmu.h" #include "vdso.h" #include "strbuf.h" @@ -3579,6 +3580,9 @@ perf_event__synthesize_event_update_cpus(struct perf_tool *tool, if (!evsel->own_cpus) return 0; + if (!evsel->id && perf_evsel__store_ids(evsel, evsel->evlist)) + return -ENOMEM; + ev = cpu_map_data__alloc(evsel->own_cpus, &size, &type, &max); if (!ev) return -ENOMEM;