From nobody Tue May 7 08:28:19 2024 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0620FC433FE for ; Mon, 23 May 2022 21:30:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232023AbiEWV2d (ORCPT ); Mon, 23 May 2022 17:28:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53618 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231784AbiEWV2S (ORCPT ); Mon, 23 May 2022 17:28:18 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A8E61A30B0 for ; Mon, 23 May 2022 14:28:17 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id p16-20020a170902e75000b00161d96620c4so7289750plf.14 for ; Mon, 23 May 2022 14:28:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:message-id:mime-version:subject:from:to:cc; bh=P0dc/hsbLfI6NQ/lZ14Xz2MO6AZmT1SEz1e3p5QB+CU=; b=KVrjJMgWtZ9fFnNlRcHeO9QfwmEQXGUYiM0Ui1qQ4KnHJmna9s7rviKOq0Z8+DZFab WoTShCn3U+p969h7FMSarMxfW03rqebUa9FnCSrcgdW5FAMmQEy/3xslLTP+lVrtfbgh FpTeL6PuyYBVU3AWdfm8cEvFE+jEyAdqJC3w6L29HQZgvlGaSpZWHwpmTbj9ZOYlyZ6T 3l2q52e67phuNwBvOtTsUP2MlvAzBOqe0Z5kmRkSj/ohrgU4t5KFApNEFcIeMwMHxR+J Mik+DeJP40n01Fb3l9lUEze3hJ5QELzbKZAlITxvhPCXr0ajJTO+LpBkRh+EfmVJsPpk 78Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=P0dc/hsbLfI6NQ/lZ14Xz2MO6AZmT1SEz1e3p5QB+CU=; b=oW8CmVYmKUpuCIvNHpteShhV3OH0DGAgVuLDRvI9MU8d1hLV+jWkRmmr1y3jAtsrpv yWxr1VjXGsuRNSIaKMLK2yBiC14L/UFKt6hCDIapSmkV1E6lA3WweU/B84590cRGqlWK ro/ptbgRCXLPfW4vk4Jr+kjgCnBN/POIX1Y/jwBPDr6cpurm733ZCPOlT3TpMP+z2C2U XiTAtxRkTFXLHQ0pMlBVibn16tcthUeSt5ATB8s6G/tsjnf23+N4oQV3XJunjfqpZPGD GWJVNuT7+52U+R3MCvDQTH4965coEe3fDs/oawsGcn8FzEW6GycCjF8KDfPXWq6Cy8X/ N7Sg== X-Gm-Message-State: AOAM533aa4+cTzQG3fEfgumaW2HP4o56zlPlUM4vTa6ZM7OUGYGhbyOp iKUOFmxebVNlLZPn8J3dchVgi1wja4P8 X-Google-Smtp-Source: ABdhPJzgRdtm4fQ9Gk9r0fxFUaClViNc9qKqf3adycUhzmR2wWez23rCUHfEtkxkewzkPqALGbiYy8s3HHc3 X-Received: from connoro.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:a99]) (user=connoro job=sendgmr) by 2002:aa7:9019:0:b0:4fa:7532:9551 with SMTP id m25-20020aa79019000000b004fa75329551mr25987515pfo.26.1653341297002; Mon, 23 May 2022 14:28:17 -0700 (PDT) Date: Mon, 23 May 2022 21:28:08 +0000 Message-Id: <20220523212808.603526-1-connoro@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.36.1.124.g0e6072fb45-goog Subject: [PATCH bpf-next v2] libbpf: also check /sys/kernel/tracing for tracefs files From: "Connor O'Brien" To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko Cc: Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , netdev@vger.kernel.org, bpf@vger.kernel.org, linux-kernel@vger.kernel.org, "Connor O'Brien" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" libbpf looks for tracefs files only under debugfs, but tracefs may be mounted even if debugfs is not. When /sys/kernel/debug/tracing is absent, try looking under /sys/kernel/tracing instead. Signed-off-by: Connor O'Brien --- v1->v2: cache result of debugfs check. src/libbpf.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/libbpf.c b/src/libbpf.c index 2262bcd..cc47c52 100644 --- a/src/libbpf.c +++ b/src/libbpf.c @@ -9945,10 +9945,22 @@ static void gen_kprobe_legacy_event_name(char *buf,= size_t buf_sz, __sync_fetch_and_add(&index, 1)); } =20 +static bool debugfs_available(void) +{ + static bool initialized =3D false, available; + + if (!initialized) { + available =3D !access("/sys/kernel/debug/tracing", F_OK); + initialized =3D true; + } + return available; +} + static int add_kprobe_event_legacy(const char *probe_name, bool retprobe, const char *kfunc_name, size_t offset) { - const char *file =3D "/sys/kernel/debug/tracing/kprobe_events"; + const char *file =3D debugfs_available() ? "/sys/kernel/debug/tracing/kpr= obe_events" : + "/sys/kernel/tracing/kprobe_events"; =20 return append_to_file(file, "%c:%s/%s %s+0x%zx", retprobe ? 'r' : 'p', @@ -9958,7 +9970,8 @@ static int add_kprobe_event_legacy(const char *probe_= name, bool retprobe, =20 static int remove_kprobe_event_legacy(const char *probe_name, bool retprob= e) { - const char *file =3D "/sys/kernel/debug/tracing/kprobe_events"; + const char *file =3D debugfs_available() ? "/sys/kernel/debug/tracing/kpr= obe_events" : + "/sys/kernel/tracing/kprobe_events"; =20 return append_to_file(file, "-:%s/%s", retprobe ? "kretprobes" : "kprobes= ", probe_name); } @@ -9968,7 +9981,8 @@ static int determine_kprobe_perf_type_legacy(const ch= ar *probe_name, bool retpro char file[256]; =20 snprintf(file, sizeof(file), - "/sys/kernel/debug/tracing/events/%s/%s/id", + debugfs_available() ? "/sys/kernel/debug/tracing/events/%s/%s/id" : + "/sys/kernel/tracing/events/%s/%s/id", retprobe ? "kretprobes" : "kprobes", probe_name); =20 return parse_uint_from_file(file, "%d\n"); @@ -10144,7 +10158,8 @@ static void gen_uprobe_legacy_event_name(char *buf,= size_t buf_sz, static inline int add_uprobe_event_legacy(const char *probe_name, bool ret= probe, const char *binary_path, size_t offset) { - const char *file =3D "/sys/kernel/debug/tracing/uprobe_events"; + const char *file =3D debugfs_available() ? "/sys/kernel/debug/tracing/upr= obe_events" : + "/sys/kernel/tracing/uprobe_events"; =20 return append_to_file(file, "%c:%s/%s %s:0x%zx", retprobe ? 'r' : 'p', @@ -10154,7 +10169,8 @@ static inline int add_uprobe_event_legacy(const cha= r *probe_name, bool retprobe, =20 static inline int remove_uprobe_event_legacy(const char *probe_name, bool = retprobe) { - const char *file =3D "/sys/kernel/debug/tracing/uprobe_events"; + const char *file =3D debugfs_available() ? "/sys/kernel/debug/tracing/upr= obe_events" : + "/sys/kernel/tracing/uprobe_events"; =20 return append_to_file(file, "-:%s/%s", retprobe ? "uretprobes" : "uprobes= ", probe_name); } @@ -10164,7 +10180,8 @@ static int determine_uprobe_perf_type_legacy(const = char *probe_name, bool retpro char file[512]; =20 snprintf(file, sizeof(file), - "/sys/kernel/debug/tracing/events/%s/%s/id", + debugfs_available() ? "/sys/kernel/debug/tracing/events/%s/%s/id" : + "/sys/kernel/tracing/events/%s/%s/id", retprobe ? "uretprobes" : "uprobes", probe_name); =20 return parse_uint_from_file(file, "%d\n"); @@ -10295,7 +10312,8 @@ static int determine_tracepoint_id(const char *tp_c= ategory, int ret; =20 ret =3D snprintf(file, sizeof(file), - "/sys/kernel/debug/tracing/events/%s/%s/id", + debugfs_available() ? "/sys/kernel/debug/tracing/events/%s/%s/id"= : + "/sys/kernel/tracing/events/%s/%s/id", tp_category, tp_name); if (ret < 0) return -errno; --=20 2.36.1.124.g0e6072fb45-goog