From: Kevin Wolf <kwolf@redhat.com>
To: Stefan Hajnoczi <stefanha@gmail.com>
Cc: "Warner Losh" <imp@bsdimp.com>,
"Emanuele Giuseppe Esposito" <eesposit@redhat.com>,
qemu-devel@nongnu.org, "Kyle Evans" <kevans@freebsd.org>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Thomas Huth" <thuth@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>
Subject: Re: [PATCH 2/3] bsd-user/mmap: use TSA_NO_TSA to suppress clang TSA warnings
Date: Wed, 18 Jan 2023 10:14:52 +0100 [thread overview]
Message-ID: <Y8e4jMqs3wR0lgpn@redhat.com> (raw)
In-Reply-To: <CAJSP0QUedwNbm1cXdU90TSgCmdiV4=Fi0THXg7u6yVhDegtQEA@mail.gmail.com>
Am 17.01.2023 um 21:43 hat Stefan Hajnoczi geschrieben:
> On Tue, 17 Jan 2023 at 12:17, Kevin Wolf <kwolf@redhat.com> wrote:
> >
> > Am 17.01.2023 um 17:43 hat Warner Losh geschrieben:
> > > On Tue, Jan 17, 2023 at 9:25 AM Kevin Wolf <kwolf@redhat.com> wrote:
> > >
> > > > Am 17.01.2023 um 17:16 hat Warner Losh geschrieben:
> > > > > On Tue, Jan 17, 2023 at 6:52 AM Emanuele Giuseppe Esposito <
> > > > > eesposit@redhat.com> wrote:
> > > > >
> > > > > > QEMU does not compile when enabling clang's thread safety analysis
> > > > > > (TSA),
> > > > > > because some functions create wrappers for pthread mutexes but do
> > > > > > not use any TSA macro. Therefore the compiler fails.
> > > > > >
> > > > > > In order to make the compiler happy and avoid adding all the
> > > > > > necessary macros to all callers (lock functions should use
> > > > > > TSA_ACQUIRE, while unlock TSA_RELEASE, and this applies to allusers of
> > > > > > pthread_mutex_lock/pthread_mutex_unlock),
> > > > > > simply use TSA_NO_TSA to supppress such warnings.
> > > > >
> > > > > I'm not sure I understand this quite right. Maybe a clarifying question
> > > > > will help me understand: Why is this needed for bsd-user but not
> > > > > linux-user? How are they different here?
> > > >
> > > > FreeBSD's pthread headers include TSA annotations for some functions
> > > > that force us to do something about them (for now: suppress the warnings
> > > > in their callers) before we can enable -Wthread-safety for the purposes
> > > > where we really want it. Without this, calling functions like
> > > > pthread_mutex_lock() would cause compiler errors.
> > > >
> > > > glibc's headers don't contain such annotations, so the same is not
> > > > necessary on Linux
> > > >
> > >
> > > Thanks Kevin. With that explanation, these patches and their explanation
> > > make perfect sense now. Often when there's a patch to bsd-user but not
> > > linux-user, it's because bsd-user needs to do more in some way (which I try
> > > to keep up on).
> > >
> > > In this case, it's because FreeBSD's libc is a bit ahead of the curve. So I
> > > understand why it's needed, and what I need to do next (though I think that
> > > I may have to wait for the rest of qemu to be annotated)...
> >
> > I assume that the bsd-user part is actually sufficiently independent
> > that you could do proper annotations there if you want.
> >
> > However, be aware that TSA has some serious limitations with C, so you
> > can't express certain things, and it isn't as strict as it could be (in
> > particular, function pointers bypass it). As long as you have global
> > locks (as opposed to locks in structs), it kind of works, though.
> > Certainly better than nothing.
>
> What are the limitations on locks in structs (a common case)?
TSA_GUARDED_BY() can't refer to a mutex in the same struct in C. You
would have to have something like 'this', but it just doesn't exist. (I
think in C++ you don't actually need 'this' because name resolution
automatically starts at the struct or something - I neither know C++
well enough nor TSA with it, so take this with a grain of salt.)
You can still annotate functions for such structs in C, because then you
have a name for the struct, like this:
void lock(Foo *foo) TSA_REQUIRES(foo->mutex);
Kevin
next prev parent reply other threads:[~2023-01-18 9:15 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-17 13:52 [PATCH 0/3] TSA: make sure QEMU compiles when using clang TSA Emanuele Giuseppe Esposito
2023-01-17 13:52 ` [PATCH 1/3] util/qemu-thread-posix: use TSA_NO_TSA to suppress clang TSA warnings Emanuele Giuseppe Esposito
2023-01-17 14:33 ` Philippe Mathieu-Daudé
2023-01-17 14:43 ` Emanuele Giuseppe Esposito
2023-01-17 15:49 ` Philippe Mathieu-Daudé
2023-01-17 13:52 ` [PATCH 2/3] bsd-user/mmap: " Emanuele Giuseppe Esposito
2023-01-17 16:16 ` Warner Losh
2023-01-17 16:21 ` Emanuele Giuseppe Esposito
2023-01-17 16:25 ` Kevin Wolf
2023-01-17 16:43 ` Warner Losh
2023-01-17 17:17 ` Kevin Wolf
2023-01-17 20:43 ` Stefan Hajnoczi
2023-01-18 9:14 ` Kevin Wolf [this message]
2023-01-18 12:31 ` Stefan Hajnoczi
2023-01-18 15:12 ` Emanuele Giuseppe Esposito
2023-01-18 15:24 ` Stefan Hajnoczi
2023-01-18 17:35 ` Warner Losh
2023-01-17 16:32 ` Stefan Hajnoczi
2023-01-17 13:52 ` [PATCH 3/3] configure: Enable -Wthread-safety if present Emanuele Giuseppe Esposito
2023-01-17 14:02 ` Daniel P. Berrangé
2023-01-17 14:41 ` Emanuele Giuseppe Esposito
2023-01-17 15:01 ` Daniel P. Berrangé
2023-01-17 15:59 ` Kevin Wolf
2023-01-17 16:22 ` [PATCH 0/3] TSA: make sure QEMU compiles when using clang TSA Stefan Hajnoczi
2023-02-13 10:44 ` Kevin Wolf
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=Y8e4jMqs3wR0lgpn@redhat.com \
--to=kwolf@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=eesposit@redhat.com \
--cc=imp@bsdimp.com \
--cc=kevans@freebsd.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=stefanha@gmail.com \
--cc=stefanha@redhat.com \
--cc=thuth@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.