From nobody Thu Apr 2 17:13:13 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.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 0409C2C1788 for ; Wed, 11 Feb 2026 01:52:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770774778; cv=none; b=QFEWKyZmSa5buzfUTtXBzElU4GbmXoAJH8z3JHANiaEg7ro0HYUMwMMZ5mRe/HK6Mprr7Pg25Rhr2fO/+2TDreiL4NQhYyU6Lvp5vaVDy6hMSt1jg5u98CqocoocB9+FjukY4ZjgPcV+phja119LTAtwzcnB/SqlPoyu/d5Mmbs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770774778; c=relaxed/simple; bh=Q8lcCWydMDVujK6/wN03/oysJCuCldnfOF+1TNRE1EE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=q5qEWVnbUCmIzVEevpplQe9L8Kahj+TusL65gmG0vpQct+/Br6W/r8VVA30gqbRHDUa5XpRDwuefohMMdlZwWOiDssOrUq6CT312diMBrflXs00a5S0H+0srKqmfatYrX6ADBEdWdv0qTP5On/MU6OpkK7w3GXveBgsxddqH75w= 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=W4mjrpKs; arc=none smtp.client-ip=74.125.82.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="W4mjrpKs" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b7ef896edcso23271337eec.0 for ; Tue, 10 Feb 2026 17:52:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1770774775; x=1771379575; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=UiHopQidaKUSI5zxqKq6dP/VKpRLeTJcWrFTpufmmAw=; b=W4mjrpKsu6wDztF088m97a6k2Zrtk0ZBEQlD4mjVKt3NcUCfE5bWGITlDDXfnsqzng LIwZyjHao20adz5fsyxKx8PjV67gxUSDTbe4BMEuM5zMrDw2JsaQimyfG8OKgfxcorN/ kIY5TVtc5g7Jj+la4dpEbUvMEwn4Zy67GFTneGqL9+o4Uirbe1+CWLnj6T96nrKjWXu5 NjSdq3fvjFTidUNb2vOH+otMaPplKR4Yg05ci8u+6a2TlmQgGATxduTJTNE1qanH4yvP jBarUkwQNFN9Lh4mnr+PdHh/QoKK8I76ZGDLK0ImR/l5hkcpZlX+2uH2HyltTdue9RxU AudQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770774775; x=1771379575; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=UiHopQidaKUSI5zxqKq6dP/VKpRLeTJcWrFTpufmmAw=; b=LUz4DyukZYrRUCmooCHp2f/gTW/uP1Aie0TzxGgMCK92KG7ZclnVL0jNZ50ZVi/zPx dBNvTXEWq0zvPblYnKcXHNTHFNovapX0eOjcCduYx8Su4ktqe9CNa4ACFxBLwaLjF09N OHRUE75ZKoptY0e04oZMxtuIgRTiYUqCeaiW0oKCmAODk0WkT9dkbIjjnGOlC75aHl/m In90lybLuxtJAXxe0YZq28TVWI3b/2ijQ28FbDyqQCluMrx5meonj8xrnlVxUJrA3Lkc q3QpdlVOWyGPNqaYmlaxYtVkGnezFSV7xm0Eiqvx61ag/6STKwpFzl1DsQ2f1l23jcKn p9tg== X-Forwarded-Encrypted: i=1; AJvYcCXcnRSMXE7LxKzTVmVh4MxZ86KP3Aj7kjD0ra9JEq4KqXLyaMy0akFaOLxkV2hQP7m7ULsimcvwxrfEWxI=@vger.kernel.org X-Gm-Message-State: AOJu0YyxLeMmvzkJXViTc977VPuQfMgkZ3EohbrbWU3GrIQP/0GG12AE /fZx1+Iu42r+MQmBRd7xu/70gGouYWBT7Fk4jN4XKnt297wNaMtSmBACoYIvhH1ThkXRz9Hfn13 s6maQVq18dQ== X-Received: from dybgj26.prod.google.com ([2002:a05:7301:11a:b0:2b7:d91:b4a2]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:fd07:b0:2ba:7b0b:e20a with SMTP id 5a478bee46e88-2ba9e16832bmr96757eec.37.1770774774552; Tue, 10 Feb 2026 17:52:54 -0800 (PST) Date: Tue, 10 Feb 2026 17:52:40 -0800 In-Reply-To: <20260211015242.2700218-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260211015242.2700218-1-irogers@google.com> X-Mailer: git-send-email 2.53.0.239.g8d8fc8a987-goog Message-ID: <20260211015242.2700218-4-irogers@google.com> Subject: [PATCH v1 3/5] perf json: Pipe mode --to-ctf support From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Derek Foreman , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In pipe mode the environment may not be fully initialized so be robust to fields being NULL. Add default handling of attr events, use the feature events to populate the ctf writer environment. Signed-off-by: Ian Rogers --- tools/perf/util/data-convert-bt.c | 54 +++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-conve= rt-bt.c index a22e9049ff30..ba1c8e48d495 100644 --- a/tools/perf/util/data-convert-bt.c +++ b/tools/perf/util/data-convert-bt.c @@ -35,6 +35,7 @@ #include "clockid.h" #include "util/sample.h" #include "util/time-utils.h" +#include "header.h" =20 #ifdef HAVE_LIBTRACEEVENT #include @@ -1338,7 +1339,8 @@ static void cleanup_events(struct perf_session *sessi= on) struct evsel_priv *priv; =20 priv =3D evsel->priv; - bt_ctf_event_class_put(priv->event_class); + if (priv) + bt_ctf_event_class_put(priv->event_class); zfree(&evsel->priv); } =20 @@ -1387,7 +1389,7 @@ static int ctf_writer__setup_env(struct ctf_writer *c= w, =20 #define ADD(__n, __v) \ do { \ - if (bt_ctf_writer_add_environment_field(writer, __n, __v)) \ + if (__v && bt_ctf_writer_add_environment_field(writer, __n, __v)) \ return -1; \ } while (0) =20 @@ -1403,6 +1405,52 @@ do { \ return 0; } =20 +static int process_feature_event(const struct perf_tool *tool, + struct perf_session *session, + union perf_event *event) +{ + struct convert *c =3D container_of(tool, struct convert, tool); + struct ctf_writer *cw =3D &c->writer; + struct perf_record_header_feature *fe =3D &event->feat; + + if (event->feat.feat_id < HEADER_LAST_FEATURE) { + int ret =3D perf_event__process_feature(session, event); + + if (ret) + return ret; + } + + switch (fe->feat_id) { + case HEADER_HOSTNAME: + if (session->header.env.hostname) { + return bt_ctf_writer_add_environment_field(cw->writer, "host", + session->header.env.hostname); + } + break; + case HEADER_OSRELEASE: + if (session->header.env.os_release) { + return bt_ctf_writer_add_environment_field(cw->writer, "release", + session->header.env.os_release); + } + break; + case HEADER_VERSION: + if (session->header.env.version) { + return bt_ctf_writer_add_environment_field(cw->writer, "version", + session->header.env.version); + } + break; + case HEADER_ARCH: + if (session->header.env.arch) { + return bt_ctf_writer_add_environment_field(cw->writer, "machine", + session->header.env.arch); + } + break; + default: + break; + } + return 0; +} + static int ctf_writer__setup_clock(struct ctf_writer *cw, struct perf_session *session, bool tod) @@ -1635,6 +1683,8 @@ int bt_convert__perf2ctf(const char *input, const cha= r *path, c.tool.tracing_data =3D perf_event__process_tracing_data; c.tool.build_id =3D perf_event__process_build_id; c.tool.namespaces =3D perf_event__process_namespaces; + c.tool.attr =3D perf_event__process_attr; + c.tool.feature =3D process_feature_event; c.tool.ordering_requires_timestamps =3D true; =20 if (opts->all) { --=20 2.53.0.239.g8d8fc8a987-goog