From nobody Sun Feb 8 10:50:06 2026 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.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 14804145B30 for ; Tue, 23 Jan 2024 00:06:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705968376; cv=none; b=kQQpUFi417CKBx6uI0AdeEoz4Uk86TuVxk+QpCNC5LHsHOtwZXz/PcOklEGiSjpquYyhoES3ECk+nUmlTTpcU/bxdlAHO6rFeXjWQxvzVGW1ItGOI/Lu32hz0Ygkgmzn/8H5odarjgwZTJc4M5fe3wor685d5/NUC8+rCSuZ/Wo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705968376; c=relaxed/simple; bh=2Mcju2GLkOcjIP4VmHebW0u9y/4mznKlV2xvs1tiG0E=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=P0y/TGOh+hZB0NCh/L3A4iIXL/uHK0wCp8o9QucKOVlsPxN5K0ZYH8jXidWNK+OJiockrSFLkXmGRKNnW5XB4I/d1qOyi6/l7WO+9yMZlTO4U769zPRt7x1swnsGSKzbZ/X1k4UCeeDVvIGyrcB08AhS6k8Uxt0AnxU+v+iy3WQ= 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=pv40Lpp/; arc=none smtp.client-ip=209.85.128.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="pv40Lpp/" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-5ff93902762so57691247b3.2 for ; Mon, 22 Jan 2024 16:06:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1705968374; x=1706573174; 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=v3mpNhly1K/FvbNZbxoXHC3VDHfIYZfutn2fVhIXUKE=; b=pv40Lpp/n6yPN3Jz8ClUDW3t63AozyP4SRlbgC9zaXuXXJLf2XZvSs1BRiSRM3Aj8u s/exOBEDYj+40H/xlYV3PwZzoSdGTLlmPKKJ2Fkis4r1qUtQ/AtB2SQhB90VznqqE/Em NIR2VPswNSCQ/rKuhJpq7i/cXFlHamW9YJUXdBv1weHY9hh++yJEsPT/xrJxwHrbydT6 C45nTaq1UUNHF/M7qK7i1e43m4KtXuz9/2InR56vI0bxK0DpYJx/ipLvYFha97dF4dYC ZXlf8f9lZNaa+wg/qrcDOOCubN3EQe/ceuB6jNB9C0XaESgjnga/RN/JVyevbjOwKxj8 rOow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705968374; x=1706573174; 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=v3mpNhly1K/FvbNZbxoXHC3VDHfIYZfutn2fVhIXUKE=; b=njhszlAh6SAGGOcxZ0XFq87KJUbYrxrP3D5Fs8cgTUAGokPY2rlXPB1Za1NyAHbRR3 uQ1szkDLtcPEx9quolonI5GbBArSTmHYci76UBnZ/t1pGYsMDZh+KjMDxsyfI8Wsg6cD b6Uq2qCbP5ixgHgFm/YLIlm1DFxuDHviPDiFN8nDJeLjxSyQvJUA5oBVfPoZvZ2giCBL p1+0nNe7cVpxvYuKwMM5INEJpqK8Jl4YBgBUH9CnY1ULO0BcTFBjFoBzz5wFPDL1YBy/ 9hMGXX7teo+k9u/+lmxTY0bI8uO/lW+UL3h/j0AS8H4Z0hTX4fdE2cMB3xwt4axYjpqy 8ROA== X-Gm-Message-State: AOJu0YxQBjnciDuqqvhUejVpgYZZ0lH7CMwT8duVPIMu4gpS2iP/tiqz Te8hJOPZO221e2wc7uoYPhMqKLuTw+BIf2WAxCr4cbMIYq/zQY3061k3DBDvnIvr+ml71l8hhoO ncn3JHw== X-Google-Smtp-Source: AGHT+IES9bCsJfIiOtTOibh4+xJeDVvRe32AU7FcJxjrcp4vNbd38MEX2x54Xu2QtSgLJN/uWFW9WRACCM3P X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:6aba:f97a:4dc7:7e92]) (user=irogers job=sendgmr) by 2002:a81:4c88:0:b0:5d8:4274:bae2 with SMTP id z130-20020a814c88000000b005d84274bae2mr2333638ywa.6.1705968374141; Mon, 22 Jan 2024 16:06:14 -0800 (PST) Date: Mon, 22 Jan 2024 16:06:00 -0800 In-Reply-To: <20240123000604.1211486-1-irogers@google.com> Message-Id: <20240123000604.1211486-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: <20240123000604.1211486-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v1 1/5] perf list: Switch error message to pr_err From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Ravi Bangoria , Ross Zwisler , Athira Rajeev , Shirisha G , Kajol Jain , Kan Liang , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Using printf can interrupt perf list output, use pr_err which can respect debug settings and the debug file. Signed-off-by: Ian Rogers Acked-by: Namhyung Kim --- tools/perf/util/print-events.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/print-events.c b/tools/perf/util/print-events.c index b0fc48be623f..9e47712507cc 100644 --- a/tools/perf/util/print-events.c +++ b/tools/perf/util/print-events.c @@ -66,7 +66,7 @@ void print_tracepoint_events(const struct print_callbacks= *print_cb __maybe_unus =20 put_tracing_file(events_path); if (events_fd < 0) { - printf("Error: failed to open tracing events directory\n"); + pr_err("Error: failed to open tracing events directory\n"); return; } =20 --=20 2.43.0.429.g432eaa2c6b-goog From nobody Sun Feb 8 10:50:06 2026 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 47C951468F0 for ; Tue, 23 Jan 2024 00:06:17 +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=1705968379; cv=none; b=cX/1ocKZhVyTo3AetWoQKl2pnG8WJ5Fwex2e5uUFmbZ/INh+N5UVGDRLIssP5qqVRoNmjU1TATJ9PeNqmXks1WhdwatiDl798ydi/Oo6l0yt6gDNO526dqqAwCTFl1/2VK0BZyPzaIq1j3mVSV/2IW4GMy1Za5HpmAG80QseA/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705968379; c=relaxed/simple; bh=0g/j+czwZZZV0jyeUsBRsvNrDyJWksVMiiivTFDmwII=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=o4lYhbRH93OvtQWC+BnLVHZoeIGV3+DSLhDVT2AHVk1I1RRb5zyUlTHDH+48Lt3TKRci4AJ4yJmTwcYqH2z8KhuHO1F8Uqs2BwbcZunxbdNplXAjcTGUZp5cb/CN+CtomImccdOfGCfA/Nq1e3vdP+/IN2ouagnnAnUeo/tpKCw= 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=b4ubij68; 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="b4ubij68" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc21b7f41a1so4778377276.2 for ; Mon, 22 Jan 2024 16:06:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1705968376; x=1706573176; 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=dwOTolb94//HSm3DPw2galb3SBW/iq3bnifLRUsxAiA=; b=b4ubij68NPzkF6MY3Za9q5X3+bKIUGc18rpKpBTKKs+2COWOwBcVTNnXJShPNpQwMu nyhgnpKyzIcMrr9fWTGKIYpRXy1lmzxV1foqyo54bZEkx8tX68+SDnpzwYIcdR3mVBfa AvhN7gE4rra1om/Ql1NkDttHuhui7wXTWoYaKG5vLbuBInEmbSm7AWkKRuMPI/7kAFxl rDzWpdPx7t1QpIBfGmwEP4PkJk7Q1IkHTGU5ytUFPMrZPYSnVvh6mHpoN1LDcfbRBFnn oAo2zqjePkEa0lpZtuOzjJVHGRhriFtKX68f0rGzHNQaBEYnwzWTmi/hbdtRHuvtD6Lo mJOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705968376; x=1706573176; 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=dwOTolb94//HSm3DPw2galb3SBW/iq3bnifLRUsxAiA=; b=j3nKHqFTh6ljq9hN0x1JWsvFmmLNhYambadlGtoBRFIGvJT4Aie8RzWW5p+vcPDbAp Ueylu9tqocXJIJBV8LNUHFeBKHU+9S3DeQgQMqEMOrggTnSwrHgDdMUHaD7J/PPPsHuZ lJ9EAGIvIfNxFGod2jqWInQWBvd602RCr/uzCa323HFSbOoCntfn+QzEyNG1qAf5ik+a DvUZsENdOPGF51dqdvU6erCijYV1HkYV+aKBWyPqct/yYza9d398UbMLPpSrkwqPZGqj WO4X4LFS4y1JcpnFFGc0zwFeI6L0gzCs0lWUOmIYOD1DW0qk2QBRbiwNHCdnA+XTo62z JI/A== X-Gm-Message-State: AOJu0Ywb7kW3dGYjSVBYVxNFFHXdIz07y5qiQxiNq9eEoBE9jbC+7HQN sB45aBEIAJ8KaPSPFPyu7SwlxDu27sRxKaX178HVq4ITVE4aw6cCoHbwG4S1HBQuBrnCxD0c8YE 5Ap4abQ== X-Google-Smtp-Source: AGHT+IHjfcVREUikq2EhJOVMgG2aOJ8fkYgq/0NXCdElTxfM9ARVkN1aIBFVWXyZn7a7giRwrG2WqwFPaEKr X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:6aba:f97a:4dc7:7e92]) (user=irogers job=sendgmr) by 2002:a25:df84:0:b0:dc2:6605:f6ba with SMTP id w126-20020a25df84000000b00dc26605f6bamr370734ybg.2.1705968376320; Mon, 22 Jan 2024 16:06:16 -0800 (PST) Date: Mon, 22 Jan 2024 16:06:01 -0800 In-Reply-To: <20240123000604.1211486-1-irogers@google.com> Message-Id: <20240123000604.1211486-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: <20240123000604.1211486-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v1 2/5] perf list: Add output file option From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Ravi Bangoria , Ross Zwisler , Athira Rajeev , Shirisha G , Kajol Jain , Kan Liang , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add an option to write the perf list output to a specific file. This can avoid issues with debug output being written into the output stream. Signed-off-by: Ian Rogers Acked-by: Namhyung Kim --- tools/perf/Documentation/perf-list.txt | 4 + tools/perf/builtin-list.c | 211 +++++++++++++++---------- 2 files changed, 133 insertions(+), 82 deletions(-) diff --git a/tools/perf/Documentation/perf-list.txt b/tools/perf/Documentat= ion/perf-list.txt index 1b90575ee3c8..3b12595193c9 100644 --- a/tools/perf/Documentation/perf-list.txt +++ b/tools/perf/Documentation/perf-list.txt @@ -47,6 +47,10 @@ Print PMU events and metrics limited to the specific PMU= name. --json:: Output in JSON format. =20 +-o:: +--output=3D:: + Output file name. By default output is written to stdout. + [[EVENT_MODIFIERS]] EVENT MODIFIERS --------------- diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c index 61c2c96cc070..e27a1b1288c2 100644 --- a/tools/perf/builtin-list.c +++ b/tools/perf/builtin-list.c @@ -30,6 +30,8 @@ * functions. */ struct print_state { + /** @fp: File to write output to. */ + FILE *fp; /** * @pmu_glob: Optionally restrict PMU and metric matching to PMU or * debugfs subsystem name. @@ -66,13 +68,15 @@ static void default_print_start(void *ps) { struct print_state *print_state =3D ps; =20 - if (!print_state->name_only && pager_in_use()) - printf("\nList of pre-defined events (to be used in -e or -M):\n\n"); + if (!print_state->name_only && pager_in_use()) { + fprintf(print_state->fp, + "\nList of pre-defined events (to be used in -e or -M):\n\n"); + } } =20 static void default_print_end(void *print_state __maybe_unused) {} =20 -static void wordwrap(const char *s, int start, int max, int corr) +static void wordwrap(FILE *fp, const char *s, int start, int max, int corr) { int column =3D start; int n; @@ -82,10 +86,10 @@ static void wordwrap(const char *s, int start, int max,= int corr) int wlen =3D strcspn(s, " \t\n"); =20 if ((column + wlen >=3D max && column > start) || saw_newline) { - printf("\n%*s", start, ""); + fprintf(fp, "\n%*s", start, ""); column =3D start + corr; } - n =3D printf("%s%.*s", column > start ? " " : "", wlen, s); + n =3D fprintf(fp, "%s%.*s", column > start ? " " : "", wlen, s); if (n <=3D 0) break; saw_newline =3D s[wlen] =3D=3D '\n'; @@ -104,6 +108,7 @@ static void default_print_event(void *ps, const char *p= mu_name, const char *topi { struct print_state *print_state =3D ps; int pos; + FILE *fp =3D print_state->fp; =20 if (deprecated && !print_state->deprecated) return; @@ -119,30 +124,30 @@ static void default_print_event(void *ps, const char = *pmu_name, const char *topi =20 if (print_state->name_only) { if (event_alias && strlen(event_alias)) - printf("%s ", event_alias); + fprintf(fp, "%s ", event_alias); else - printf("%s ", event_name); + fprintf(fp, "%s ", event_name); return; } =20 if (strcmp(print_state->last_topic, topic ?: "")) { if (topic) - printf("\n%s:\n", topic); + fprintf(fp, "\n%s:\n", topic); zfree(&print_state->last_topic); print_state->last_topic =3D strdup(topic ?: ""); } =20 if (event_alias && strlen(event_alias)) - pos =3D printf(" %s OR %s", event_name, event_alias); + pos =3D fprintf(fp, " %s OR %s", event_name, event_alias); else - pos =3D printf(" %s", event_name); + pos =3D fprintf(fp, " %s", event_name); =20 if (!topic && event_type_desc) { for (; pos < 53; pos++) - putchar(' '); - printf("[%s]\n", event_type_desc); + fputc(' ', fp); + fprintf(fp, "[%s]\n", event_type_desc); } else - putchar('\n'); + fputc('\n', fp); =20 if (desc && print_state->desc) { char *desc_with_unit =3D NULL; @@ -155,22 +160,22 @@ static void default_print_event(void *ps, const char = *pmu_name, const char *topi ? "%s. Unit: %s" : "%s Unit: %s", desc, pmu_name); } - printf("%*s", 8, "["); - wordwrap(desc_len > 0 ? desc_with_unit : desc, 8, pager_get_columns(), 0= ); - printf("]\n"); + fprintf(fp, "%*s", 8, "["); + wordwrap(fp, desc_len > 0 ? desc_with_unit : desc, 8, pager_get_columns(= ), 0); + fprintf(fp, "]\n"); free(desc_with_unit); } long_desc =3D long_desc ?: desc; if (long_desc && print_state->long_desc) { - printf("%*s", 8, "["); - wordwrap(long_desc, 8, pager_get_columns(), 0); - printf("]\n"); + fprintf(fp, "%*s", 8, "["); + wordwrap(fp, long_desc, 8, pager_get_columns(), 0); + fprintf(fp, "]\n"); } =20 if (print_state->detailed && encoding_desc) { - printf("%*s", 8, ""); - wordwrap(encoding_desc, 8, pager_get_columns(), 0); - putchar('\n'); + fprintf(fp, "%*s", 8, ""); + wordwrap(fp, encoding_desc, 8, pager_get_columns(), 0); + fputc('\n', fp); } } =20 @@ -184,6 +189,7 @@ static void default_print_metric(void *ps, const char *unit __maybe_unused) { struct print_state *print_state =3D ps; + FILE *fp =3D print_state->fp; =20 if (print_state->event_glob && (!print_state->metrics || !name || !strglobmatch(name, print_state->e= vent_glob)) && @@ -192,27 +198,27 @@ static void default_print_metric(void *ps, =20 if (!print_state->name_only && !print_state->last_metricgroups) { if (print_state->metricgroups) { - printf("\nMetric Groups:\n"); + fprintf(fp, "\nMetric Groups:\n"); if (!print_state->metrics) - putchar('\n'); + fputc('\n', fp); } else { - printf("\nMetrics:\n\n"); + fprintf(fp, "\nMetrics:\n\n"); } } if (!print_state->last_metricgroups || strcmp(print_state->last_metricgroups, group ?: "")) { if (group && print_state->metricgroups) { if (print_state->name_only) - printf("%s ", group); + fprintf(fp, "%s ", group); else if (print_state->metrics) { const char *gdesc =3D describe_metricgroup(group); =20 if (gdesc) - printf("\n%s: [%s]\n", group, gdesc); + fprintf(fp, "\n%s: [%s]\n", group, gdesc); else - printf("\n%s:\n", group); + fprintf(fp, "\n%s:\n", group); } else - printf("%s\n", group); + fprintf(fp, "%s\n", group); } zfree(&print_state->last_metricgroups); print_state->last_metricgroups =3D strdup(group ?: ""); @@ -223,53 +229,59 @@ static void default_print_metric(void *ps, if (print_state->name_only) { if (print_state->metrics && !strlist__has_entry(print_state->visited_metrics, name)) { - printf("%s ", name); + fprintf(fp, "%s ", name); strlist__add(print_state->visited_metrics, name); } return; } - printf(" %s\n", name); + fprintf(fp, " %s\n", name); =20 if (desc && print_state->desc) { - printf("%*s", 8, "["); - wordwrap(desc, 8, pager_get_columns(), 0); - printf("]\n"); + fprintf(fp, "%*s", 8, "["); + wordwrap(fp, desc, 8, pager_get_columns(), 0); + fprintf(fp, "]\n"); } if (long_desc && print_state->long_desc) { - printf("%*s", 8, "["); - wordwrap(long_desc, 8, pager_get_columns(), 0); - printf("]\n"); + fprintf(fp, "%*s", 8, "["); + wordwrap(fp, long_desc, 8, pager_get_columns(), 0); + fprintf(fp, "]\n"); } if (expr && print_state->detailed) { - printf("%*s", 8, "["); - wordwrap(expr, 8, pager_get_columns(), 0); - printf("]\n"); + fprintf(fp, "%*s", 8, "["); + wordwrap(fp, expr, 8, pager_get_columns(), 0); + fprintf(fp, "]\n"); } if (threshold && print_state->detailed) { - printf("%*s", 8, "["); - wordwrap(threshold, 8, pager_get_columns(), 0); - printf("]\n"); + fprintf(fp, "%*s", 8, "["); + wordwrap(fp, threshold, 8, pager_get_columns(), 0); + fprintf(fp, "]\n"); } } =20 struct json_print_state { + /** @fp: File to write output to. */ + FILE *fp; /** Should a separator be printed prior to the next item? */ bool need_sep; }; =20 -static void json_print_start(void *print_state __maybe_unused) +static void json_print_start(void *ps) { - printf("[\n"); + struct json_print_state *print_state =3D ps; + FILE *fp =3D print_state->fp; + + fprintf(fp, "[\n"); } =20 static void json_print_end(void *ps) { struct json_print_state *print_state =3D ps; + FILE *fp =3D print_state->fp; =20 - printf("%s]\n", print_state->need_sep ? "\n" : ""); + fprintf(fp, "%s]\n", print_state->need_sep ? "\n" : ""); } =20 -static void fix_escape_printf(struct strbuf *buf, const char *fmt, ...) +static void fix_escape_fprintf(FILE *fp, struct strbuf *buf, const char *f= mt, ...) { va_list args; =20 @@ -318,7 +330,7 @@ static void fix_escape_printf(struct strbuf *buf, const= char *fmt, ...) } } va_end(args); - fputs(buf->buf, stdout); + fputs(buf->buf, fp); } =20 static void json_print_event(void *ps, const char *pmu_name, const char *t= opic, @@ -330,60 +342,71 @@ static void json_print_event(void *ps, const char *pm= u_name, const char *topic, { struct json_print_state *print_state =3D ps; bool need_sep =3D false; + FILE *fp =3D print_state->fp; struct strbuf buf; =20 strbuf_init(&buf, 0); - printf("%s{\n", print_state->need_sep ? ",\n" : ""); + fprintf(fp, "%s{\n", print_state->need_sep ? ",\n" : ""); print_state->need_sep =3D true; if (pmu_name) { - fix_escape_printf(&buf, "\t\"Unit\": \"%S\"", pmu_name); + fix_escape_fprintf(fp, &buf, "\t\"Unit\": \"%S\"", pmu_name); need_sep =3D true; } if (topic) { - fix_escape_printf(&buf, "%s\t\"Topic\": \"%S\"", need_sep ? ",\n" : "", = topic); + fix_escape_fprintf(fp, &buf, "%s\t\"Topic\": \"%S\"", + need_sep ? ",\n" : "", + topic); need_sep =3D true; } if (event_name) { - fix_escape_printf(&buf, "%s\t\"EventName\": \"%S\"", need_sep ? ",\n" : = "", - event_name); + fix_escape_fprintf(fp, &buf, "%s\t\"EventName\": \"%S\"", + need_sep ? ",\n" : "", + event_name); need_sep =3D true; } if (event_alias && strlen(event_alias)) { - fix_escape_printf(&buf, "%s\t\"EventAlias\": \"%S\"", need_sep ? ",\n" := "", - event_alias); + fix_escape_fprintf(fp, &buf, "%s\t\"EventAlias\": \"%S\"", + need_sep ? ",\n" : "", + event_alias); need_sep =3D true; } if (scale_unit && strlen(scale_unit)) { - fix_escape_printf(&buf, "%s\t\"ScaleUnit\": \"%S\"", need_sep ? ",\n" : = "", - scale_unit); + fix_escape_fprintf(fp, &buf, "%s\t\"ScaleUnit\": \"%S\"", + need_sep ? ",\n" : "", + scale_unit); need_sep =3D true; } if (event_type_desc) { - fix_escape_printf(&buf, "%s\t\"EventType\": \"%S\"", need_sep ? ",\n" : = "", - event_type_desc); + fix_escape_fprintf(fp, &buf, "%s\t\"EventType\": \"%S\"", + need_sep ? ",\n" : "", + event_type_desc); need_sep =3D true; } if (deprecated) { - fix_escape_printf(&buf, "%s\t\"Deprecated\": \"%S\"", need_sep ? ",\n" := "", - deprecated ? "1" : "0"); + fix_escape_fprintf(fp, &buf, "%s\t\"Deprecated\": \"%S\"", + need_sep ? ",\n" : "", + deprecated ? "1" : "0"); need_sep =3D true; } if (desc) { - fix_escape_printf(&buf, "%s\t\"BriefDescription\": \"%S\"", need_sep ? "= ,\n" : "", - desc); + fix_escape_fprintf(fp, &buf, "%s\t\"BriefDescription\": \"%S\"", + need_sep ? ",\n" : "", + desc); need_sep =3D true; } if (long_desc) { - fix_escape_printf(&buf, "%s\t\"PublicDescription\": \"%S\"", need_sep ? = ",\n" : "", - long_desc); + fix_escape_fprintf(fp, &buf, "%s\t\"PublicDescription\": \"%S\"", + need_sep ? ",\n" : "", + long_desc); need_sep =3D true; } if (encoding_desc) { - fix_escape_printf(&buf, "%s\t\"Encoding\": \"%S\"", need_sep ? ",\n" : "= ", - encoding_desc); + fix_escape_fprintf(fp, &buf, "%s\t\"Encoding\": \"%S\"", + need_sep ? ",\n" : "", + encoding_desc); need_sep =3D true; } - printf("%s}", need_sep ? "\n" : ""); + fprintf(fp, "%s}", need_sep ? "\n" : ""); strbuf_release(&buf); } =20 @@ -394,43 +417,53 @@ static void json_print_metric(void *ps __maybe_unused= , const char *group, { struct json_print_state *print_state =3D ps; bool need_sep =3D false; + FILE *fp =3D print_state->fp; struct strbuf buf; =20 strbuf_init(&buf, 0); - printf("%s{\n", print_state->need_sep ? ",\n" : ""); + fprintf(fp, "%s{\n", print_state->need_sep ? ",\n" : ""); print_state->need_sep =3D true; if (group) { - fix_escape_printf(&buf, "\t\"MetricGroup\": \"%S\"", group); + fix_escape_fprintf(fp, &buf, "\t\"MetricGroup\": \"%S\"", group); need_sep =3D true; } if (name) { - fix_escape_printf(&buf, "%s\t\"MetricName\": \"%S\"", need_sep ? ",\n" := "", name); + fix_escape_fprintf(fp, &buf, "%s\t\"MetricName\": \"%S\"", + need_sep ? ",\n" : "", + name); need_sep =3D true; } if (expr) { - fix_escape_printf(&buf, "%s\t\"MetricExpr\": \"%S\"", need_sep ? ",\n" := "", expr); + fix_escape_fprintf(fp, &buf, "%s\t\"MetricExpr\": \"%S\"", + need_sep ? ",\n" : "", + expr); need_sep =3D true; } if (threshold) { - fix_escape_printf(&buf, "%s\t\"MetricThreshold\": \"%S\"", need_sep ? ",= \n" : "", - threshold); + fix_escape_fprintf(fp, &buf, "%s\t\"MetricThreshold\": \"%S\"", + need_sep ? ",\n" : "", + threshold); need_sep =3D true; } if (unit) { - fix_escape_printf(&buf, "%s\t\"ScaleUnit\": \"%S\"", need_sep ? ",\n" : = "", unit); + fix_escape_fprintf(fp, &buf, "%s\t\"ScaleUnit\": \"%S\"", + need_sep ? ",\n" : "", + unit); need_sep =3D true; } if (desc) { - fix_escape_printf(&buf, "%s\t\"BriefDescription\": \"%S\"", need_sep ? "= ,\n" : "", - desc); + fix_escape_fprintf(fp, &buf, "%s\t\"BriefDescription\": \"%S\"", + need_sep ? ",\n" : "", + desc); need_sep =3D true; } if (long_desc) { - fix_escape_printf(&buf, "%s\t\"PublicDescription\": \"%S\"", need_sep ? = ",\n" : "", - long_desc); + fix_escape_fprintf(fp, &buf, "%s\t\"PublicDescription\": \"%S\"", + need_sep ? ",\n" : "", + long_desc); need_sep =3D true; } - printf("%s}", need_sep ? "\n" : ""); + fprintf(fp, "%s}", need_sep ? "\n" : ""); strbuf_release(&buf); } =20 @@ -449,8 +482,12 @@ static bool default_skip_duplicate_pmus(void *ps) int cmd_list(int argc, const char **argv) { int i, ret =3D 0; - struct print_state default_ps =3D {}; - struct print_state json_ps =3D {}; + struct print_state default_ps =3D { + .fp =3D stdout, + }; + struct print_state json_ps =3D { + .fp =3D stdout, + }; void *ps =3D &default_ps; struct print_callbacks print_cb =3D { .print_start =3D default_print_start, @@ -461,6 +498,7 @@ int cmd_list(int argc, const char **argv) }; const char *cputype =3D NULL; const char *unit_name =3D NULL; + const char *output_path =3D NULL; bool json =3D false; struct option list_options[] =3D { OPT_BOOLEAN(0, "raw-dump", &default_ps.name_only, "Dump raw events"), @@ -471,6 +509,7 @@ int cmd_list(int argc, const char **argv) "Print longer event descriptions."), OPT_BOOLEAN(0, "details", &default_ps.detailed, "Print information on the perf event names and expressions used int= ernally by events."), + OPT_STRING('o', "output", &output_path, "file", "output file name"), OPT_BOOLEAN(0, "deprecated", &default_ps.deprecated, "Print deprecated events."), OPT_STRING(0, "cputype", &cputype, "cpu type", @@ -497,6 +536,11 @@ int cmd_list(int argc, const char **argv) argc =3D parse_options(argc, argv, list_options, list_usage, PARSE_OPT_STOP_AT_NON_OPTION); =20 + if (output_path) { + default_ps.fp =3D fopen(output_path, "w"); + json_ps.fp =3D default_ps.fp; + } + setup_pager(); =20 if (!default_ps.name_only) @@ -618,5 +662,8 @@ int cmd_list(int argc, const char **argv) free(default_ps.last_topic); free(default_ps.last_metricgroups); strlist__delete(default_ps.visited_metrics); + if (output_path) + fclose(default_ps.fp); + return ret; } --=20 2.43.0.429.g432eaa2c6b-goog From nobody Sun Feb 8 10:50:06 2026 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.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 7753114690C for ; Tue, 23 Jan 2024 00:06:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705968380; cv=none; b=FC5yszm/DV/tuKA5BoSFkcSstQ1bKiQmwZkJTBLf2SohmACx1laHPCp31AdgNxdGOS9Lr4htE1BBAzOjHhRkEXTvPJderQABWW0h9FddBmIHAwBdbWGeVDLR0WtTPjP3x04urR8BvEog/gAYhT+hw2wf0ex8jm4wMvtKCY5QNnM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705968380; c=relaxed/simple; bh=QSzzoS14vis9dIlzEyaQe1hPLIfMWnirr9zB3yUAZLk=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=oB6CLx0pABUfqsYadZkbcKJlJqfK2qhZGgkGs2OmRpYr09cUMa+waPc87CjOe68mxo8Znysi2dWGrVhfZJBWz47bugNrlLYCYwEKMzIaFCm9xoy/VAEYKHDE32C1h5vB46hFSYnDO1LC1I7/4k+mwV0rjs1Dq38SDg4f3qaFwM8= 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=UpPC+nHC; arc=none smtp.client-ip=209.85.128.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="UpPC+nHC" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-5e73bd9079eso61260357b3.2 for ; Mon, 22 Jan 2024 16:06:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1705968378; x=1706573178; 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=FbGGf59DA5QM5LIqtEUDehzpONrkGjjAENgF7jFRKl8=; b=UpPC+nHCQdCOlLooBJLVq3GMj0wxnKG3qiQ6zlfCVZIFwzTFOSEW1bSV7kZYOttOK4 euGBwpgbe+ZzkNc6JImgQYqk+uQ837CIq75cqeU6EqmSkmVSnJZr/m+WxQn2KJr95KPB xijjmiPBPiaz8Vp4jHeB/BRxgPcCq/CtCEqxl7wTJkFNMfoP+hJ4IlhzyzgIIkS7hQpz g945mKYkZa+6DRZ+P+D17CiFlrzSvv0v89lEkA4KVJAcROd7CwZ+rQ4MPBV2w/2oCOsm xpc+hPzL3Y3/0NTfTvV9vBb76Q/k09RZEItKDjRi31allhCr6uLu1M5dG6Ioo323tp3a ddtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705968378; x=1706573178; 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=FbGGf59DA5QM5LIqtEUDehzpONrkGjjAENgF7jFRKl8=; b=EANp0bELlB1uURupFGFrbzkvy9GnuyGrqdtzIs/xbwCL6caG5tgICi9zRecmcZok74 8p5tpkSFRLcZBoGPvjhIAlAOGc780n4R23WUmYjQw+GEb1OFuxf/oxvNW/w4pTpaUiXI KRERJVDp0hEOOj48uNA5plSacJydRIUdomzr+elZTi2p2z+HGhb31Y4/6RCtdTo9I+aP mJOcTf+6Ovu63Dx4a55Kh1Psy1UNkolNhkBoAydTWHDbdOqsKYUVfaqE9aYb5R3SLDTn TNWEJkrgeSqSAKgq4DE1NcsGzZpXFtXNhtdcmOigiWhSj+cUnp26kllmOY5CpPTTZmlp vP7A== X-Gm-Message-State: AOJu0YwRZX/vyBA5lw7h4xSNxCFyk12mQdOt760C1DRQtUBuFWoW3tbc Jd/hVD2DAWxNKMxfjeTRvuUXVPcKRkgbfdb6eiLR5zShcSWN2lpxmdq0Sds5/TehwB7MpzbpX0H jE9S9bA== X-Google-Smtp-Source: AGHT+IFI9v9ErrrriPidwIImxOgMDIe4nG5RZVJxqXZFbvLOe/Avzwb/T5Juc7eC1YqaDNWzCNVV6o+VlJkw X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:6aba:f97a:4dc7:7e92]) (user=irogers job=sendgmr) by 2002:a81:5709:0:b0:5f8:bd56:176f with SMTP id l9-20020a815709000000b005f8bd56176fmr2362476ywb.2.1705968378456; Mon, 22 Jan 2024 16:06:18 -0800 (PST) Date: Mon, 22 Jan 2024 16:06:02 -0800 In-Reply-To: <20240123000604.1211486-1-irogers@google.com> Message-Id: <20240123000604.1211486-4-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240123000604.1211486-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v1 3/5] perf test: Workaround debug output in list test From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Ravi Bangoria , Ross Zwisler , Athira Rajeev , Shirisha G , Kajol Jain , Kan Liang , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Write the json output to a specific file to avoid debug output breaking it. Signed-off-by: Ian Rogers Acked-by: Namhyung Kim --- tools/perf/tests/shell/list.sh | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/tools/perf/tests/shell/list.sh b/tools/perf/tests/shell/list.sh index 22b004f2b23e..8a868ae64560 100755 --- a/tools/perf/tests/shell/list.sh +++ b/tools/perf/tests/shell/list.sh @@ -3,17 +3,32 @@ # SPDX-License-Identifier: GPL-2.0 =20 set -e -err=3D0 =20 shelldir=3D$(dirname "$0") # shellcheck source=3Dlib/setup_python.sh . "${shelldir}"/lib/setup_python.sh =20 +list_output=3D$(mktemp /tmp/__perf_test.list_output.json.XXXXX) + +cleanup() { + rm -f "${list_output}" + + trap - EXIT TERM INT +} + +trap_cleanup() { + cleanup + exit 1 +} +trap trap_cleanup EXIT TERM INT + test_list_json() { echo "Json output test" - perf list -j | $PYTHON -m json.tool + perf list -j -o "${list_output}" + $PYTHON -m json.tool "${list_output}" echo "Json output test [Success]" } =20 test_list_json -exit $err +cleanup +exit 0 --=20 2.43.0.429.g432eaa2c6b-goog From nobody Sun Feb 8 10:50:06 2026 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 A10CE1474A5 for ; Tue, 23 Jan 2024 00:06:21 +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=1705968383; cv=none; b=L2A9/8882Fr48P2m3Xve699v2SiUGEY0rujYjT5mr3U3FgNhkT6NrQ4EJL7XF9otvzoJ3vmZiFJf0YdoFHavk5pW824/ial71VxL+AFyt+EmbE2A9jGYG6Qy1avXlF3xgXlyFbY4gSRGXk1mUUTIVzGA4W2zV9GBeqh5HYxcZ18= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705968383; c=relaxed/simple; bh=IEvafp8noNqOSfOmOKDMTOQOH5/R9XopGqVio4nEPyc=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=ZfiY1Rupx6uuqsUdpxS5P5H2V7YJ2ROvv+XT9uBz/ti66RJthhKX8mzdDKz1+DAY7I8bcn2RIGx4/zOC+SoUfndIs8i+MI1aZNKbiy15NtrqAfgwN5KmeHpjuyqxlLlVW4G3sAj2ks1z4/GHHuzoq/YlaPBv4JHZMznHMgp+tWo= 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=gmr27no4; 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gmr27no4" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc24eb13fecso4685816276.0 for ; Mon, 22 Jan 2024 16:06:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1705968381; x=1706573181; 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=q79azOTXwSlimUfkUpJ2p/ZsQdIQmqJ7jFQrY/iqycY=; b=gmr27no4HkxKA6Oy5axRfTVGcB5pDb4hJOHV1Xf8ZPXxlh2gEmoozDSJo40O/9tzpd vg6ds6KjHZoVDxQgDs5sPUJnx5rWUxP11jck4JG9De9atfJo/8I+dX1InkRiVqFwFrzB Bk+Fr0hm8AqexjBS8lXDvtn0v6tz5GnMWXcpd+COIv4+ySgMTOlq/7ElmVK/aiy19LgO AxICSAwWVE/CycYPutxKp+p0gqhcIbNe4n8hWTW7Lr2+ikVoUd/ISM71i/gggjricoBB spbs6sP62Quo5WdTumzJe6n9TbKrmYBbW9hGTgWZlLWk0uMuz4sn2FJoh+DvKiCR20DC 2sXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705968381; x=1706573181; 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=q79azOTXwSlimUfkUpJ2p/ZsQdIQmqJ7jFQrY/iqycY=; b=JgdCsbvnutlwqNfVG345hvv4XAb+9wO29KdAHzYW4NjmKyqh91wu3zMbjH9tN3RL2+ hTmCl2nuX846aUoiCxmrvbMLfcoLLNKPyNMzkHsUEWzUvsjxar8hHt38voNKjH6kKJyj 4mbH0qoLPiissV03RgCUFJzn+lGzxchL4rXKDtWLFXVrsn/Xu6mPpgqKrKxAJqRS8pGh YV/vMu+afAX1z4C5aIYrBHq/WUdEroy6MfJ/M6Id6Plz0coDWm5lkiYTk5ehw3cHn9Is E3uRIRO+jdQt1WT8mdsy5cq6rShb0LbaAb+/Mfn+PxgIkoQtkDSl36elsZndRG0Q6Mgq IzEQ== X-Gm-Message-State: AOJu0Yx39bHVfT3VHIVfglUMc0Sax4Qnd3wb/3oCO6GS6xL9pAJD8SLz wQmtBewyXwn5ksiC3rSrNYoIsDsscAI+9azlcaUJy/WUVklHSLIyxLPxjdqCkQzZcXHioZg2AQ/ kOofrnA== X-Google-Smtp-Source: AGHT+IE//rM3tBa89THOE9itYLd9DpILsWAlR+A+hD2lh5TpNO7nBlKg5HNk8uzlJAmXvKyC9a3AmpIdfUGW X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:6aba:f97a:4dc7:7e92]) (user=irogers job=sendgmr) by 2002:a05:6902:352:b0:dc3:696e:ffae with SMTP id e18-20020a056902035200b00dc3696effaemr438504ybs.3.1705968380873; Mon, 22 Jan 2024 16:06:20 -0800 (PST) Date: Mon, 22 Jan 2024 16:06:03 -0800 In-Reply-To: <20240123000604.1211486-1-irogers@google.com> Message-Id: <20240123000604.1211486-5-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240123000604.1211486-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v1 4/5] perf test: Fix script test for python being disabled From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Ravi Bangoria , Ross Zwisler , Athira Rajeev , Shirisha G , Kajol Jain , Kan Liang , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" "grep -cv" can exit with an error code that causes the "set -e" to abort the script. Switch to using the grep exit code in the if condition to avoid this. Signed-off-by: Ian Rogers Acked-by: Namhyung Kim --- tools/perf/tests/shell/script.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/perf/tests/shell/script.sh b/tools/perf/tests/shell/scri= pt.sh index 5ae7bd0031a8..b43077dbaf98 100755 --- a/tools/perf/tests/shell/script.sh +++ b/tools/perf/tests/shell/script.sh @@ -36,8 +36,7 @@ test_db() echo "DB test" =20 # Check if python script is supported - libpython=3D$(perf version --build-options | grep python | grep -cv OFF) - if [ "${libpython}" !=3D "1" ] ; then + if perf version --build-options | grep python | grep -q OFF ; then echo "SKIP: python scripting is not supported" err=3D2 return --=20 2.43.0.429.g432eaa2c6b-goog From nobody Sun Feb 8 10:50:06 2026 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.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 086AF1474D5 for ; Tue, 23 Jan 2024 00:06:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705968385; cv=none; b=IHdZfi59TuEdhzRQHXk4OpwacUrtVPCxYR0QwZ9aZAnCIltDBMliEEIBHwRZDPTdyy0qmVDNXbf1cVlle7QQWFDOIHsdUdcynPTf+znsA+kWjhRKWWrf/49bIzyd6HO6St+wOywKIJj79jLkjYpRga1yWmB3pa/6VGoiC5cZ270= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705968385; c=relaxed/simple; bh=FCUxXLEqX6wbauWA6R/m3LLJXqQAbHJBX+CMyQoYlc0=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=PQvnfx+abIkwwt8q/+XDIZNozIfJ8GDGNuyooVModRQj7gWLLl9mkYftbMxJTqK0ZEvvdLekZOGCpmhg8jV1MGjMUivfnXLpG1Fm7+XAZEg3uzXrzpcWkMn4eotVNWiDRVZ7+WjaGH8f9btIiLv2jzYmCcLLEr2tCnItvtp+03E= 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=nH3pPjWn; arc=none smtp.client-ip=209.85.128.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="nH3pPjWn" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-5f325796097so65306467b3.1 for ; Mon, 22 Jan 2024 16:06:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1705968383; x=1706573183; 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=rdBgE5wIVLj6TuJkMA8Og1unwB8wxsizIZfcekxtMQI=; b=nH3pPjWnwi6JgAGKa/p8fnkmY3+bZgE8U7E6wBrSOJqAivLHmyX05OjLpEHvmVEG5k bl2iUPOlNsAbcYuOK2zY4cC3EdknIRdD7au0Re22vRhn0bo8xZS3R+u1EJM5zmzH1+Ej J/A2NMoaUQQMPxudflVyR8xDV8UoDWiA3jgsdD+q76uwCRkyi5iXfr/d92WDK0cgnUT9 BEhnNXYla4pvLBqTPl0SsIwQ7c6/GU7aBQpvUVsZFr6lIQEtWnAazK+DVr1X31fkPGWg ngOCy6O8jEE4g7iu+KlFsNs456iRmlC7Ri7CEEb3HiVA98w2ePzIt8VnyiP83/kHEEuZ tGGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705968383; x=1706573183; 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=rdBgE5wIVLj6TuJkMA8Og1unwB8wxsizIZfcekxtMQI=; b=AHiLcJt+qHgRAXANn+Dj5Ccf0izhJ3Ai8l6471j5aGC+ukRKeIg4bLcEGM/EtqSEuB 2Gxh8yyUMFGmeMZvhRPmsDGRNioLffqXIITMxUsLcjtiPEExPW2ABb/fgKaGomNkWSMZ zrBT68ibledBvqyX+2FV0C9M71JRQ8MCairmwfYmnmVSnnZxGglAMbB8WSL1UVYM2xlp vbfXvwVk0mZFa9SsVIfEWkonsQ8YCs9lEN6JkaQacl5e03JURn/HJZzClUhmQBJWVZKY 9yc3gzVNXZ55yu+b0/zWE94pipEar7Ezw1XExm4T2feUsAVoNhTAhvhZBTnLTF84YSCN xZDA== X-Gm-Message-State: AOJu0YwTSpdd2pyes230Y3V4Y81efCOHkt0xCc0t2/FzqwJEUhWvHVhv sJCiG3ZJk/zE3mMvOQmKYImOJn9Wa0QwuR+cQlnTvc5seqII7kvcwm7fJzpdn9utYewE9Lehmpz o6EUVmw== X-Google-Smtp-Source: AGHT+IF40DW7beEP6LTntZgRUa2pLjVbP44McWXuRjTan4RCDTY3XGmJ4cj9qSB8WXz9ayNmLE7L37EG0Uov X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:6aba:f97a:4dc7:7e92]) (user=irogers job=sendgmr) by 2002:a0d:cc52:0:b0:5ff:a9fa:2722 with SMTP id o79-20020a0dcc52000000b005ffa9fa2722mr2416222ywd.3.1705968383026; Mon, 22 Jan 2024 16:06:23 -0800 (PST) Date: Mon, 22 Jan 2024 16:06:04 -0800 In-Reply-To: <20240123000604.1211486-1-irogers@google.com> Message-Id: <20240123000604.1211486-6-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240123000604.1211486-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v1 5/5] perf test: Make daemon signal test less racy From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Ravi Bangoria , Ross Zwisler , Athira Rajeev , Shirisha G , Kajol Jain , Kan Liang , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The daemon signal test sends signals and then expects files to be written. It was observed on an Intel Alderlake that the signals were sent too quickly leading to the 3 expected files not appearing. To avoid this send the next signal only after the expected previous file has appeared. To avoid an infinite loop the number of retries is limited. Signed-off-by: Ian Rogers Acked-by: Namhyung Kim --- tools/perf/tests/shell/daemon.sh | 34 ++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/tools/perf/tests/shell/daemon.sh b/tools/perf/tests/shell/daem= on.sh index 4c598cfc5afa..de61e7898578 100755 --- a/tools/perf/tests/shell/daemon.sh +++ b/tools/perf/tests/shell/daemon.sh @@ -414,16 +414,30 @@ EOF # start daemon daemon_start ${config} test =20 - # send 2 signals - perf daemon signal --config ${config} --session test - perf daemon signal --config ${config} - - # stop daemon - daemon_exit ${config} - - # count is 2 perf.data for signals and 1 for perf record finished - count=3D`ls ${base}/session-test/*perf.data* | wc -l` - if [ ${count} -ne 3 ]; then + # send 2 signals then exit. Do this in a loop watching the number = of + # files to avoid races. If the loop retries more than 600 times th= en + # give up. + local retries=3D0 + local signals=3D0 + local success=3D0 + while [ ${retries} -lt 600 ] && [ ${success} -eq 0 ]; do + local files + files=3D`ls ${base}/session-test/*perf.data* | wc -l` + if [ ${signals} -eq 0 ]; then + perf daemon signal --config ${config} --session test + signals=3D1 + elif [ ${signals} -eq 1 ] && [ $files -ge 1 ]; then + perf daemon signal --config ${config} + signals=3D2 + elif [ ${signals} -eq 2 ] && [ $files -ge 2 ]; then + daemon_exit ${config} + signals=3D3 + elif [ ${signals} -eq 3 ] && [ $files -ge 3 ]; then + success=3D1 + fi + retries=3D$((${retries} +1)) + done + if [ ${success} -eq 0 ]; then error=3D1 echo "FAILED: perf data no generated" fi --=20 2.43.0.429.g432eaa2c6b-goog