From patchwork Fri Apr 2 13:19:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 12180867 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9A38EC433B4 for ; Fri, 2 Apr 2021 13:20:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6217D610D1 for ; Fri, 2 Apr 2021 13:20:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229599AbhDBNUE (ORCPT ); Fri, 2 Apr 2021 09:20:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59216 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229932AbhDBNUE (ORCPT ); Fri, 2 Apr 2021 09:20:04 -0400 Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A652C061788 for ; Fri, 2 Apr 2021 06:20:03 -0700 (PDT) Received: by mail-ej1-x62d.google.com with SMTP id u17so1136937ejk.2 for ; Fri, 02 Apr 2021 06:20:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bx0IwbYTflDi7XjK37L93nsygl+2jWgYd7hRljVpQOk=; b=p+FpM/MFgn99kgNxIGkFbTfkXkxbx5wcycx9o6fNmlOfA/dUc2aMFXCwXUQttmOmYH uawVNnKQmqV7H/gM3vWKpf8VqnuDLB83UJxd+TTilqKxcxEjcmy97+uv6S366bYHQIli 1AMbUGGxOR9Dludi2mwS7DyyPP/9Yg9aa/JTFYtqQPUqQXu0K08HpWOdwcn7cO6MhMV8 xoEhjnh4vz8/pVmAGYypb4tqTDIUPvyX9OypQZrpTI25YihFsn7HPXGZfluFyIHRmkk9 puM20wbWggA5yR1B/SpKWZE+DQphESN8SnrAfEpkSLrixSOE03SmWQvl+KMvwRZucngG mH7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bx0IwbYTflDi7XjK37L93nsygl+2jWgYd7hRljVpQOk=; b=T4GiDqafC+ndRo/NL8KAO1BdSR+nzxAwVs91LDTXfkCtL3G2aWwn/eQS41Nae6EHPo NfbIj/HVG6T3z1y/7foHcVLvmL+3CABBXhWIUSS3tjXaH9Yr7soNCrpc7FRdSvjTrlCs RvNUl1pUFDq6YJEQ319IfTVzneNZkY8tiKLUv8RKYBweufhQmIb/YACY4FOxt3RtwC1f xb6tHg/TpvviRqIMuAwnyPBnvjX1+eTA9eqSwrUmvMm8FUS3ML/gXsapm/CoxtCdaDEO bzypYu5XwL8aRUSjYVwUhFwpGO7HK4PAwQ8h3Ezv/KY642SmsHFGvvO6+fiL3hGReSh0 IxaA== X-Gm-Message-State: AOAM5337/LlaUsnxj8ojfIdRpOjRdSoAHh5W4fePr9ZttrdIvDtEae3O gXlm+T+cuWWXzdPTyeqtpD4= X-Google-Smtp-Source: ABdhPJyvJuxH4d4OJqkeFJ0OmQcXrr8jzHrNv3q/bbgwDhimGwTwSFlmEEl/IBvBwJYZlRTrmItT1A== X-Received: by 2002:a17:906:7d48:: with SMTP id l8mr13850788ejp.108.1617369602028; Fri, 02 Apr 2021 06:20:02 -0700 (PDT) Received: from localhost.localdomain ([95.87.199.133]) by smtp.gmail.com with ESMTPSA id n3sm4120476ejj.113.2021.04.02.06.20.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Apr 2021 06:20:01 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, tz.stoyanov@gmail.com, "Yordan Karadzhov (VMware)" Subject: [PATCH 1/6] libtracefs: Fix issues with tracefs_option_id() Date: Fri, 2 Apr 2021 16:19:42 +0300 Message-Id: <20210402131947.346235-2-y.karadz@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210402131947.346235-1-y.karadz@gmail.com> References: <20210402131947.346235-1-y.karadz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org Few mistakes have been made when introducing this API function. First of all, its declaration is missing from the header file. In addition to this the argument type is missing "const". Signed-off-by: Yordan Karadzhov (VMware) --- include/tracefs.h | 1 + src/tracefs-tools.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/tracefs.h b/include/tracefs.h index 05bd0ef..fbd7db5 100644 --- a/include/tracefs.h +++ b/include/tracefs.h @@ -145,5 +145,6 @@ bool tracefs_option_is_enabled(struct tracefs_instance *instance, enum tracefs_o int tracefs_option_enable(struct tracefs_instance *instance, enum tracefs_option_id id); int tracefs_option_diasble(struct tracefs_instance *instance, enum tracefs_option_id id); const char *tracefs_option_name(enum tracefs_option_id id); +enum tracefs_option_id tracefs_option_id(const char *name); #endif /* _TRACE_FS_H */ diff --git a/src/tracefs-tools.c b/src/tracefs-tools.c index e2dfc7b..51a7971 100644 --- a/src/tracefs-tools.c +++ b/src/tracefs-tools.c @@ -181,7 +181,7 @@ const char *tracefs_option_name(enum tracefs_option_id id) * Returns trace option ID or TRACEFS_OPTION_INVALID in case of an error or * unknown option name. */ -enum tracefs_option_id tracefs_option_id(char *name) +enum tracefs_option_id tracefs_option_id(const char *name) { int i; From patchwork Fri Apr 2 13:19:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 12180871 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CDF39C433B4 for ; Fri, 2 Apr 2021 13:20:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A1C9D61105 for ; Fri, 2 Apr 2021 13:20:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234448AbhDBNUG (ORCPT ); Fri, 2 Apr 2021 09:20:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59224 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229932AbhDBNUF (ORCPT ); Fri, 2 Apr 2021 09:20:05 -0400 Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9CC07C0613E6 for ; Fri, 2 Apr 2021 06:20:04 -0700 (PDT) Received: by mail-ej1-x62d.google.com with SMTP id a7so7425499ejs.3 for ; Fri, 02 Apr 2021 06:20:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=i2bpfUmF+YwnlreGA7yi828PWj2M/BNGHaLXVcBvWW4=; b=REF/nlwNwfIZXeL6rbJwNkdlxtJ8LQYFZ7N3ii6BjQiDnnDL4Zyu84DEUJB7+NwOdv EgNtzS9pYF5F6Z5zSf0L+NDGrMUJtHdRa5QkdJrEf6SuBXdTgK1qw7MpNpYTvEeVKgxj cx3p4yd4uaM3O9UiHoyBFo/WSDhzRZ3Mf6N1+ML0zv/JBVHGxrdcmvqmcg9KS0cI5QX+ jQIzUA67rc1ukDU0kpOBh0BCJrL3wwxgp+dZ4w9dtlFa3SLLKtLW6fuEX3LpugwwTuY5 Zr2MoX4zQmN0/xSOgJE9YSHoLT6RFdLGaNjjD9ila2YcKNOBUftr7Y5jE4MEf0oTnj3P rcYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=i2bpfUmF+YwnlreGA7yi828PWj2M/BNGHaLXVcBvWW4=; b=PPrdc+AXDX4lsGr1yMxXQ1CAEsrXv2jfi4+gB2hqvuHXQ0WmH/11gNruOxb+ncAOLQ 3sfMiMd0++D7QEk2I5Mnz/WQlgopx8xwcAPZP/2t9VSA0+LusxeSwcx9QSKw23q35gqt bTZiqxnmxbdkZve95cH3KTnhkomCPRfJL3QC2Hi5T0y9+63f66Tl0U7l9lS5MhN52m2P WBC+a20xyIv1tcQmVb0bT37veBgZn5SNtn/j2fWn0QffhoD6vNPBx6ZTpJtOC+QnjzS7 bb5X7M2Lbl0RxcuzeK68j0zMRScr59mRBUR7Jum00rglsiTCNefbwiEL1phWYaNH+xmn yU4w== X-Gm-Message-State: AOAM531ZHVFS+MfxT7kheVT7bgqGxc6FatnmrPdXALC3HvWt+gSvinYH a9DztLQpwKRSEmQOxD6xM9Y= X-Google-Smtp-Source: ABdhPJysBYzjTyUyim8oNEEtWwol3hgkzi9aZtrWnCeltrVbIND3ldRkmmE5Qj/92r0Ek0SLvr7nVg== X-Received: by 2002:a17:906:94d6:: with SMTP id d22mr912713ejy.424.1617369603290; Fri, 02 Apr 2021 06:20:03 -0700 (PDT) Received: from localhost.localdomain ([95.87.199.133]) by smtp.gmail.com with ESMTPSA id n3sm4120476ejj.113.2021.04.02.06.20.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Apr 2021 06:20:02 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, tz.stoyanov@gmail.com, "Yordan Karadzhov (VMware)" Subject: [PATCH 2/6] libtracefs: Modify the arguments of tracefs_option_is_set() Date: Fri, 2 Apr 2021 16:19:43 +0300 Message-Id: <20210402131947.346235-3-y.karadz@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210402131947.346235-1-y.karadz@gmail.com> References: <20210402131947.346235-1-y.karadz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org This function is supposed to take as argument a mask returned by "tracefs_options_get_supported()" or "tracefs_options_get_enabled()", hence this argument must be a pointer. Signed-off-by: Yordan Karadzhov (VMware) --- include/tracefs.h | 4 ++-- src/tracefs-tools.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/tracefs.h b/include/tracefs.h index fbd7db5..5c4e50d 100644 --- a/include/tracefs.h +++ b/include/tracefs.h @@ -136,8 +136,8 @@ struct tracefs_options_mask { }; void tracefs_option_set(struct tracefs_options_mask *options, enum tracefs_option_id id); void tracefs_option_clear(struct tracefs_options_mask *options, enum tracefs_option_id id); -bool tracefs_option_is_set(struct tracefs_options_mask options, enum tracefs_option_id id); - +bool tracefs_option_is_set(struct tracefs_options_mask *options, + enum tracefs_option_id id); struct tracefs_options_mask *tracefs_options_get_supported(struct tracefs_instance *instance); bool tracefs_option_is_supported(struct tracefs_instance *instance, enum tracefs_option_id id); struct tracefs_options_mask *tracefs_options_get_enabled(struct tracefs_instance *instance); diff --git a/src/tracefs-tools.c b/src/tracefs-tools.c index 51a7971..3b5f773 100644 --- a/src/tracefs-tools.c +++ b/src/tracefs-tools.c @@ -359,10 +359,11 @@ bool tracefs_option_is_enabled(struct tracefs_instance *instance, enum tracefs_o * Returns true if an option with given id is set in the bitmask, * false if it is not set. */ -bool tracefs_option_is_set(struct tracefs_options_mask options, enum tracefs_option_id id) +bool tracefs_option_is_set(struct tracefs_options_mask *options, + enum tracefs_option_id id) { if (id > TRACEFS_OPTION_INVALID) - return options.mask & (1ULL << (id - 1)); + return options->mask & (1ULL << (id - 1)); return false; } From patchwork Fri Apr 2 13:19:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 12180873 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92A98C433ED for ; Fri, 2 Apr 2021 13:20:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6883B610FC for ; Fri, 2 Apr 2021 13:20:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229932AbhDBNUH (ORCPT ); Fri, 2 Apr 2021 09:20:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235204AbhDBNUG (ORCPT ); Fri, 2 Apr 2021 09:20:06 -0400 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5AE2FC0613E6 for ; Fri, 2 Apr 2021 06:20:05 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id h13so407217eji.6 for ; Fri, 02 Apr 2021 06:20:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=G1ZquU7vO/goaoK6gzyVFkmCg37oKGKH+OeSpNiV27w=; b=jogMwCb2uqcau+/IRDjY6CRrQZbNWy1vpbQiyRO9XcZ2GUM1JyaPOkXwhGHOVzZwri wfqqslz6x35rb3xFe2iW4jBWWWYhZh5uQfqiYU7OSs8LDenXXAswDxeWkowPp3SIwAv8 krERKTFXcSB8tNWo5ppyKxB22p1N16Jv9qWuN7Ruym4nwqbe/EywAD/9iOdcgG12lK2n DtLMAgFMXzxcItQXHIw9DsZ/0JTY3KSsLIDx/mBPjX9qNbtUtbT86h+NV0mzup1odiHt iFQN1ThCzEzU1hRnIvO6kKW+BKWtiUtAu4fVrdUYEisJ6zF7kgkrI5D+LCU92W4zW+J0 bstA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=G1ZquU7vO/goaoK6gzyVFkmCg37oKGKH+OeSpNiV27w=; b=N1TCoDJHIG6S0TcuJnfiDb6AUgg/1ty6+D1komKpVHHojWREczGu/VC1j2I3gY6zSh j5cxAOcUpbZ07TLqhjvaSuI5jOFLipbM4TYcAePp/xDFT34FBRWWzo4v0dvL6MUckpSk UbrBygd0j+FGBxPxTOhqHSpqDdg9aJkWXFVowzuMvGq9WOt0D9lM0w33K/Qa636AgYAc n+7Ed6e4ESoocMBWCoEsQ7Jb/yDfyFW9rx3xgzbleD2qSgypU28Up+82wTNP41PF3NLj RFNJxq8Jfd1JiFuseFjKTuWnp5XJIPS8Fek1eKlEZ9l0dgTM692sw9Ehkr2tnYNWJxQy ZWOw== X-Gm-Message-State: AOAM5326rAUoVa9kwv1koYBaQadSk4VnJeQSs4bLtHGk/eUwty7eV1Te zwZvTJd5UkjRri9KXo+pMWk= X-Google-Smtp-Source: ABdhPJyQTZjCDzauxRIWTxtXsRh9q94p3yFBidR+906mtl2Y6U7Q0hLClW4s79BCS8jwfUPyzCc/uQ== X-Received: by 2002:a17:906:7a50:: with SMTP id i16mr832282ejo.29.1617369604067; Fri, 02 Apr 2021 06:20:04 -0700 (PDT) Received: from localhost.localdomain ([95.87.199.133]) by smtp.gmail.com with ESMTPSA id n3sm4120476ejj.113.2021.04.02.06.20.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Apr 2021 06:20:03 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, tz.stoyanov@gmail.com, "Yordan Karadzhov (VMware)" Subject: [PATCH 3/6] libtracefs: Encapsulate "struct tracefs_options_mask" Date: Fri, 2 Apr 2021 16:19:44 +0300 Message-Id: <20210402131947.346235-4-y.karadz@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210402131947.346235-1-y.karadz@gmail.com> References: <20210402131947.346235-1-y.karadz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org The definition of the mask gets hidden from the user. This way we will be able to modify this definition in the future, without breaking the API. Such a modification will be compulsory, if too many new tracing options are added in the future. Note that encapsulating the mask definition, requires two API methods to be eliminated, however those methods have no particular use-cases for the moment. Signed-off-by: Yordan Karadzhov (VMware) --- include/tracefs.h | 6 +----- src/tracefs-tools.c | 33 +++++++++++---------------------- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/include/tracefs.h b/include/tracefs.h index 5c4e50d..0665e8d 100644 --- a/include/tracefs.h +++ b/include/tracefs.h @@ -131,11 +131,7 @@ enum tracefs_option_id { }; #define TRACEFS_OPTION_MAX (TRACEFS_OPTION_VERBOSE + 1) -struct tracefs_options_mask { - unsigned long long mask; -}; -void tracefs_option_set(struct tracefs_options_mask *options, enum tracefs_option_id id); -void tracefs_option_clear(struct tracefs_options_mask *options, enum tracefs_option_id id); +struct tracefs_options_mask; bool tracefs_option_is_set(struct tracefs_options_mask *options, enum tracefs_option_id id); struct tracefs_options_mask *tracefs_options_get_supported(struct tracefs_instance *instance); diff --git a/src/tracefs-tools.c b/src/tracefs-tools.c index 3b5f773..11a4c8c 100644 --- a/src/tracefs-tools.c +++ b/src/tracefs-tools.c @@ -19,6 +19,10 @@ #define TRACE_CTRL "tracing_on" +struct tracefs_options_mask { + unsigned long long mask; +}; + static const char * const options_map[] = { "unknown", "annotate", @@ -197,6 +201,13 @@ enum tracefs_option_id tracefs_option_id(const char *name) return TRACEFS_OPTION_INVALID; } +static void tracefs_option_set(struct tracefs_options_mask *options, + enum tracefs_option_id id) +{ + if (options && id > TRACEFS_OPTION_INVALID) + options->mask |= (1ULL << (id - 1)); +} + static struct tracefs_options_mask *trace_get_options(struct tracefs_instance *instance, bool enabled) { @@ -366,25 +377,3 @@ bool tracefs_option_is_set(struct tracefs_options_mask *options, return options->mask & (1ULL << (id - 1)); return false; } - -/** - * tracefs_option_set - Set option in options bitmask - * @options: Pointer to a bitmask with options - * @id: trace option id - */ -void tracefs_option_set(struct tracefs_options_mask *options, enum tracefs_option_id id) -{ - if (options && id > TRACEFS_OPTION_INVALID) - options->mask |= (1ULL << (id - 1)); -} - -/** - * tracefs_option_clear - Clear option from options bitmask - * @options: Pointer to a bitmask with options - * @id: trace option id - */ -void tracefs_option_clear(struct tracefs_options_mask *options, enum tracefs_option_id id) -{ - if (options && id > TRACEFS_OPTION_INVALID) - options->mask &= ~(1ULL << (id - 1)); -} From patchwork Fri Apr 2 13:19:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 12180877 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2657EC43461 for ; Fri, 2 Apr 2021 13:20:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EDBE0610D1 for ; Fri, 2 Apr 2021 13:20:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235307AbhDBNUI (ORCPT ); Fri, 2 Apr 2021 09:20:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59240 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235204AbhDBNUH (ORCPT ); Fri, 2 Apr 2021 09:20:07 -0400 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 53057C0613E6 for ; Fri, 2 Apr 2021 06:20:06 -0700 (PDT) Received: by mail-ej1-x62f.google.com with SMTP id ap14so7473002ejc.0 for ; Fri, 02 Apr 2021 06:20:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BuREHbHSY0biXmAmsmHsevF/CWO+IFZCyFyzPRx2Quo=; b=TxqLKVqfLiOqquk7GQ+hyXpIZTp8X91/5b8jJDM9suvETpv5Qn5yhqaemWdRdE5kXj kY+X1t+RrbBHRT3zRtdWWbEVqAjhHd44BGf2S1Qbs1YqTiBtqMKBcc/VsUxornxOvBN3 iVlEd8RSGN+sui/pd2XICMuEFEFs11/C91s5e2X2HKtdVrA/cbqPyGY7s21ecItq1ZDG jt7mhRR/RRbUSqshC/oJ95+TIcGtEv/YFVgY5HxlXeiyff9i7IQ5ec6aWuwyQB9o7RCA tQKeA/WFkES4Os0xBocf1qQQDiqNAyw3aIjqigYPZl2pOSW/WRIL4ZOGPe4YB4vqqcJ8 eb2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BuREHbHSY0biXmAmsmHsevF/CWO+IFZCyFyzPRx2Quo=; b=b9RAv3jk3gND+EixhfbSAKVaXbLuuMofX81mk3u+LJqLqIzZbc7jItleLZD1H+920s BAmidniZs6rXjp5/2u/Tg/iZJX369aqS2njjkfyuNOVpFhzW+vLBRLeM+wRxrCXmdMtG rE9U5IJljM+s4h0l6+qGu0WkB0Qoq1+zv4eXfRKym+uG20aGIDtHe01JiUdlx4xiTLng sZqxkZr4uBBfp6pQwuTPDjWqGXPmFNZXpFVj7/qi8NmBe81aMkrTX4gCxeRSlVzc5TFT rJRKN968eb9X5vjJW1TlC50mgbFWPl9h7fQyDpB7dKlHOWZAbykJ1M3xKxnVWQBXePcl /u5w== X-Gm-Message-State: AOAM5315R9PzbqcufNz/NPyXcqSXWM5FIPnl2gMXtpsI5QlRJeSWxOPC ovGDkTX/5HzbWwzvY+uouU+iet6hMYzq6A== X-Google-Smtp-Source: ABdhPJxOa74YRHzWu2hZId3efR/dspZik2MpDBDDUeaAQNlV+uv5DZxeSWF2FacMeyaItbXYjuw8Mg== X-Received: by 2002:a17:906:5d05:: with SMTP id g5mr13901626ejt.489.1617369604901; Fri, 02 Apr 2021 06:20:04 -0700 (PDT) Received: from localhost.localdomain ([95.87.199.133]) by smtp.gmail.com with ESMTPSA id n3sm4120476ejj.113.2021.04.02.06.20.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Apr 2021 06:20:04 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, tz.stoyanov@gmail.com, "Yordan Karadzhov (VMware)" Subject: [PATCH 4/6] libtracefs: Move the "options" code to tracefs-instance.c Date: Fri, 2 Apr 2021 16:19:45 +0300 Message-Id: <20210402131947.346235-5-y.karadz@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210402131947.346235-1-y.karadz@gmail.com> References: <20210402131947.346235-1-y.karadz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org We would like the instance object to own two bit masks (struct tracefs_options_mask) associated with all supported and all enabled options. However, the definition of the instance itself is not public, hence the code implementing the "options" related APIs has to in the same source file as the definition of the instance. Signed-off-by: Yordan Karadzhov (VMware) --- src/tracefs-instance.c | 266 +++++++++++++++++++++++++++++++++++++++++ src/tracefs-tools.c | 266 ----------------------------------------- 2 files changed, 266 insertions(+), 266 deletions(-) diff --git a/src/tracefs-instance.c b/src/tracefs-instance.c index 0df313c..49645eb 100644 --- a/src/tracefs-instance.c +++ b/src/tracefs-instance.c @@ -18,6 +18,10 @@ #include "tracefs.h" #include "tracefs-local.h" +struct tracefs_options_mask { + unsigned long long mask; +}; + #define FLAG_INSTANCE_NEWLY_CREATED (1 << 0) struct tracefs_instance { char *trace_dir; @@ -587,3 +591,265 @@ out: free(all_clocks); return ret; } + +static const char * const options_map[] = { + "unknown", + "annotate", + "bin", + "blk_cgname", + "blk_cgroup", + "blk_classic", + "block", + "context-info", + "disable_on_free", + "display-graph", + "event-fork", + "funcgraph-abstime", + "funcgraph-cpu", + "funcgraph-duration", + "funcgraph-irqs", + "funcgraph-overhead", + "funcgraph-overrun", + "funcgraph-proc", + "funcgraph-tail", + "func_stack_trace", + "function-fork", + "function-trace", + "graph-time", + "hex", + "irq-info", + "latency-format", + "markers", + "overwrite", + "pause-on-trace", + "printk-msg-only", + "print-parent", + "raw", + "record-cmd", + "record-tgid", + "sleep-time", + "stacktrace", + "sym-addr", + "sym-offset", + "sym-userobj", + "trace_printk", + "userstacktrace", + "verbose" }; + +/** + * tracefs_option_name - Get trace option name from id + * @id: trace option id + * + * Returns string with option name, or "unknown" in case of not known option id. + * The returned string must *not* be freed. + */ +const char *tracefs_option_name(enum tracefs_option_id id) +{ + /* Make sure options map contains all the options */ + BUILD_BUG_ON(ARRAY_SIZE(options_map) != TRACEFS_OPTION_MAX); + + if (id < TRACEFS_OPTION_MAX) + return options_map[id]; + + return options_map[0]; +} + +/** + * tracefs_option_id - Get trace option ID from name + * @name: trace option name + * + * Returns trace option ID or TRACEFS_OPTION_INVALID in case of an error or + * unknown option name. + */ +enum tracefs_option_id tracefs_option_id(const char *name) +{ + int i; + + if (!name) + return TRACEFS_OPTION_INVALID; + + for (i = 0; i < TRACEFS_OPTION_MAX; i++) { + if (strlen(name) == strlen(options_map[i]) && + !strcmp(options_map[i], name)) + return i; + } + + return TRACEFS_OPTION_INVALID; +} + +static void tracefs_option_set(struct tracefs_options_mask *options, + enum tracefs_option_id id) +{ + if (options && id > TRACEFS_OPTION_INVALID) + options->mask |= (1ULL << (id - 1)); +} + +static struct tracefs_options_mask *trace_get_options(struct tracefs_instance *instance, + bool enabled) +{ + struct tracefs_options_mask *bitmask; + enum tracefs_option_id id; + char file[PATH_MAX]; + struct dirent *dent; + char *dname = NULL; + DIR *dir = NULL; + long long val; + + bitmask = calloc(1, sizeof(struct tracefs_options_mask)); + if (!bitmask) + return NULL; + dname = tracefs_instance_get_file(instance, "options"); + if (!dname) + goto error; + dir = opendir(dname); + if (!dir) + goto error; + + while ((dent = readdir(dir))) { + if (*dent->d_name == '.') + continue; + if (enabled) { + snprintf(file, PATH_MAX, "options/%s", dent->d_name); + if (tracefs_instance_file_read_number(instance, file, &val) != 0 || + val != 1) + continue; + } + id = tracefs_option_id(dent->d_name); + if (id != TRACEFS_OPTION_INVALID) + tracefs_option_set(bitmask, id); + } + closedir(dir); + tracefs_put_tracing_file(dname); + + return bitmask; + +error: + if (dir) + closedir(dir); + tracefs_put_tracing_file(dname); + free(bitmask); + return NULL; +} + +/** + * tracefs_options_get_supported - Get all supported trace options in given instance + * @instance: ftrace instance, can be NULL for the top instance + * + * Returns allocated bitmask structure with all trace options, supported in given + * instance, or NULL in case of an error. The returned structure must be freed with free() + */ +struct tracefs_options_mask *tracefs_options_get_supported(struct tracefs_instance *instance) +{ + return trace_get_options(instance, false); +} + +/** + * tracefs_options_get_enabled - Get all currently enabled trace options in given instance + * @instance: ftrace instance, can be NULL for the top instance + * + * Returns allocated bitmask structure with all trace options, enabled in given + * instance, or NULL in case of an error. The returned structure must be freed with free() + */ +struct tracefs_options_mask *tracefs_options_get_enabled(struct tracefs_instance *instance) +{ + return trace_get_options(instance, true); +} + +static int trace_config_option(struct tracefs_instance *instance, + enum tracefs_option_id id, bool set) +{ + char *set_str = set ? "1" : "0"; + char file[PATH_MAX]; + const char *name; + + name = tracefs_option_name(id); + if (!name) + return -1; + + snprintf(file, PATH_MAX, "options/%s", name); + if (strlen(set_str) != tracefs_instance_file_write(instance, file, set_str)) + return -1; + return 0; +} + +/** + * tracefs_option_enable - Enable trace option + * @instance: ftrace instance, can be NULL for the top instance + * @id: trace option id + * + * Returns -1 in case of an error or 0 otherwise + */ +int tracefs_option_enable(struct tracefs_instance *instance, enum tracefs_option_id id) +{ + return trace_config_option(instance, id, true); +} + +/** + * tracefs_option_diasble - Disable trace option + * @instance: ftrace instance, can be NULL for the top instance + * @id: trace option id + * + * Returns -1 in case of an error or 0 otherwise + */ +int tracefs_option_diasble(struct tracefs_instance *instance, enum tracefs_option_id id) +{ + return trace_config_option(instance, id, false); +} + +/** + * tracefs_option_is_supported - Check if an option is supported + * @instance: ftrace instance, can be NULL for the top instance + * @id: trace option id + * + * Returns true if an option with given id is supported by the system, false if + * it is not supported. + */ +bool tracefs_option_is_supported(struct tracefs_instance *instance, enum tracefs_option_id id) +{ + const char *name = tracefs_option_name(id); + char file[PATH_MAX]; + + if (!name) + return false; + snprintf(file, PATH_MAX, "options/%s", name); + return tracefs_file_exists(instance, file); +} + +/** + * tracefs_option_is_enabled - Check if an option is enabled in given instance + * @instance: ftrace instance, can be NULL for the top instance + * @id: trace option id + * + * Returns true if an option with given id is enabled in the given instance, + * false if it is not enabled. + */ +bool tracefs_option_is_enabled(struct tracefs_instance *instance, enum tracefs_option_id id) +{ + const char *name = tracefs_option_name(id); + char file[PATH_MAX]; + long long res; + + if (!name) + return false; + snprintf(file, PATH_MAX, "options/%s", name); + if (!tracefs_instance_file_read_number(instance, file, &res) && res) + return true; + + return false; +} + +/** + * tracefs_option_is_set - Check if given option is set in the bitmask + * @options: Options bitmask + * @id: trace option id + * + * Returns true if an option with given id is set in the bitmask, + * false if it is not set. + */ +bool tracefs_option_is_set(struct tracefs_options_mask *options, + enum tracefs_option_id id) +{ + if (id > TRACEFS_OPTION_INVALID) + return options->mask & (1ULL << (id - 1)); + return false; +} diff --git a/src/tracefs-tools.c b/src/tracefs-tools.c index 11a4c8c..8f763a4 100644 --- a/src/tracefs-tools.c +++ b/src/tracefs-tools.c @@ -19,54 +19,6 @@ #define TRACE_CTRL "tracing_on" -struct tracefs_options_mask { - unsigned long long mask; -}; - -static const char * const options_map[] = { - "unknown", - "annotate", - "bin", - "blk_cgname", - "blk_cgroup", - "blk_classic", - "block", - "context-info", - "disable_on_free", - "display-graph", - "event-fork", - "funcgraph-abstime", - "funcgraph-cpu", - "funcgraph-duration", - "funcgraph-irqs", - "funcgraph-overhead", - "funcgraph-overrun", - "funcgraph-proc", - "funcgraph-tail", - "func_stack_trace", - "function-fork", - "function-trace", - "graph-time", - "hex", - "irq-info", - "latency-format", - "markers", - "overwrite", - "pause-on-trace", - "printk-msg-only", - "print-parent", - "raw", - "record-cmd", - "record-tgid", - "sleep-time", - "stacktrace", - "sym-addr", - "sym-offset", - "sym-userobj", - "trace_printk", - "userstacktrace", - "verbose" }; - static int trace_on_off(int fd, bool on) { const char *val = on ? "1" : "0"; @@ -159,221 +111,3 @@ int tracefs_trace_off_fd(int fd) return -1; return trace_on_off(fd, false); } - -/** - * tracefs_option_name - Get trace option name from id - * @id: trace option id - * - * Returns string with option name, or "unknown" in case of not known option id. - * The returned string must *not* be freed. - */ -const char *tracefs_option_name(enum tracefs_option_id id) -{ - /* Make sure options map contains all the options */ - BUILD_BUG_ON(ARRAY_SIZE(options_map) != TRACEFS_OPTION_MAX); - - if (id < TRACEFS_OPTION_MAX) - return options_map[id]; - - return options_map[0]; -} - -/** - * tracefs_option_id - Get trace option ID from name - * @name: trace option name - * - * Returns trace option ID or TRACEFS_OPTION_INVALID in case of an error or - * unknown option name. - */ -enum tracefs_option_id tracefs_option_id(const char *name) -{ - int i; - - if (!name) - return TRACEFS_OPTION_INVALID; - - for (i = 0; i < TRACEFS_OPTION_MAX; i++) { - if (strlen(name) == strlen(options_map[i]) && - !strcmp(options_map[i], name)) - return i; - } - - return TRACEFS_OPTION_INVALID; -} - -static void tracefs_option_set(struct tracefs_options_mask *options, - enum tracefs_option_id id) -{ - if (options && id > TRACEFS_OPTION_INVALID) - options->mask |= (1ULL << (id - 1)); -} - -static struct tracefs_options_mask *trace_get_options(struct tracefs_instance *instance, - bool enabled) -{ - struct tracefs_options_mask *bitmask; - enum tracefs_option_id id; - char file[PATH_MAX]; - struct dirent *dent; - char *dname = NULL; - DIR *dir = NULL; - long long val; - - bitmask = calloc(1, sizeof(struct tracefs_options_mask)); - if (!bitmask) - return NULL; - dname = tracefs_instance_get_file(instance, "options"); - if (!dname) - goto error; - dir = opendir(dname); - if (!dir) - goto error; - - while ((dent = readdir(dir))) { - if (*dent->d_name == '.') - continue; - if (enabled) { - snprintf(file, PATH_MAX, "options/%s", dent->d_name); - if (tracefs_instance_file_read_number(instance, file, &val) != 0 || - val != 1) - continue; - } - id = tracefs_option_id(dent->d_name); - if (id != TRACEFS_OPTION_INVALID) - tracefs_option_set(bitmask, id); - } - closedir(dir); - tracefs_put_tracing_file(dname); - - return bitmask; - -error: - if (dir) - closedir(dir); - tracefs_put_tracing_file(dname); - free(bitmask); - return NULL; -} - -/** - * tracefs_options_get_supported - Get all supported trace options in given instance - * @instance: ftrace instance, can be NULL for the top instance - * - * Returns allocated bitmask structure with all trace options, supported in given - * instance, or NULL in case of an error. The returned structure must be freed with free() - */ -struct tracefs_options_mask *tracefs_options_get_supported(struct tracefs_instance *instance) -{ - return trace_get_options(instance, false); -} - -/** - * tracefs_options_get_enabled - Get all currently enabled trace options in given instance - * @instance: ftrace instance, can be NULL for the top instance - * - * Returns allocated bitmask structure with all trace options, enabled in given - * instance, or NULL in case of an error. The returned structure must be freed with free() - */ -struct tracefs_options_mask *tracefs_options_get_enabled(struct tracefs_instance *instance) -{ - return trace_get_options(instance, true); -} - -static int trace_config_option(struct tracefs_instance *instance, - enum tracefs_option_id id, bool set) -{ - char *set_str = set ? "1" : "0"; - char file[PATH_MAX]; - const char *name; - - name = tracefs_option_name(id); - if (!name) - return -1; - - snprintf(file, PATH_MAX, "options/%s", name); - if (strlen(set_str) != tracefs_instance_file_write(instance, file, set_str)) - return -1; - return 0; -} - -/** - * tracefs_option_enable - Enable trace option - * @instance: ftrace instance, can be NULL for the top instance - * @id: trace option id - * - * Returns -1 in case of an error or 0 otherwise - */ -int tracefs_option_enable(struct tracefs_instance *instance, enum tracefs_option_id id) -{ - return trace_config_option(instance, id, true); -} - -/** - * tracefs_option_diasble - Disable trace option - * @instance: ftrace instance, can be NULL for the top instance - * @id: trace option id - * - * Returns -1 in case of an error or 0 otherwise - */ -int tracefs_option_diasble(struct tracefs_instance *instance, enum tracefs_option_id id) -{ - return trace_config_option(instance, id, false); -} - -/** - * tracefs_option_is_supported - Check if an option is supported - * @instance: ftrace instance, can be NULL for the top instance - * @id: trace option id - * - * Returns true if an option with given id is supported by the system, false if - * it is not supported. - */ -bool tracefs_option_is_supported(struct tracefs_instance *instance, enum tracefs_option_id id) -{ - const char *name = tracefs_option_name(id); - char file[PATH_MAX]; - - if (!name) - return false; - snprintf(file, PATH_MAX, "options/%s", name); - return tracefs_file_exists(instance, file); -} - -/** - * tracefs_option_is_enabled - Check if an option is enabled in given instance - * @instance: ftrace instance, can be NULL for the top instance - * @id: trace option id - * - * Returns true if an option with given id is enabled in the given instance, - * false if it is not enabled. - */ -bool tracefs_option_is_enabled(struct tracefs_instance *instance, enum tracefs_option_id id) -{ - const char *name = tracefs_option_name(id); - char file[PATH_MAX]; - long long res; - - if (!name) - return false; - snprintf(file, PATH_MAX, "options/%s", name); - if (!tracefs_instance_file_read_number(instance, file, &res) && res) - return true; - - return false; -} - -/** - * tracefs_option_is_set - Check if given option is set in the bitmask - * @options: Options bitmask - * @id: trace option id - * - * Returns true if an option with given id is set in the bitmask, - * false if it is not set. - */ -bool tracefs_option_is_set(struct tracefs_options_mask *options, - enum tracefs_option_id id) -{ - if (id > TRACEFS_OPTION_INVALID) - return options->mask & (1ULL << (id - 1)); - return false; -} From patchwork Fri Apr 2 13:19:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 12180875 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 721D4C43462 for ; Fri, 2 Apr 2021 13:20:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4AF4161103 for ; Fri, 2 Apr 2021 13:20:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235204AbhDBNUI (ORCPT ); Fri, 2 Apr 2021 09:20:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234628AbhDBNUI (ORCPT ); Fri, 2 Apr 2021 09:20:08 -0400 Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 16F90C061788 for ; Fri, 2 Apr 2021 06:20:07 -0700 (PDT) Received: by mail-ej1-x62d.google.com with SMTP id l4so7392105ejc.10 for ; Fri, 02 Apr 2021 06:20:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=way23HTlDFl1I+zj39yE/jKSjDkwDVOGnVSs5PzWLd8=; b=Iam+Q3nb8wmuT0SFOANXPWZDd3fAkJASo8Don2LIOk5ueWv6pHt1DrOcV3bJL13hLC Ch3kPHoCDmQuLpSyi+pREQRB8FMC4zxF3uvYGmz5DXhcSdup/HpfEBffbzv5aFfG4Lbo nokNL/Fc5iZjpsiYuUjPNNqo4HGtUzkhR79yvwoZKFRjQqgyO/z8OGziPFNxHrvv+Qgx 64WmFwMIhkDqt6w0nwjpZxZCX0q19ayk39sxXp9k/tUagYTMeKoyTgqjwTR/O3DkpCS1 7GtxInzxMsq1ucHpPe8axm+ZehmlvjaQ5FVIg6XrqdgHUmtpiuCsq6bkPtRA9UrmZBsy VMsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=way23HTlDFl1I+zj39yE/jKSjDkwDVOGnVSs5PzWLd8=; b=A62fLTYnJYcTaoN6M8z/WFehX5V73/dhjZqTKMNWJ6pHlC60buAYyL0LXgNt3X5PMK Cb6FXogGvP6vJmihMl69gj9L6KYwWinT0mAbsOdQtIKYjL8AxOitmiUqiY3zPvt1UNw6 28TQXANpZNGVnhdUpe0/OMbZ7AqkacoMAYyeiaKT/RYBkVhGDloRR5DnVJZT3spQUKye /4YwKYqrg7zkd6773OOoBEilGGB2r9VqTvqfVeMfmSrLVU3TUCDm7vjYlSjvlzH/D8Ir Dbjyw/F2xwUsKGEBJYy7OSZ5zqMjTJPyBQ94qgKDEd8icWkE+D/K3VUt82yO7a+/ihSt G1Ww== X-Gm-Message-State: AOAM531zxWc6GS8BA4ndB7Bmena+bX2aRY6zOlmqgWXW+CVlgzZUfxSq 1OJ1auoBONmV1Uh6ej7HC1Y= X-Google-Smtp-Source: ABdhPJyr0hyPXr8TjLVxn9ryLY94JsRQgC30isYkp2AVMbiWJKqU9G+pBETQV3JbuwUdMZy07AszMw== X-Received: by 2002:a17:906:7806:: with SMTP id u6mr13115603ejm.130.1617369605861; Fri, 02 Apr 2021 06:20:05 -0700 (PDT) Received: from localhost.localdomain ([95.87.199.133]) by smtp.gmail.com with ESMTPSA id n3sm4120476ejj.113.2021.04.02.06.20.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Apr 2021 06:20:05 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, tz.stoyanov@gmail.com, "Yordan Karadzhov (VMware)" Subject: [PATCH 5/6] libtracefs: Option's bit masks to be owned by the instance Date: Fri, 2 Apr 2021 16:19:46 +0300 Message-Id: <20210402131947.346235-6-y.karadz@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210402131947.346235-1-y.karadz@gmail.com> References: <20210402131947.346235-1-y.karadz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org If the instance owns two mask objects, we no longer need to dynamically allocate memory in tracefs_options_get_supported() and tracefs_options_get_enabled(). This will simplify the code on the caller side, since the user is no longer responsible for freeing those masks. Signed-off-by: Yordan Karadzhov (VMware) --- Documentation/libtracefs-option-get.txt | 4 +--- include/tracefs.h | 6 +++--- src/tracefs-instance.c | 24 ++++++++++++------------ 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/Documentation/libtracefs-option-get.txt b/Documentation/libtracefs-option-get.txt index 9b3cb56..3290f24 100644 --- a/Documentation/libtracefs-option-get.txt +++ b/Documentation/libtracefs-option-get.txt @@ -52,14 +52,13 @@ EXAMPLE -- #include ... -struct tracefs_options_mask *options; +const struct tracefs_options_mask *options; ... options = tracefs_options_get_supported(NULL); if (!options) { /* Failed to get supported options */ } else { ... - free(options); } ... options = tracefs_options_get_enabled(NULL); @@ -67,7 +66,6 @@ if (!options) { /* Failed to get options, enabled in the top instance */ } else { ... - free(options); } ... diff --git a/include/tracefs.h b/include/tracefs.h index 0665e8d..9efa91a 100644 --- a/include/tracefs.h +++ b/include/tracefs.h @@ -132,11 +132,11 @@ enum tracefs_option_id { #define TRACEFS_OPTION_MAX (TRACEFS_OPTION_VERBOSE + 1) struct tracefs_options_mask; -bool tracefs_option_is_set(struct tracefs_options_mask *options, +bool tracefs_option_is_set(const struct tracefs_options_mask *options, enum tracefs_option_id id); -struct tracefs_options_mask *tracefs_options_get_supported(struct tracefs_instance *instance); +const struct tracefs_options_mask *tracefs_options_get_supported(struct tracefs_instance *instance); bool tracefs_option_is_supported(struct tracefs_instance *instance, enum tracefs_option_id id); -struct tracefs_options_mask *tracefs_options_get_enabled(struct tracefs_instance *instance); +const struct tracefs_options_mask *tracefs_options_get_enabled(struct tracefs_instance *instance); bool tracefs_option_is_enabled(struct tracefs_instance *instance, enum tracefs_option_id id); int tracefs_option_enable(struct tracefs_instance *instance, enum tracefs_option_id id); int tracefs_option_diasble(struct tracefs_instance *instance, enum tracefs_option_id id); diff --git a/src/tracefs-instance.c b/src/tracefs-instance.c index 49645eb..9cb4b6d 100644 --- a/src/tracefs-instance.c +++ b/src/tracefs-instance.c @@ -27,6 +27,8 @@ struct tracefs_instance { char *trace_dir; char *name; int flags; + struct tracefs_options_mask supported_opts; + struct tracefs_options_mask enabled_opts; }; /** @@ -695,9 +697,8 @@ static struct tracefs_options_mask *trace_get_options(struct tracefs_instance *i DIR *dir = NULL; long long val; - bitmask = calloc(1, sizeof(struct tracefs_options_mask)); - if (!bitmask) - return NULL; + bitmask = enabled? &instance->enabled_opts : &instance->supported_opts; + dname = tracefs_instance_get_file(instance, "options"); if (!dname) goto error; @@ -727,7 +728,6 @@ error: if (dir) closedir(dir); tracefs_put_tracing_file(dname); - free(bitmask); return NULL; } @@ -735,10 +735,10 @@ error: * tracefs_options_get_supported - Get all supported trace options in given instance * @instance: ftrace instance, can be NULL for the top instance * - * Returns allocated bitmask structure with all trace options, supported in given - * instance, or NULL in case of an error. The returned structure must be freed with free() + * Returns bitmask structure with all trace options, supported in given instance, + * or NULL in case of an error. */ -struct tracefs_options_mask *tracefs_options_get_supported(struct tracefs_instance *instance) +const struct tracefs_options_mask *tracefs_options_get_supported(struct tracefs_instance *instance) { return trace_get_options(instance, false); } @@ -747,10 +747,10 @@ struct tracefs_options_mask *tracefs_options_get_supported(struct tracefs_instan * tracefs_options_get_enabled - Get all currently enabled trace options in given instance * @instance: ftrace instance, can be NULL for the top instance * - * Returns allocated bitmask structure with all trace options, enabled in given - * instance, or NULL in case of an error. The returned structure must be freed with free() + * Returns allocated bitmask structure with all trace options, enabled in given instance, + * or NULL in case of an error. */ -struct tracefs_options_mask *tracefs_options_get_enabled(struct tracefs_instance *instance) +const struct tracefs_options_mask *tracefs_options_get_enabled(struct tracefs_instance *instance) { return trace_get_options(instance, true); } @@ -758,7 +758,7 @@ struct tracefs_options_mask *tracefs_options_get_enabled(struct tracefs_instance static int trace_config_option(struct tracefs_instance *instance, enum tracefs_option_id id, bool set) { - char *set_str = set ? "1" : "0"; + const char *set_str = set ? "1" : "0"; char file[PATH_MAX]; const char *name; @@ -846,7 +846,7 @@ bool tracefs_option_is_enabled(struct tracefs_instance *instance, enum tracefs_o * Returns true if an option with given id is set in the bitmask, * false if it is not set. */ -bool tracefs_option_is_set(struct tracefs_options_mask *options, +bool tracefs_option_is_set(const struct tracefs_options_mask *options, enum tracefs_option_id id) { if (id > TRACEFS_OPTION_INVALID) From patchwork Fri Apr 2 13:19:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yordan Karadzhov X-Patchwork-Id: 12180879 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 06039C433B4 for ; Fri, 2 Apr 2021 13:20:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DBD7461103 for ; Fri, 2 Apr 2021 13:20:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235366AbhDBNUJ (ORCPT ); Fri, 2 Apr 2021 09:20:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59252 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234628AbhDBNUJ (ORCPT ); Fri, 2 Apr 2021 09:20:09 -0400 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E630FC0613E6 for ; Fri, 2 Apr 2021 06:20:07 -0700 (PDT) Received: by mail-ej1-x62f.google.com with SMTP id kt15so7389857ejb.12 for ; Fri, 02 Apr 2021 06:20:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=x8tIxns34gnz4fZ4JdmkZkTAeAO8lKWHxthoAShmqBw=; b=sdT6vodvyH1fx4lZbLZppr9nPuh5hTTBR2oCQDAUtMPZvXgENYfc2r1w4P9siKmovi 4E/jVY8C8ezw+8W31siGhyGDPGSjmW0BC1okeQ6d1uthgqFW+w5guPTxRkbTD0ZkGtip dn+a1HXHuzEJAgwbT8jrz394jLl26/9W2uTlpEkS8WKu4mWfmXjgY+nXNmotNE9Ub57h BAEk0Ihyv+gowIehoY7u8hmqyfdCv44EqkKgkM7Pm6HJqz/7ZuK2QIG8r0mYDTdmj/lp u/9vn5Wd6c8JdG5fSf9jKFN5gsYg9QDkuZfWpLggZbQ3r2vOrCBp01qK/UoRwG3h6qhZ t0og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=x8tIxns34gnz4fZ4JdmkZkTAeAO8lKWHxthoAShmqBw=; b=Xm5ewGX9MugPb5VMTtKHddg9rNXI6eN1mnlQxQEo7chSgcj6rpJYrYMNKRKnVUEm5b 8TJxWtDeyce/3QRuPmgKd4YAM0mfdrIOD8WRKP/2INCwNUYZaUr/hQYIiUNeCvqeTJwL nuZXuFtLc7PG/VhQSbk7v2D6pk4ncV8x4P4qjAsyFrtpTDzk6Pkkv9TnMKs3axPjEGEI yzz2LxjC6cKqVUIG6+vn1vSHjKsDay2eUpNGtORQR2jbg+jqUM08FRArUa4Q4GUIHI5C saI6DCkqpmyMKMjotkCyFTDebzj9KzvC7O5wNTEzVxMjxdZHlNl/dElQdew9vNP6XcAj V+YA== X-Gm-Message-State: AOAM530AkykvhC85UewfxtdksSGQmcLLwtJfk/ScSyefbs25U/HC4GPn FyZ+drRiIu0usY/gjbbHV3M= X-Google-Smtp-Source: ABdhPJwKyStFQWTmpeQb5lFN0A00Xv5ggMFs4bS1TX7fm2Vd6DqiToHGS86Ibvvw5QSm6xPR9azrpw== X-Received: by 2002:a17:906:4ada:: with SMTP id u26mr14038772ejt.129.1617369606702; Fri, 02 Apr 2021 06:20:06 -0700 (PDT) Received: from localhost.localdomain ([95.87.199.133]) by smtp.gmail.com with ESMTPSA id n3sm4120476ejj.113.2021.04.02.06.20.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Apr 2021 06:20:06 -0700 (PDT) From: "Yordan Karadzhov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org, tz.stoyanov@gmail.com, "Yordan Karadzhov (VMware)" Subject: [PATCH 6/6] libtracefs: Rename tracefs_option_is_set() Date: Fri, 2 Apr 2021 16:19:47 +0300 Message-Id: <20210402131947.346235-7-y.karadz@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210402131947.346235-1-y.karadz@gmail.com> References: <20210402131947.346235-1-y.karadz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org The old name of the function is potentially confusing. Indeed the function do not check anything about the option itself (is it supported or is it enabled). The function only check if inside the mask the bit that correspond to a given option is set. Signed-off-by: Yordan Karadzhov (VMware) --- include/tracefs.h | 4 ++-- src/tracefs-instance.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/tracefs.h b/include/tracefs.h index 9efa91a..05d2edb 100644 --- a/include/tracefs.h +++ b/include/tracefs.h @@ -132,8 +132,8 @@ enum tracefs_option_id { #define TRACEFS_OPTION_MAX (TRACEFS_OPTION_VERBOSE + 1) struct tracefs_options_mask; -bool tracefs_option_is_set(const struct tracefs_options_mask *options, - enum tracefs_option_id id); +bool tracefs_option_mask_is_set(const struct tracefs_options_mask *options, + enum tracefs_option_id id); const struct tracefs_options_mask *tracefs_options_get_supported(struct tracefs_instance *instance); bool tracefs_option_is_supported(struct tracefs_instance *instance, enum tracefs_option_id id); const struct tracefs_options_mask *tracefs_options_get_enabled(struct tracefs_instance *instance); diff --git a/src/tracefs-instance.c b/src/tracefs-instance.c index 9cb4b6d..f37b024 100644 --- a/src/tracefs-instance.c +++ b/src/tracefs-instance.c @@ -839,15 +839,15 @@ bool tracefs_option_is_enabled(struct tracefs_instance *instance, enum tracefs_o } /** - * tracefs_option_is_set - Check if given option is set in the bitmask + * tracefs_option_mask_is_set - Check if given option is set in the bitmask * @options: Options bitmask * @id: trace option id * * Returns true if an option with given id is set in the bitmask, * false if it is not set. */ -bool tracefs_option_is_set(const struct tracefs_options_mask *options, - enum tracefs_option_id id) +bool tracefs_option_mask_is_set(const struct tracefs_options_mask *options, + enum tracefs_option_id id) { if (id > TRACEFS_OPTION_INVALID) return options->mask & (1ULL << (id - 1));