linux-trace-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Yordan Karadzhov <y.karadz@gmail.com>
Cc: Tzvetomir Stoyanov <tz.stoyanov@gmail.com>,
	Linux Trace Devel <linux-trace-devel@vger.kernel.org>
Subject: Re: [PATCH 5/6] libtracefs: Option's bit masks to be owned by the instance
Date: Mon, 5 Apr 2021 11:10:33 -0400	[thread overview]
Message-ID: <20210405111033.4d45bf65@gandalf.local.home> (raw)
In-Reply-To: <8b7346e2-2ce3-0d8b-caab-dd873f00dde6@gmail.com>

On Mon, 5 Apr 2021 18:01:41 +0300
Yordan Karadzhov <y.karadz@gmail.com> wrote:

> > This makes the API not thread safe. There should be no problem with
> > supported options, as they cannot be changed at runtime. I think it is
> > OK to limit the APIs , as I see no use case to call them from multiple
> > threads on the same instance, but this should be described in the
> > documentation.  
> 
> Discussing is this API is thread safe or not is not really relevant. 
> Even if you make tracefs_options_get_enabled() thread safe, this does 
> not change anything since the options can be already changed by the time 
> when you examine the bits of the mask.

You are correct, but you also do not want the update of the bitmask to be
corrupted. Thus I think a pthread_mutex() should be added to the updating
of the value, such that we don't have a read/modify/write corruption. Sure
the reader of the mask may get some stale data if its being updated. But it
shouldn't get corrupted data.


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));
}

If two threads are doing this to the same mask, you can have an option set
that gets cleared by another writer, and even though the option is set
after the call, it will be clear in the mask. That is, it's not stale data,
it's incorrect data. That is, the readers after that corruption will get an
option not set, even though it is.

-- Steve

  reply	other threads:[~2021-04-05 15:10 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-02 13:19 [PATCH 0/6] Refactor the APIs for tracing options Yordan Karadzhov (VMware)
2021-04-02 13:19 ` [PATCH 1/6] libtracefs: Fix issues with tracefs_option_id() Yordan Karadzhov (VMware)
2021-04-02 13:19 ` [PATCH 2/6] libtracefs: Modify the arguments of tracefs_option_is_set() Yordan Karadzhov (VMware)
2021-04-02 13:19 ` [PATCH 3/6] libtracefs: Encapsulate "struct tracefs_options_mask" Yordan Karadzhov (VMware)
2021-04-02 14:13   ` Steven Rostedt
2021-04-02 13:19 ` [PATCH 4/6] libtracefs: Move the "options" code to tracefs-instance.c Yordan Karadzhov (VMware)
2021-04-02 14:17   ` Steven Rostedt
2021-04-02 14:20     ` Steven Rostedt
2021-04-02 16:01     ` Yordan Karadzhov
2021-04-02 13:19 ` [PATCH 5/6] libtracefs: Option's bit masks to be owned by the instance Yordan Karadzhov (VMware)
2021-04-05 10:50   ` Tzvetomir Stoyanov
2021-04-05 15:01     ` Yordan Karadzhov
2021-04-05 15:10       ` Steven Rostedt [this message]
2021-04-05 10:56   ` Tzvetomir Stoyanov
2021-04-05 15:03     ` Yordan Karadzhov
2021-04-02 13:19 ` [PATCH 6/6] libtracefs: Rename tracefs_option_is_set() Yordan Karadzhov (VMware)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210405111033.4d45bf65@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=tz.stoyanov@gmail.com \
    --cc=y.karadz@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).