From patchwork Wed Jan 31 13:49:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 194754 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1898238dyb; Wed, 31 Jan 2024 05:50:09 -0800 (PST) X-Google-Smtp-Source: AGHT+IE9XGpBVsnmELvcTuxyQ3nBwwgY1t5VJrPsKkWmnw0y8LLnM52jQs6vQIprNVyoC7MQmdk7 X-Received: by 2002:aa7:d295:0:b0:55f:80e1:29 with SMTP id w21-20020aa7d295000000b0055f80e10029mr1115282edq.1.1706709008831; Wed, 31 Jan 2024 05:50:08 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706709008; cv=pass; d=google.com; s=arc-20160816; b=KpA9SsF/iq97TbWP51M1J0U15j6UaPLKLIMdRr19sbM5yluO4dzwnvW8PJoQtF/3Hx web1/zKvUSYJ2zAYqji4ESyKTZ/MT3Hhvjo5RobFanfW3ZN0x2oFm8dQuFIm3xlDZ8ZP FFfy7txVw7huWWk+JTwLlBr1ccGDBhA+FeNlUoa0MBV6aZ4vf80YWBv9gkcY8lG3+7Cl ttPS5for9ThAPFbJRuI34IU0z6SlEnluyZPr+VzNrin1uKQPRKFKl8VNrfqtvuc+1qfD UiNjSE33llLWxTj6+pBe8W5JzUUx/2mkGSsCdO6+RD3J2RkodBehwI/V6dacgfGo8qjA SG4A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=to:from:subject:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:message-id:date:dkim-signature; bh=TRAmZ7zfR7GIpS+aIsz6syaxM6Q4TrPavG5oF05xWJs=; fh=c+IRRQDUWP6han27nSEn6xL2ob/dn47A0oh2WXsr30I=; b=FzEdAi6/Lb+AuvfW+H2JZvWtPKiLrmgul2SZ049m4sT7/quwKk8AlacegiSUsXxfAW ivXQFtlQIOkdnU/1/IhXNRhmavbWCQ3u82eNcRrXFCieliWhjKDvk6E/f3KT+tAcLwV9 JY/+dxYP4W/fB6APUIlrXMBZO/O+1x0USESQbIzfVxtCY3VjKoKM84JTkvwoSCZmJR7n ueFME41vm9HEByhL72MjWQtokwaaYB031acyUPM9LUErCkGQi7kBEHv7d17PCXXBMlsI RdWag/wgW/hylfeIu+Af4IUI6FCcT0Ez9/3uCF14cFGb+AGqaTXFzglSnqeTde/RojRy GDYQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=XPdCq7EN; arc=pass (i=1 spf=pass spfdomain=flex--irogers.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-kernel+bounces-46532-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-46532-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com X-Forwarded-Encrypted: i=1; AJvYcCX3WcOxLAzLP3Q1Rdr919t93TBeiOayA9UV4cxnv0lwEycYDxLJPApeXAohlqlMyNllfiqFlqqHVotcElqMiyyrlRHPzw== Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id x23-20020aa7cd97000000b00559523876a4si5566926edv.338.2024.01.31.05.50.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Jan 2024 05:50:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-46532-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=XPdCq7EN; arc=pass (i=1 spf=pass spfdomain=flex--irogers.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-kernel+bounces-46532-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-46532-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 6EAFC1F21DD0 for ; Wed, 31 Jan 2024 13:50:08 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8A01380C13; Wed, 31 Jan 2024 13:49:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XPdCq7EN" Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B2DD80BF1 for ; Wed, 31 Jan 2024 13:49:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706708990; cv=none; b=fVSzxVSAPr5xPSuAywgT9e521wYXmjM74WZePgBFxDpI52c7DnQGog1Ggrew0XEwzczYPklsGsdFfrfwEPK2hVyRkIVbyHEMN/NlgJTEa6P8N99+/icIaORlm1NvC+6CFPeVNW1tDT9vfALbJv++IWpgbI1E3a063SLAdRNF/UI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706708990; c=relaxed/simple; bh=u2dme1MUFaWQF1BSStVrUjjYLnHIqMsZ+Wjfwetyd+o=; h=Date:Message-Id:Mime-Version:Subject:From:To:Content-Type; b=ESjZZp5/+tUACIiAQEUjiqdDEUb5US82Z5l9U9k+BnBopxpmopXwN8BGsa33mEDPFPYo9gyr+zDWl8cmpAoZjumvYSVlfGWKhd3bXO9YiwJKmrXkjYO3jwONQbOt8F/oMYkna36QC+OUeCuhWaX5o/JrjkcTMfMk5Jluou2IIDw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XPdCq7EN; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc6c47cf679so801533276.0 for ; Wed, 31 Jan 2024 05:49:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706708988; x=1707313788; darn=vger.kernel.org; h=to:from:subject:mime-version:message-id:date:from:to:cc:subject :date:message-id:reply-to; bh=TRAmZ7zfR7GIpS+aIsz6syaxM6Q4TrPavG5oF05xWJs=; b=XPdCq7ENDKCH03IYWpJWWzcDbG4raKx2XumxlXaJJevXX00oTKTWX3gHAWyUBXtzIU 1Oy2YV4FOV+GXeGSYj4Kbng5P2avdJbN2eytRr4Ed1NK1DLu8DbJIngkCqDrl8KijmUz 9PMilDUg/C0CvHP0K/dHPFk6+UxS88zyGm1CiYCpuPFOKYzeLvBxYUJQ1kJoFaLAg/Z1 BpXMDur1nrdknuhK7eg7kc4OHg+CevQSNPA3glys5LDOMbnLXKAPg7kKV0NV7q/yazsP bhiAbj0mQO5Yp2QGCmPbHXzkX6/x4H0JU8FrPAXTwYnEfQyPbegJC//qxB6S4rgaiOMV Mffw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706708988; x=1707313788; h=to:from:subject:mime-version:message-id:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=TRAmZ7zfR7GIpS+aIsz6syaxM6Q4TrPavG5oF05xWJs=; b=m8wew3YKwhIS04doYFOtwdokot1HD1qbkq3QmBJSPcRKyoIzAlhQW9NjW9aaRsJKIO FkgRf26Ngyhpvpbz53P+6yanHNpdSWZGHjq9evVb8bY/e8zfdL2UQpsd2xfBIoMeY+S1 3OFZvesSXVaiHNKalCzgLwHrrZe97X+8NVZ6noeA3BYPYL93DRRI1uPffkavG3+JTrDU 5M8MEZpkIV//Eg4YTkI7Rw7ST190UeT5rsZ33+kegI7AYkiTsM2xabnTbs3subGO3Skx rpTrb3De0TE/HGwix4IwSPqebHyK2Y6Q9YpHzJQ2gGN4cxPdk//FjMOdYzKSfePD0Zi9 sOCw== X-Gm-Message-State: AOJu0YzO8X9011nmM3JnscCDm4H4hKj0KvUWxs/Gc5IdJIlWXqznZpA5 MHc8aZFlcT7GhaqZpj1MOfuY4Z7rzdhUoXiYCQ2GXvJ5g088B+DiDiRLggqcCL9dMeyR4/sePLc TALlQyg== X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:d0ab:43c6:7969:62ab]) (user=irogers job=sendgmr) by 2002:a05:6902:1793:b0:dc6:519b:5425 with SMTP id ca19-20020a056902179300b00dc6519b5425mr468454ybb.11.1706708988337; Wed, 31 Jan 2024 05:49:48 -0800 (PST) Date: Wed, 31 Jan 2024 05:49:38 -0800 Message-Id: <20240131134940.593788-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v2 1/3] perf tsc: Add missing newlines to debug statements From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, tchen168@asu.edu, Michael Petlan X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789614105658470337 X-GMAIL-MSGID: 1789614105658470337 It is assumed that debug statements always print a newline, fix two missing ones. Signed-off-by: Ian Rogers Reviewed-by: James Clark --- This patch was inspired by bad debug output in: https://lore.kernel.org/linux-perf-users/CAGjhMsg_bVKJ_zfsLUR32+oZwGDr3OiBHV_BJ3QtFjyKAs7Sgg@mail.gmail.com/ --- tools/perf/arch/x86/util/tsc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/arch/x86/util/tsc.c b/tools/perf/arch/x86/util/tsc.c index 9b99f48b923c..e2d6cfe21057 100644 --- a/tools/perf/arch/x86/util/tsc.c +++ b/tools/perf/arch/x86/util/tsc.c @@ -33,7 +33,7 @@ static double cpuinfo_tsc_freq(void) cpuinfo = fopen("/proc/cpuinfo", "r"); if (!cpuinfo) { - pr_err("Failed to read /proc/cpuinfo for TSC frequency"); + pr_err("Failed to read /proc/cpuinfo for TSC frequency\n"); return NAN; } while (getline(&line, &len, cpuinfo) > 0) { @@ -48,7 +48,7 @@ static double cpuinfo_tsc_freq(void) } out: if (fpclassify(result) == FP_ZERO) - pr_err("Failed to find TSC frequency in /proc/cpuinfo"); + pr_err("Failed to find TSC frequency in /proc/cpuinfo\n"); free(line); fclose(cpuinfo); From patchwork Wed Jan 31 13:49:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 194756 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1901762dyb; Wed, 31 Jan 2024 05:56:43 -0800 (PST) X-Google-Smtp-Source: AGHT+IHxFOiQ7IPvvRHfPrG3Ac+iV65G4C4CtV8/RYiybaZXrB+qxZJ/T+ghoRJOHdHLtrPCXQYg X-Received: by 2002:a2e:9653:0:b0:2cf:1ad1:143a with SMTP id z19-20020a2e9653000000b002cf1ad1143amr1213361ljh.28.1706709403526; Wed, 31 Jan 2024 05:56:43 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706709403; cv=pass; d=google.com; s=arc-20160816; b=iiqVDEv0SqChDKzaOm51FImZaChVP1JZ77z4a6BqzBn7GaLc/fAX9XZ7rjERtb2kyG zu0/WevkBwTFbt0Mv80evzHUFS0YDU6Tm17wBnVxJ1uQQOJdOL4wrPwoXTyOWlGcJX/g SZnkWBEtgPJFrMQ27+pS63Enyl9lzYSlqUkdDeMiZf1bGGxQurHeibkOUa1tamFqAD4c HbHxUW8kYbs602mPJh4aSy5o3mh9GTqC+UjMz/Phfm/lc72fvofv1tWzHW5H+jkjTjLi QO6hLrVzLMpJldrdv9J93dcFxl29OSIJpIwPHhWQxTT67GvrZKAsSC+QrIHB4yrmn2Nr 8tFQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=to:from:subject:references:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:in-reply-to:date :dkim-signature; bh=G1xH5pJjJI+heTB8iMmEvxa0X+0fNgErrr9gRIyth2g=; fh=fy+13ThUHvOybXPlx2Ll8lxwc1Z5we2C43dRgwlUhsU=; b=Mdkw7Fd6i1XluEwSAPqYleX01RN+wTCs2PseYycXM1/erhfBVlryyEj7057yhFdy1K ArGaAEFMzM4fSXp5LuzOVAk4IHubUWERp7b/cqSQ586t2z/CFPqq+lF1uW7fYIazQLAK ydenpICUixkkVFm6kWCQ66yeYtlVl1aqA5hPnmUEVUUazx7oeVA11MfRTRMVO5PX+hBS KkhzdyZ7/2uSkpWlyh3u1nKAbGk16uEfQKO2cSd4Pa8rYZP/I1DdHsTmPsoVcf3KvGtZ Vbxil+o2iBiIG4krpN+qbcpRcoix8Y52gYFQKxpkGRTZUQppaLX/UUAyU0a9b0cvxSNU kzTg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=pZKdtYYw; arc=pass (i=1 spf=pass spfdomain=flex--irogers.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-kernel+bounces-46533-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-46533-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com X-Forwarded-Encrypted: i=1; AJvYcCXbYNK3uA9h0BUK89ASVd1SITE1ImyAngS7YzyV1/vSoZ3AO0ld5Z4xT13ngvAxDS9MPT1ueuRP5PxNvB8ONoWruSmfoQ== Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id hh1-20020a170906a94100b00a359547df1fsi3562234ejb.1008.2024.01.31.05.56.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Jan 2024 05:56:43 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-46533-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=pZKdtYYw; arc=pass (i=1 spf=pass spfdomain=flex--irogers.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-kernel+bounces-46533-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-46533-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 754421F2BDC0 for ; Wed, 31 Jan 2024 13:50:26 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8403E81ACB; Wed, 31 Jan 2024 13:49:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="pZKdtYYw" Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0B6E780C02 for ; Wed, 31 Jan 2024 13:49:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706708993; cv=none; b=fIudsITMwy2y6KOrmHCqs9rIV/xpp+OuWrskR6CGfnvuJAO/M/eKs7zwCBjEq+CQsgkAN8feZsz72SpSL0JUkImnKlolJmbkebSash++yxGzXKPyJDlJhAVQ+to4UfN4UskZ/7hzOTuiCzedTi/nHZU+kxRq5X6L6eN7jGU3O+4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706708993; c=relaxed/simple; bh=ukGaeKDWoBnc0AIrKBff3Y2VDwj+LfqCpXcFKMzADh0=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=SHvbYQew1UixxJbnhw8rRUgsvbjHuSCroQejMvSeKMgm4QlFiHzcgxCH1c/9ij2b73jFSLI049xmhvknIKTPAc7HpOs+clbUsuGtyGmuCyNKjNRMFYigd3NKJ9ICTPris75FAwrlBiTOiEINs0TNdihiQ/v+PJtWausL1VccAwI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=pZKdtYYw; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc6b2685ebeso157042276.1 for ; Wed, 31 Jan 2024 05:49:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706708991; x=1707313791; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=G1xH5pJjJI+heTB8iMmEvxa0X+0fNgErrr9gRIyth2g=; b=pZKdtYYwGGRsPiP08F15caI+c6LBZLallcC/2/vXbA9E854ELOwGizx/BqGJpW/z9H jjzDA3Rj2SnRORqR1kjejjt1e98pcbdFPlX4BpehqUhyUpl7DjaEmG74ZXY5Xxkb1mR/ k2gy9dxQEFZ/mUrxbiyjb8B/jEiKqCaic1ec5IqxXbnDUvREWF3TwYJcvzUQZExzRaD3 jXZMnxqRjas3XTUE2LqBrtRAFcztbN4y+GPZMcrscpOyp0s9+xrn7CM6077+fKMHzttG 3Zc5WduNLC9TMcgvsYmwKfcnSTswtcLXrHScHGkJHA7+eKvLwFr7Hw5KbKWkuaMixfp6 3z1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706708991; x=1707313791; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=G1xH5pJjJI+heTB8iMmEvxa0X+0fNgErrr9gRIyth2g=; b=CDhM0hLyAnG0PbfeSk6ZuOjMV/4SK4Zb8vNW897VMzQ44P/nbd36tvMV/f8rizGcjZ fbWCW0F+3jyfzoFNWiLvbkHY6RE8+eZkowzO2p8c8M7xAtxp2AXHxpnBClbsQvQehbf9 LficYNPXup0FJkvNb5O+z7aezlxCEk2ABYHsrJW5D90ubHoPrHS1CGjUWkdC7X1tIGnX VNFAM6Gt22/KvezXJ7iaADMav6JXTgEIJDIm9MNB4+lIDjUcsgJopKr4d2XqcuJejCWz x2whJnI9HxA9Ju9AFpK3t990u9dJI9g2+ODHAxed7GwwMsiXOzZxk7+/9LVNoptLPKXI ImnA== X-Gm-Message-State: AOJu0Yz2c9FOnzVwxWFnA4XPJTMZcrAulivO+OlQM0xLKJPLJE33Uli7 x/upU8+1t/89La/MszobD/c7Flpxlh+u3u7BGmYCPNOZh+Ms9rTRi4a8B1e4b0vRa2vlecNdOTK UABbfNQ== X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:d0ab:43c6:7969:62ab]) (user=irogers job=sendgmr) by 2002:a25:820d:0:b0:dc6:cafd:dce5 with SMTP id q13-20020a25820d000000b00dc6cafddce5mr165356ybk.12.1706708991052; Wed, 31 Jan 2024 05:49:51 -0800 (PST) Date: Wed, 31 Jan 2024 05:49:39 -0800 In-Reply-To: <20240131134940.593788-1-irogers@google.com> Message-Id: <20240131134940.593788-2-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240131134940.593788-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v2 2/3] perf parse-events: Improve error location of terms cloned from an event From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, tchen168@asu.edu, Michael Petlan X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789614519161335287 X-GMAIL-MSGID: 1789614519161335287 A PMU event/alias will have a set of format terms that replace it when an event is parsed. The location of the terms is their position when parsed for the event/alias either from sysfs or json. This location is of little use when an event fails to parse as the error will be given in terms of the location in the string of events parsed not the json or sysfs string. Fix this by making the cloned terms location that of the event/alias. If a cloned term from an event/alias is invalid the bad format is hard to determine from the error string. Add the name of the bad format into the error string. Signed-off-by: Ian Rogers Reviewed-by: James Clark --- These fixes were inspired by the poor error output in: https://lore.kernel.org/linux-perf-users/alpine.LRH.2.20.2401300733310.11354@Diego/ --- tools/perf/util/pmu.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 355f813f960d..437386dedd5c 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -657,7 +657,7 @@ static int pmu_aliases_parse(struct perf_pmu *pmu) return 0; } -static int pmu_alias_terms(struct perf_pmu_alias *alias, struct list_head *terms) +static int pmu_alias_terms(struct perf_pmu_alias *alias, int err_loc, struct list_head *terms) { struct parse_events_term *term, *cloned; struct parse_events_terms clone_terms; @@ -675,6 +675,7 @@ static int pmu_alias_terms(struct perf_pmu_alias *alias, struct list_head *terms * which we don't want for implicit terms in aliases. */ cloned->weak = true; + cloned->err_term = cloned->err_val = err_loc; list_add_tail(&cloned->list, &clone_terms.terms); } list_splice_init(&clone_terms.terms, terms); @@ -1363,8 +1364,8 @@ static int pmu_config_term(const struct perf_pmu *pmu, parse_events_error__handle(err, term->err_val, asprintf(&err_str, - "value too big for format, maximum is %llu", - (unsigned long long)max_val) < 0 + "value too big for format (%s), maximum is %llu", + format->name, (unsigned long long)max_val) < 0 ? strdup("value too big for format") : err_str, NULL); @@ -1518,7 +1519,7 @@ int perf_pmu__check_alias(struct perf_pmu *pmu, struct parse_events_terms *head_ alias = pmu_find_alias(pmu, term); if (!alias) continue; - ret = pmu_alias_terms(alias, &term->list); + ret = pmu_alias_terms(alias, term->err_term, &term->list); if (ret) { parse_events_error__handle(err, term->err_term, strdup("Failure to duplicate terms"), From patchwork Wed Jan 31 13:49:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 194755 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp1898669dyb; Wed, 31 Jan 2024 05:50:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IH/ofktf7mcYT8IP+3w9Djbokg7oeYrWYdXz3YqURuTQCvlFxwhWNEZTG8YC7A2PvSub8cq X-Received: by 2002:a05:6122:3981:b0:4bd:4bd0:d3d with SMTP id eq1-20020a056122398100b004bd4bd00d3dmr1404706vkb.7.1706709058811; Wed, 31 Jan 2024 05:50:58 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706709058; cv=pass; d=google.com; s=arc-20160816; b=oOOspuIxUleFfFsq63uYJ8kQBGXStAD6Ap2y9z62xV8l75l/0X4JuRbur+PxtgjOEi YtQ/qUtUxgU68Tz46kgt2OItdby+hnvhmKo5u4p3MC0i4YkrHpXBK9wwcoDmH9FdS4Gd /qYtXfX66I24WBbF+rPKOM9kTX9a+TVW8PBJeFvtaUXTGtA6w8PZX+ibTvG3h/JZJnCt A4n565aKqDKcxfLnxi6cXtVHWqZbTAZVoCpcuB2YlTVhqKAIn1TGhL3ZwX9HFwh3lfa9 NeTUs0WFIo9XaBDYxgy9h5+Y3wO4D0ug7C2GZofXT2QwySSjyFtoTv9Tg5ulGyeke7jk DWsg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=to:from:subject:references:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:in-reply-to:date :dkim-signature; bh=yKt68spgIYibNwkUCCwXitmo+vBc98KzSc/IhrrswsU=; fh=tbh8dwegmeFh+3Gc8tvqpIArlAV7qjnP3ui3GZNp6vo=; b=g4GKXhw6B2fEXjiV/wyTCCJEVIwFO5WGjJXQw2gWdkL11h03e+uU5Zx7U/11/yTfiq tuElzSNQtFd/PYf1uxvosS1hfNn4qW5C+pLJdbHvjlvh2mp998Tu35DILLrbMkr82P6y Ys9Q74YB2iNQsGyLaCdyxJ7vfkokFej0DSXZ7l7qn+6ARWhBUt77OZ174Qjfb6GQ6UtZ YxEL7t/iJxko6F/dLU+jm4D+vX7vDva741O3VKK4wwC/w3JhEfnpok4EoJYNneHvGrJg zeFQM0xGktXVuf7G9/Qdrwkh6V++I8/8o08SxXw6EDRxVBOz/eCttuX3tl+GfQ/1H3Og Sj6Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=DpDjeqEk; arc=pass (i=1 spf=pass spfdomain=flex--irogers.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-kernel+bounces-46534-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-46534-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com X-Forwarded-Encrypted: i=1; AJvYcCXdlbaBoQMHdCarFSHDr+YBP5TCsOdcuxcQ4sW6qLPBhxeDvDFFFixaEFL7x/2aP21rACBbIbhkvByQtP7tCDVzzUFxVQ== Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id bn13-20020a05620a2acd00b007838dfe7853si11485389qkb.307.2024.01.31.05.50.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Jan 2024 05:50:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-46534-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=DpDjeqEk; arc=pass (i=1 spf=pass spfdomain=flex--irogers.bounces.google.com dkim=pass dkdomain=google.com dmarc=pass fromdomain=google.com); spf=pass (google.com: domain of linux-kernel+bounces-46534-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-46534-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 9F3A01C29CBB for ; Wed, 31 Jan 2024 13:50:42 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 379DE82887; Wed, 31 Jan 2024 13:50:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="DpDjeqEk" Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5F0F481ADE for ; Wed, 31 Jan 2024 13:49:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706708996; cv=none; b=nEk8Vslxi/qplmyij4NTC3clvKfmh67YI1f9iFIQ6XR6tJMMuJqTl2Teff+YokUEE3uUEa/+IrBe+QdlRCFuI3TnRVMm+UZrzs4AwV/MSwnVIItd/eanfCe+158xjmgpPCW7j2hsWirOYySYnQalS63WCCcpnImIxLJgwIPhFfM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706708996; c=relaxed/simple; bh=YYa+Nj8QupDsrGP0rJ+e/R7X/4u9o5UtV/jMgIiLlcY=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=hjiZraTEeRb2uz2E/8ZAfAwFCBIh2t8UiIlYS4eHl3nZ8W+XvcUermCL1siFEaGLWEyL4vVrTlS7gPkt/xq3YJY44t9YwcxFj5qhaeOkxP1Yf85iE6mz1mWPkG4MRFL+kFqDKhqN4iMK7ToSc6Fag1fXEvb56xjUHJoqX83iwNI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=DpDjeqEk; arc=none smtp.client-ip=209.85.219.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dc6cd10fd4aso203042276.1 for ; Wed, 31 Jan 2024 05:49:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706708993; x=1707313793; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=yKt68spgIYibNwkUCCwXitmo+vBc98KzSc/IhrrswsU=; b=DpDjeqEkXKdtfKUkU8nxls2OkLtvKZ/pwqwkVrWRTmilt4uChR6rq7QLuf6ckuidJ7 p8K0p7nJTJ2Z8ujRKZ4NvjSVKXr1ripBK7JjaESggVvx4DsIrEVK/8WoVLdG2DmPEwfu 7m1pLD9boR+Z0PI2nd59gSHM2VpufRj9ulvgxOwTOOnfSCUlg1LY7JHD8DzgfoK5VjiY ZCLMlDt0O1jhYyjeE/9HFmDf507K/n2/G+8rybEfxyuqhe5dp/rOvMsU/ptQrbGTSxzT YiKl2J3e/kn5iFHOTXzB5iz0K8py4KZwNCDjFmXRKhYRYG0eIL44MozARvIbEFAMwOaz HDPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706708993; x=1707313793; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=yKt68spgIYibNwkUCCwXitmo+vBc98KzSc/IhrrswsU=; b=Bch8kBowYxtdShGXwWZ/TAGniwAi46K7aO51lBSgWhpwNA64FqxMvrvOvVWhTe6yLH IdpuURz/H2jWPj6XIZ/8pXShtFVdrCxJ2WbCulKWc+ySMaqL/dRiXLg1P+O9TSv1cW8C WeElpb9Jpfv8f1z3UPVsQBzg3aynPVeh+jxUYE4KCsiJqWPJT58W9k4GAtY2GID0AHlf O33K1n650x+dCDuL5AUFMSmHg8h3ZPRXQw3E9dkU5dxa/1nccNP2zVxakR9gHH6izrwu v/OFrY2wvpaVIbjlUbBfFbjEO+A04PDauNF1avo+ordkjC5Os/KnyKiIXjBTjQract7v FvCg== X-Gm-Message-State: AOJu0YyGmJmasBqJghpwoiu9gzvODus3WPrcZddavEsC2q48Wz6BYRyd zY0UdKGE3WonRx7L1KXI3t4BYyvjYesfBKz+B3UEjrzyhRBMUf3GF3q+EyAcpYrbyFGDvLuWvMh H8ZUA6w== X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:d0ab:43c6:7969:62ab]) (user=irogers job=sendgmr) by 2002:a05:6902:110f:b0:dc6:c9ff:58b7 with SMTP id o15-20020a056902110f00b00dc6c9ff58b7mr25000ybu.7.1706708993295; Wed, 31 Jan 2024 05:49:53 -0800 (PST) Date: Wed, 31 Jan 2024 05:49:40 -0800 In-Reply-To: <20240131134940.593788-1-irogers@google.com> Message-Id: <20240131134940.593788-3-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240131134940.593788-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v2 3/3] perf parse-events: Print all errors From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, tchen168@asu.edu, Michael Petlan X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789614157858036162 X-GMAIL-MSGID: 1789614157858036162 Prior to this patch the first and the last error encountered during parsing are printed. To see other errors verbose needs enabling. Unfortunately this can drop useful errors, in particular on terms. This patch changes the errors so that instead of the first and last all errors are recorded and printed, the underlying data structure is changed to a list. Before: ``` $ perf stat -e 'slots/edge=2/' true event syntax error: 'slots/edge=2/' \___ Bad event or PMU Unable to find PMU or event on a PMU of 'slots' Initial error: event syntax error: 'slots/edge=2/' \___ Cannot find PMU `slots'. Missing kernel support? Run 'perf list' for a list of valid events Usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events ``` After: ``` $ perf stat -e 'slots/edge=2/' true event syntax error: 'slots/edge=2/' \___ Bad event or PMU Unable to find PMU or event on a PMU of 'slots' event syntax error: 'slots/edge=2/' \___ value too big for format (edge), maximum is 1 event syntax error: 'slots/edge=2/' \___ Cannot find PMU `slots'. Missing kernel support? Run 'perf list' for a list of valid events Usage: perf stat [] [] -e, --event event selector. use 'perf list' to list available events ``` Signed-off-by: Ian Rogers Reviewed-by: James Clark --- Prompted by discussion: https://lore.kernel.org/linux-perf-users/9dd303cb-0455-d8ac-ce0c-f4a8320b787b@arm.com/ --- tools/perf/arch/x86/tests/hybrid.c | 5 +- tools/perf/tests/expand-cgroup.c | 3 +- tools/perf/tests/parse-events.c | 9 ++- tools/perf/util/parse-events.c | 92 ++++++++++++++++++------------ tools/perf/util/parse-events.h | 14 ++--- tools/perf/util/parse-events.y | 2 - 6 files changed, 67 insertions(+), 58 deletions(-) diff --git a/tools/perf/arch/x86/tests/hybrid.c b/tools/perf/arch/x86/tests/hybrid.c index 40f5d17fedab..e221ea104174 100644 --- a/tools/perf/arch/x86/tests/hybrid.c +++ b/tools/perf/arch/x86/tests/hybrid.c @@ -259,11 +259,10 @@ static int test_event(const struct evlist_test *e) parse_events_error__init(&err); ret = parse_events(evlist, e->name, &err); if (ret) { - pr_debug("failed to parse event '%s', err %d, str '%s'\n", - e->name, ret, err.str); + pr_debug("failed to parse event '%s', err %d\n", e->name, ret); parse_events_error__print(&err, e->name); ret = TEST_FAIL; - if (strstr(err.str, "can't access trace events")) + if (parse_events_error__contains(&err, "can't access trace events")) ret = TEST_SKIP; } else { ret = e->check(evlist); diff --git a/tools/perf/tests/expand-cgroup.c b/tools/perf/tests/expand-cgroup.c index 9c1a1f18db75..31966ff856f8 100644 --- a/tools/perf/tests/expand-cgroup.c +++ b/tools/perf/tests/expand-cgroup.c @@ -127,8 +127,7 @@ static int expand_group_events(void) parse_events_error__init(&err); ret = parse_events(evlist, event_str, &err); if (ret < 0) { - pr_debug("failed to parse event '%s', err %d, str '%s'\n", - event_str, ret, err.str); + pr_debug("failed to parse event '%s', err %d\n", event_str, ret); parse_events_error__print(&err, event_str); goto out; } diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index fbdf710d5eea..feb5727584d1 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -2506,11 +2506,10 @@ static int test_event(const struct evlist_test *e) parse_events_error__init(&err); ret = parse_events(evlist, e->name, &err); if (ret) { - pr_debug("failed to parse event '%s', err %d, str '%s'\n", - e->name, ret, err.str); + pr_debug("failed to parse event '%s', err %d\n", e->name, ret); parse_events_error__print(&err, e->name); ret = TEST_FAIL; - if (err.str && strstr(err.str, "can't access trace events")) + if (parse_events_error__contains(&err, "can't access trace events")) ret = TEST_SKIP; } else { ret = e->check(evlist); @@ -2535,8 +2534,8 @@ static int test_event_fake_pmu(const char *str) ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err, &perf_pmu__fake, /*warn_if_reordered=*/true); if (ret) { - pr_debug("failed to parse event '%s', err %d, str '%s'\n", - str, ret, err.str); + pr_debug("failed to parse event '%s', err %d\n", + str, ret); parse_events_error__print(&err, str); } diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 66eabcea4242..6f8b0fa17689 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -2181,50 +2181,53 @@ int parse_event(struct evlist *evlist, const char *str) return ret; } +struct parse_events_error_entry { + /** @list: The list the error is part of. */ + struct list_head list; + /** @idx: index in the parsed string */ + int idx; + /** @str: string to display at the index */ + char *str; + /** @help: optional help string */ + char *help; +}; + void parse_events_error__init(struct parse_events_error *err) { - bzero(err, sizeof(*err)); + INIT_LIST_HEAD(&err->list); } void parse_events_error__exit(struct parse_events_error *err) { - zfree(&err->str); - zfree(&err->help); - zfree(&err->first_str); - zfree(&err->first_help); + struct parse_events_error_entry *pos, *tmp; + + list_for_each_entry_safe(pos, tmp, &err->list, list) { + zfree(&pos->str); + zfree(&pos->help); + list_del_init(&pos->list); + free(pos); + } } void parse_events_error__handle(struct parse_events_error *err, int idx, char *str, char *help) { + struct parse_events_error_entry *entry; + if (WARN(!str || !err, "WARNING: failed to provide error string or struct\n")) goto out_free; - switch (err->num_errors) { - case 0: - err->idx = idx; - err->str = str; - err->help = help; - break; - case 1: - err->first_idx = err->idx; - err->idx = idx; - err->first_str = err->str; - err->str = str; - err->first_help = err->help; - err->help = help; - break; - default: - pr_debug("Multiple errors dropping message: %s (%s)\n", - err->str, err->help ?: ""); - free(err->str); - err->str = str; - free(err->help); - err->help = help; - break; + + entry = zalloc(sizeof(*entry)); + if (!entry) { + pr_err("Failed to allocate memory for event parsing error: %s (%s)\n", + str, help ?: ""); + goto out_free; } - err->num_errors++; + entry->idx = idx; + entry->str = str; + entry->help = help; + list_add(&entry->list, &err->list); return; - out_free: free(str); free(help); @@ -2294,19 +2297,34 @@ static void __parse_events_error__print(int err_idx, const char *err_str, } } -void parse_events_error__print(struct parse_events_error *err, +void parse_events_error__print(const struct parse_events_error *err, const char *event) { - if (!err->num_errors) - return; + struct parse_events_error_entry *pos; + bool first = true; + + list_for_each_entry(pos, &err->list, list) { + if (!first) + fputs("\n", stderr); + __parse_events_error__print(pos->idx, pos->str, pos->help, event); + first = false; + } +} - __parse_events_error__print(err->idx, err->str, err->help, event); +/* + * In the list of errors err, do any of the error strings (str) contain the + * given needle string? + */ +bool parse_events_error__contains(const struct parse_events_error *err, + const char *needle) +{ + struct parse_events_error_entry *pos; - if (err->num_errors > 1) { - fputs("\nInitial error:\n", stderr); - __parse_events_error__print(err->first_idx, err->first_str, - err->first_help, event); + list_for_each_entry(pos, &err->list, list) { + if (strstr(pos->str, needle) != NULL) + return true; } + return false; } #undef MAX_WIDTH diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 63c0a36a4bf1..809359e8544e 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -130,13 +130,8 @@ struct parse_events_term { }; struct parse_events_error { - int num_errors; /* number of errors encountered */ - int idx; /* index in the parsed string */ - char *str; /* string to display at the index */ - char *help; /* optional help string */ - int first_idx;/* as above, but for the first encountered error */ - char *first_str; - char *first_help; + /** @list: The head of a list of errors. */ + struct list_head list; }; /* A wrapper around a list of terms for the sake of better type safety. */ @@ -247,9 +242,10 @@ void parse_events_error__init(struct parse_events_error *err); void parse_events_error__exit(struct parse_events_error *err); void parse_events_error__handle(struct parse_events_error *err, int idx, char *str, char *help); -void parse_events_error__print(struct parse_events_error *err, +void parse_events_error__print(const struct parse_events_error *err, const char *event); - +bool parse_events_error__contains(const struct parse_events_error *err, + const char *needle); #ifdef HAVE_LIBELF_SUPPORT /* * If the probe point starts with '%', diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index de098caf0c1c..d70f5d84af92 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -536,8 +536,6 @@ tracepoint_name opt_event_config list = alloc_list(); if (!list) YYNOMEM; - if (error) - error->idx = @1.first_column; err = parse_events_add_tracepoint(list, &parse_state->idx, $1.sys, $1.event, error, $2, &@1);