From nobody Wed Dec 24 19:58:45 2025 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 EB2C7C8D2 for ; Wed, 24 Jan 2024 04:30:21 +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=1706070623; cv=none; b=OTjSxqvcrds1hwL+bIDFn3p0xBdFJ5GpVNprOGaWP/jsSDpN/MxK5e3WFDeRT2/hVkBy6sIlXCpL6hQrCcF22IGgXCdedL2qBSUH9eSFeaj6tDSVsoQTsiBEQf+bHxuyTPhBq6XS/w8tHrJEYZn0m3ECTDOwwzW43HpSARkHPdY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706070623; c=relaxed/simple; bh=Vi/GfW1dMQPoGBuKzYbsciwSwEbn5gukZ6R2a6MtY+w=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=Eqph+cR3psER+fHjSdFcmh56CVkUP17Non6dTamOyG66vc8rz5xdsF80Gpnf0YooWXukHF4Uc8OR36i+q3g6bufIGb7gFyCMuDbymFgppSpFY7ysx3vVpH5Fbsd7EUPoOAekOf/hXD0n30Ce22MJ1EpPnCS9dZe9Tdd2KkqswsY= 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=ZKwuifcd; 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="ZKwuifcd" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-5f0fd486b9aso63562927b3.2 for ; Tue, 23 Jan 2024 20:30:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706070621; x=1706675421; 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=NGesi/lkn/z+ibscMuM5m5HKI16hb6v/aTcwmpsw9TE=; b=ZKwuifcd1sXYBpwthPqpMbGMO0e41n7mnUDZ2amFZvyquT1643vj4e4rrBRmICD3vK zXPU0gkOW6zZ7jAOShcWzT3B4jFEXUBMkQJ5oel7Tz5ZL6qbOE8SND+b6AEHI437NVxD quMteipk7AdAobMNh1lpnLFXMIZip9ztVhu067S4OyeCSYl4v3Ow0kfj8fYGPUq4jn8k tZJtINh6MhGnoeiuP0cGgsza2U+D/aMyRfmpL5+IrGrzbBkV5PgitNUrIceusAiKLawy St9+YX+ruz1/jqUvHxGf8mvymMecdQWVmCjz/6oW1F80rw9S6FTJgMWfnA/GpW3juacB a9vA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706070621; x=1706675421; 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=NGesi/lkn/z+ibscMuM5m5HKI16hb6v/aTcwmpsw9TE=; b=LqkF4VNDcYySPC6ujHQIxxn+iNd3FN4ymxBGHElGPP93NaJsT6GJkcJRwOHclvItdh lItHMGiv07gdKo9fHxwH8lU3KSKaQ1GUSZPOsLqLDEvgHl/Fl4H86iOSxQoB9JBxdZcv OxiWF9uBRh0gkaFd7r2gX+OP+UXFOqnOMzhbSZoZWm+FHjcUguOcviJtLncl7GJFEQC5 c6E73z2AulPUTJ8XmJNYb28vRDso4lD+k+8FAoNMR+ARjNYJGvyvFU3pVb+PmErdPTEU yV/eF5YnAqny2D6meEjg1DQu/QLn3CxYqGzayIksunH7fqhn1MIRs2DeVjrFgJ7jX8hw EXrg== X-Gm-Message-State: AOJu0YwKinBzuNPy/FMkCnIWvfY/1QKUcRSZTFZ18F02IfVhT5hP8uKI +j6wDCKPhSqzUU43x0xADf4sYydMu09QIkcKPCJr6Tbh6M5HTbZCfFFlhqbtp+/+91Lb3S8qWNR 6xONoWA== X-Google-Smtp-Source: AGHT+IFuyLICJEIzRyi+Jplw1i4utF9oYp3mAPPTFQaHlqHi3G4RBhbpQUYe7uRk+csKQHqIDFE1YEy6OGoA X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:b37:2438:2b2f:daae]) (user=irogers job=sendgmr) by 2002:a81:99d6:0:b0:5e6:1070:44e0 with SMTP id q205-20020a8199d6000000b005e6107044e0mr74539ywg.5.1706070621186; Tue, 23 Jan 2024 20:30:21 -0800 (PST) Date: Tue, 23 Jan 2024 20:30:11 -0800 In-Reply-To: <20240124043015.1388867-1-irogers@google.com> Message-Id: <20240124043015.1388867-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: <20240124043015.1388867-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v2 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 Wed Dec 24 19:58:45 2025 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 8D3D3F517 for ; Wed, 24 Jan 2024 04:30:24 +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=1706070627; cv=none; b=TEcdWC9d4cFfV7zqNa0IeTWRkPM1ZBJ/zcDELSMI+9DT/nex56kagJlfhwbdX/l/rTkWgAbf+otFm7f2TqdGtqSJuaSU98p6+a0HYM3w7txDlm9K1uwpnwm/5OiEh3aB++rSPgOyTkkQomJbB8kFaZvo0bBWEPJq/zLlb4VGUNw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706070627; c=relaxed/simple; bh=/x0pLN4AZrgshsd1uVkHXcQbNy/qWtKjd1HbXlE1Je4=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=Y1Z2YPOf1oxZyBbyB4PkPFQmVF6CeAO8XVCsiAMSHqDMRzfyKccViiIAt46sybV5Ktqty4p9UzDook9R7y11MeapJlHpxxPHoRe2GM7f87njZGwIv4j5/6MiA93cjtYOgsumpOP9qA5h7aPSAKF7t2bUMj3Zza3kjm/msnG/w4c= 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=22kLcWZ8; 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="22kLcWZ8" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc253fee264so7924486276.2 for ; Tue, 23 Jan 2024 20:30:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706070623; x=1706675423; 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=Q1PPZc7nX3WDXiqPDbmPY9r4SsZGCS4JdvdVlbUVJro=; b=22kLcWZ822s3Di/aiaMTWdvFgOxpUFvdTYCFyAhQ+pCiWBEDv11MnrDJlDKY46dirF UNE0iUkb75g45BDNCR6F7jbG8BZs8MKe0/UI4Sx4QhmMAkJmRU70M4eFn2HTuMPq/VqI +pwghk6BgRSD2h9PGqhSgkBeYLx0F3HJNIxG5tYkLR10tBAFvaqOwSQtvb3ovx0hwLNf vrFy4i9WArmmywV1onONioZbw1EVRZi8hEkVQgeOlpXA2LILWSe6Ey0/bfziSrMwOmXI 0Cdy8sctK8Tc9ru3H1ouRv+g0UezqmTgJBpIHiB2vsv1PFwdL+oUp5NtaNZqH5wBVYxB l2FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706070623; x=1706675423; 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=Q1PPZc7nX3WDXiqPDbmPY9r4SsZGCS4JdvdVlbUVJro=; b=RRaoTH8D7bEDY3u3roB+kaHtGIiqragm3ubTXAai0pfogFqGcvYwkKnStrd/dtSF0f sCbz5L+q1SmpCi62fV6Le157vjcYnjB/lgBJxbSksTgwqxFmvbEhiUaUbdq8H25pIBoz 8f22u32+El9ZG2L1ccqljeD94+4mju6qDM/m0NMTcUpFNPB/Q2PPL2idqg71KO9jeuWB 51dRF2s4sTq6q7VqGEVjecIRcubA5pt/NBR3Uwpr+vIrXqORmhYEFZA1W2ipSo5pT62N 333W5qXj1R7g59fdsrOIHqXyCH6RqSig5YIYXMx8w0y3UH+8ZmKEbtw3pq/JepmVuBHf 4ZZQ== X-Gm-Message-State: AOJu0YxSc9JeuqBZocLFNHG3M4Naaxo6jCl4iD8orHKuwwJxiJXyA/11 UNf8taQssWoFCm93C2So4pZOhdAHKn4BuTIgi8mmGrRgVSRcDq2SlhIxa7Lx+F15/Ly0HToWf+d 71X8/2w== X-Google-Smtp-Source: AGHT+IE9RblLJkW7uluQyVdfq6qiOxWT74pH4V8B+SMTx0TCpDhniTfsmv1ax+8CYIbMPDhv1SrHLulUdPkd X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:b37:2438:2b2f:daae]) (user=irogers job=sendgmr) by 2002:a05:6902:d41:b0:dc2:1c5d:eed5 with SMTP id cs1-20020a0569020d4100b00dc21c5deed5mr122496ybb.12.1706070623553; Tue, 23 Jan 2024 20:30:23 -0800 (PST) Date: Tue, 23 Jan 2024 20:30:12 -0800 In-Reply-To: <20240124043015.1388867-1-irogers@google.com> Message-Id: <20240124043015.1388867-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: <20240124043015.1388867-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v2 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 Wed Dec 24 19:58:45 2025 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 CCEEAC8D2 for ; Wed, 24 Jan 2024 04:30:26 +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=1706070628; cv=none; b=IIv4czOrB/w/2jrs4aS59/tXBjfv0LcLVE4/fPZckMNaA1eemLWk9WxxZLOVrJoHVuDrG07p8sOWaj3WXvZA7zf/wQvcS4aFLhbuwXs9nZ6uTSZTLADEzQ6fs0mNiyD5Uh1ZEiv0czrUxD+xMidnkt7PsiyiIsGAC/E+rw56Gzw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706070628; c=relaxed/simple; bh=wAPN92LmutrG1J7tODQK7l+NELlZtviSaofT8hDTZX8=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=qqDn/i8di4BuHqO0ehuDjTBpv5RiV9hpTVEIoST6tdprjkzGPYOIf6hQn1+CssP8E1MR7GAOEWrm+sJljeLG3IX0UC7YN8IM6O3TyLj5/Jdh3g+xN6OcL9Z4sie/BqaZ/+TqffpZ/od2qRQjy11sMzRCEMaQ0E5J1s3pa3LQo7U= 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=2h5VVtCi; 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="2h5VVtCi" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-5e8d2c6903dso93622327b3.0 for ; Tue, 23 Jan 2024 20:30:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706070626; x=1706675426; 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=tZ4oZgP0u854CsY5ow/oTQ92HkoqG8y7HxBbY77RLxY=; b=2h5VVtCikY8ahjW8YJ56VzXPTIRlujumIx4cYrX7gyOhzHAEL6/IouAoZF4kSrDmc7 NMV53qNIBrOmw+MPnnJqJHDq41hxr4RV4ut/JJPXWASFjD3rNV/DVM7QK9csL9JP/pFy lJI6FUYJOALsN8LIRp7kzzh4vsKm5LelvmzKMs0LL8AzeZ9XqQm5LHKm9yQ4x4FWJbp4 KspVg83i27ebyk1Q4ssFW7FVTOFGOJYHEaPwPga8pC5snnwa6Tnmhin/G7B+QGzMcsUi iBizrhjsUifySqMMG8SMsFgoOpCo6TC+iZ8EeFs2w2A79t7pOkq9sahFhFgBHWaZpPPp GRdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706070626; x=1706675426; 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=tZ4oZgP0u854CsY5ow/oTQ92HkoqG8y7HxBbY77RLxY=; b=VmLzkCYoMMn11dZiQQ2zlj9bNCag+d1DLa6+xt0Tdh96S2CAuUeEkSsFiZ7jxN0IKd 7R5f9OKze3eaZ3ANOCVrnZZcSsKV79KRilXl8eVi4zEXYDu9r2gB9+B16nLfxK8TZF+I ZYgQVOzOTEzQb6toP5+gY8uuz0HpIA7Y3XAaSoCu+oZKOGiLYavcjg+W02jWDpI4u31y O48XTeg2tc0v3PrMHxPs/KJ5xCx4yZ/XOzXKOH1YDikDyG12cs8vb617g1yqeSfNHtaB pisXFKaZojnGVwaeAQ2ZSPjPgCs+4zIYor/gHMqGjAK4CwfM8+8PFLQmO2Dy03gvf9BE deTw== X-Gm-Message-State: AOJu0YwsP1VYjhKtmC7DT6esW7O22yRChrtTQ2+aqhlPY5FeMJV6jaaP Z10X57L/AKRf3dJAaYCXCeiiShZdTs50jSBdxJvABPci/JBCDtlFtvRzKyNiRxfAvkEPHIj3tnI rYQxu3g== X-Google-Smtp-Source: AGHT+IGz1evaAtu5wd1hbGCCuNwF5lnKKQm7avVw1zbNQRovesO9EjIJpUKhNkORobP3DGp98F/q3jJTkbX3 X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:b37:2438:2b2f:daae]) (user=irogers job=sendgmr) by 2002:a81:57d8:0:b0:5ff:9315:7579 with SMTP id l207-20020a8157d8000000b005ff93157579mr142336ywb.6.1706070625900; Tue, 23 Jan 2024 20:30:25 -0800 (PST) Date: Tue, 23 Jan 2024 20:30:13 -0800 In-Reply-To: <20240124043015.1388867-1-irogers@google.com> Message-Id: <20240124043015.1388867-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: <20240124043015.1388867-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v2 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 Wed Dec 24 19:58:45 2025 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 EF1EBF9EC for ; Wed, 24 Jan 2024 04:30:28 +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=1706070630; cv=none; b=XgI9Bdd600ctBn8YWgzdUzrWCTlRSwRBDKoCSEjfYovZQuXTP3sicgZw+W8+KOrU/GhYwXTiB0f9eI6aI0EDDwUM2QpW0ojhNDUXBY6gL0JxLuL8+3/Snbm+FOOkUgYWBYtxmHslb4fhYx/N/RDm0GfJPXy2IJdXlg8Hf+D5Byo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706070630; c=relaxed/simple; bh=/BVg/i0Vw7TAHNOWxEpu0gen2xUd569y8hw0+uU0hkA=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=o1yARNjYSXrKZovCM+M9DDO/5MqrcRkXpVXxgMh/6+H8B6LHRH8VfCszK91epsInHyVTQk3CDPJEBpm8Vv/gl/pLCD/oJV804vc7cUVy6KqVRdjSOOOpzumH38Pw/dbC5qVC3To3oSd8sqWviZVw1VmTUhUQdMDfQq0dnj010ws= 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=fvQJOOXh; 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="fvQJOOXh" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dbf1c3816a3so6012433276.1 for ; Tue, 23 Jan 2024 20:30:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706070628; x=1706675428; 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=fBCtMKasWa4R0QCHWLL2yjNv7OcjwMumfCEw+e3pMI0=; b=fvQJOOXh0tGyRzU3GoC2EnLnD6suVdBLp+XPUOpW5Dl9qrNQRsmiLhNk7k7WPU0bOM l2posPmK/7pcLpjNGtoep1rLCfyA74El0+LR+IOm4fROdiyZ/1nkhZ2GrL/UBejXm+M+ iqdhlc2ZII2ccZTGpw9f+D0ZUi6udwUDWvkJbyWD2BhXgwujRj8184QePEwPVF07shKN M6vhX9n8txVvoTI3CTRwc2FRz5UtyJpJuDJdEOQxsCG090K2tZp5AOZkvX3P/BdIi2GN l3sVdnjHSxTk05PMgfw9/wnrSzaNYozbaRZxSH7W/sm5WL2EFEwXHO4uMKeCf5xRu3VS hYmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706070628; x=1706675428; 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=fBCtMKasWa4R0QCHWLL2yjNv7OcjwMumfCEw+e3pMI0=; b=atdGCX9n/vlHeYMB3DUzqY0VRRn7zQIU1oG+LhKIYnX37949yWaI7Z1nj0TcpETzmj Ja7/CyCpq+VIHrPRkHBUxebtHgq2AD4xWdxaE94U/wY/bxlE+MZ9DHphd1WCCgHqyjaf JLvZF+xYZxb7lHwQqF0iZZU5cUfq038Hvgy1oekdttjB73fPIDggRzdu+fKGkUfzbwFk HV7uFlNggumCN2AdaPhgvu5hRB7xBfE4DMDd5Urzo4PxyvBZC79gFkZcKGI4VyZJLL7s QqcO//Cm3oyNittR/QwnMo5ntZM/8TmwNHbWAArMbzwX6vf5BBFrt7caWUUtdvwOewlX cX8Q== X-Gm-Message-State: AOJu0YyFNqQjG+nAwhAg1RoMsjwfAxwqELR3+ippsoUmg5CkHTF8AOQ4 f1DDWzEu1oCtYubopfFGkKqt0TPLtvPruOycQi+MM+6DZ2jAPHgc7ta1kdWM216mTEHK8Em2Vdw OiHbVTg== X-Google-Smtp-Source: AGHT+IGoMPmp+MhVqDbrO4qMt5itGZCzFu67BYoFkcT3YdDBKEXOJXjDZL+eU9woU/MV9jJyImaZTSOzERb/ X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:b37:2438:2b2f:daae]) (user=irogers job=sendgmr) by 2002:a05:6902:152:b0:dc2:3268:e9e7 with SMTP id p18-20020a056902015200b00dc23268e9e7mr14661ybh.10.1706070628081; Tue, 23 Jan 2024 20:30:28 -0800 (PST) Date: Tue, 23 Jan 2024 20:30:14 -0800 In-Reply-To: <20240124043015.1388867-1-irogers@google.com> Message-Id: <20240124043015.1388867-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: <20240124043015.1388867-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v2 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 Wed Dec 24 19:58:45 2025 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 911AA16423 for ; Wed, 24 Jan 2024 04:30:31 +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=1706070633; cv=none; b=KPz/BilwzaZObbKF3C5wwlAuA5IzJSvbBaYPQwttU5CPU/RyqYUnBTpAVwF9957CRf4DZ63WszJZKP7sXfC+tEO1qAL2/ceLbtwQQvWD4bCBkIzir9mlxy2PgjGewNzSGW+xndh8h/TneugKFJ9SivCjXXztEp7FrKJYNyz467I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706070633; c=relaxed/simple; bh=ktGpNrNpovCGFIfJRaOQi+xr2H2KIZoGJ+VlEz/s/Vo=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=RQ1Jtu8PIgMuT8XuFQ2syOSYv8YzWOG+qhG65cmOmw3WnTxOyZDgHXa1HiMo89Qtp97VT5jr3Yk0nIcSu1ZY7PhQLyGA8GepWs53kRHvPI71UFON86crGGPnhE/wzmDVzFb+BYDajtTeszqz79p8LSBIU8L9/2VSAsQRZ7IpbJQ= 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=w9rYoI0V; 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="w9rYoI0V" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc237543b74so6293675276.2 for ; Tue, 23 Jan 2024 20:30:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1706070630; x=1706675430; 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=+SLazpc0GwSHvqXNx6aE49dIdTieh1SbCFqUC1qSvB0=; b=w9rYoI0VC/n0+N1BXqN0wR5GvES+itnZSlgYVYhf+hBkztuWcrR/lLol7E3iCVOxxt Jsds3SjJfmUw+buZDuSaU2VTyOynjwqZRQnKo2UqXXyc8M/J70H8aPhbIyfMudziRUc2 6TyH3bwTESexsmpMfQIBQOW44bMKptUAfGH2xNTYUK9n/NVglx7gKzz2V4FChBXfTP0f rS1mnX114luPPooIVsC34tZFi7d52xGz4lECMt7clnyQb4Uz8uH/qGz/2X0iz+Q74viq 3uS5Wx0eK29slo4CF0Y4NfxvhN0eTI5VqpWK5he5bgzuZDLmbhBR9ftxELzoZdcXFrON h7RA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706070630; x=1706675430; 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=+SLazpc0GwSHvqXNx6aE49dIdTieh1SbCFqUC1qSvB0=; b=S7FICteoyopw5pXbT5NElQLDMBY7cvOaXz5KZaEgjxkbfmdr1B42PilIsttTG6x9f9 i7CNJQySl1BqCJxBeEqhQMAFnmAX3cZEy9KzsStvMYPsaYNjiXX7OCQgoL0Q7JL7p/WD VzRbfezLlsgVFOO6NgN+ureg+MwnQvc99c6ZXWl9iqgyalslzvPJR1z8mcBu0jHvzb8k 9QXSLhqOoFNGZh0NKusq9cdieq3A9tPOF6elCY2EFpUTnzFvP0LqPUQUd4H5SIEG6gv0 KuX0DzJMleafpxNGRqRuBsVwnmiwf39BO8ATOJ0jxHYbIREWYhPLLwYC/chfTT3B/nxa HdqQ== X-Gm-Message-State: AOJu0Yw6j0N5qf/CE3BYvoJ/vqkpnNhUajFI33UUhyoWmENDBYQucH1Q z0/GFzRExf8rxSEMThFdHlJUf3+fq5jETmgD8BAyJRmlnQKksNk7fpOiQ84fC5pI4QFP/u43V1e WMMg81w== X-Google-Smtp-Source: AGHT+IFvv+H1HQdQNamSO9zJ1+/XkhkUKTtdpjUKBjuWQ6XbshZZhXlGf3PQ0ItJoIwBVuKWxYoYJtDMGVWA X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:b37:2438:2b2f:daae]) (user=irogers job=sendgmr) by 2002:a25:d683:0:b0:dc2:57c9:b44d with SMTP id n125-20020a25d683000000b00dc257c9b44dmr14640ybg.8.1706070630536; Tue, 23 Jan 2024 20:30:30 -0800 (PST) Date: Tue, 23 Jan 2024 20:30:15 -0800 In-Reply-To: <20240124043015.1388867-1-irogers@google.com> Message-Id: <20240124043015.1388867-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: <20240124043015.1388867-1-irogers@google.com> X-Mailer: git-send-email 2.43.0.429.g432eaa2c6b-goog Subject: [PATCH v2 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..e5fa8d6f9eb1 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* 2> /dev/null | 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