Re: [PATCH 5/6] libtracefs: Option's bit masks to be owned by the instance

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 5.04.21 г. 13:56, Tzvetomir Stoyanov wrote:
On Fri, Apr 2, 2021 at 4:20 PM Yordan Karadzhov (VMware)
<y.karadz@xxxxxxxxx> wrote:
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) <y.karadz@xxxxxxxxx>
---
  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 <tracefs.h>
  ...
-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;
The "instance" argument can be NULL, for the top instance. There
should be global enabled_opts and supported_opts, to be used in that
case.

Yes, this is a bug and I have it in v2 as well. Seems like I will need to send v3.

Thanks a lot!

Y.




[..]





[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux