From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: quintela@redhat.com, berrange@redhat.com, qemu-devel@nongnu.org,
ehabkost@redhat.com
Subject: Re: [Qemu-devel] [PATCH v3 1/5] rcu: Add automatically released rcu_read_lock variants
Date: Fri, 13 Sep 2019 19:45:05 +0100 [thread overview]
Message-ID: <20190913184505.GG2682@work-vm> (raw)
In-Reply-To: <db74dc28-361e-a3a6-218d-0cedb83ee21d@redhat.com>
* Paolo Bonzini (pbonzini@redhat.com) wrote:
> On 13/09/19 12:25, Dr. David Alan Gilbert (git) wrote:
> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> >
> > RCU_READ_LOCK_GUARD() takes the rcu_read_lock and then uses glib's
> > g_auto infrastructure (and thus whatever the compiler's hooks are) to
> > release it on all exits of the block.
> >
> > WITH_RCU_READ_LOCK_GUARD() is similar but is used as a wrapper for the
> > lock, i.e.:
> >
> > WITH_RCU_READ_LOCK_GUARD() {
> > stuff under lock
> > }
> >
> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > ---
> > docs/devel/rcu.txt | 16 ++++++++++++++++
> > include/qemu/rcu.h | 25 +++++++++++++++++++++++++
> > 2 files changed, 41 insertions(+)
> >
> > diff --git a/docs/devel/rcu.txt b/docs/devel/rcu.txt
> > index c84e7f42b2..d83fed2f79 100644
> > --- a/docs/devel/rcu.txt
> > +++ b/docs/devel/rcu.txt
> > @@ -187,6 +187,22 @@ The following APIs must be used before RCU is used in a thread:
> > Note that these APIs are relatively heavyweight, and should _not_ be
> > nested.
> >
> > +Convenience macros
> > +==================
> > +
> > +Two macros are provided that automatically release the read lock at the
> > +end of the scope.
> > +
> > + RCU_READ_LOCK_GUARD()
> > +
> > + Takes the lock and will release it at the end of the block it's
> > + used in.
> > +
> > + WITH_RCU_READ_LOCK_GUARD() { code }
> > +
> > + Is used at the head of a block to protect the code within the block.
> > +
> > +Note that 'goto'ing out of the guarded block will also drop the lock.
> >
> > DIFFERENCES WITH LINUX
> > ======================
> > diff --git a/include/qemu/rcu.h b/include/qemu/rcu.h
> > index 22876d1428..3a8d4cf28b 100644
> > --- a/include/qemu/rcu.h
> > +++ b/include/qemu/rcu.h
> > @@ -154,6 +154,31 @@ extern void call_rcu1(struct rcu_head *head, RCUCBFunc *func);
> > }), \
> > (RCUCBFunc *)g_free);
> >
> > +typedef void RCUReadAuto;
> > +static inline RCUReadAuto *rcu_read_auto_lock(void)
> > +{
> > + rcu_read_lock();
> > + /* Anything non-NULL causes the cleanup function to be called */
> > + return (void *)(uintptr_t)0x1;
> > +}
> > +
> > +static inline void rcu_read_auto_unlock(RCUReadAuto *r)
> > +{
> > + rcu_read_unlock();
> > +}
> > +
> > +G_DEFINE_AUTOPTR_CLEANUP_FUNC(RCUReadAuto, rcu_read_auto_unlock)
> > +
> > +#define WITH_RCU_READ_LOCK_GUARD() \
> > + WITH_RCU_READ_LOCK_GUARD_(_rcu_read_auto##__COUNTER__)
> > +
> > +#define WITH_RCU_READ_LOCK_GUARD_(var) \
> > + for (g_autoptr(RCUReadAuto) var = rcu_read_auto_lock(); \
> > + (var); rcu_read_auto_unlock(var), (var) = NULL)
> > +
> > +#define RCU_READ_LOCK_GUARD() \
> > + g_autoptr(RCUReadAuto) _rcu_read_auto = rcu_read_auto_lock()
> > +
> > #ifdef __cplusplus
> > }
> > #endif
> >
>
> Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Can you look at the other bits of this series and tell me if they're OK?
If they are, do you want to take them (since it's RCU based)?
Dave
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2019-09-13 18:46 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-13 10:25 [Qemu-devel] [PATCH v3 0/5] Automatic RCU read unlock Dr. David Alan Gilbert (git)
2019-09-13 10:25 ` [Qemu-devel] [PATCH v3 1/5] rcu: Add automatically released rcu_read_lock variants Dr. David Alan Gilbert (git)
2019-09-13 12:01 ` Paolo Bonzini
2019-09-13 18:45 ` Dr. David Alan Gilbert [this message]
2019-09-19 17:31 ` Daniel P. Berrangé
2019-09-13 10:25 ` [Qemu-devel] [PATCH v3 2/5] migration: Fix missing rcu_read_unlock Dr. David Alan Gilbert (git)
2019-09-19 17:32 ` Daniel P. Berrangé
2019-09-13 10:25 ` [Qemu-devel] [PATCH v3 3/5] migration: Use automatic rcu_read unlock in ram.c Dr. David Alan Gilbert (git)
2019-09-19 17:33 ` Daniel P. Berrangé
2019-09-13 10:25 ` [Qemu-devel] [PATCH v3 4/5] migration: Use automatic rcu_read unlock in rdma.c Dr. David Alan Gilbert (git)
2019-09-19 17:34 ` Daniel P. Berrangé
2019-09-13 10:25 ` [Qemu-devel] [PATCH v3 5/5] rcu: Use automatic rc_read unlock in core memory/exec code Dr. David Alan Gilbert (git)
2019-09-19 17:35 ` Daniel P. Berrangé
2019-09-25 10:32 ` [Qemu-devel] [PATCH v3 0/5] Automatic RCU read unlock Dr. David Alan Gilbert
2019-09-25 13:13 ` Dr. David Alan Gilbert
2019-09-25 13:21 ` Paolo Bonzini
2019-09-25 15:28 ` Dr. David Alan Gilbert
2019-09-25 15:49 ` Daniel P. Berrangé
2019-09-25 16:47 ` Paolo Bonzini
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=20190913184505.GG2682@work-vm \
--to=dgilbert@redhat.com \
--cc=berrange@redhat.com \
--cc=ehabkost@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@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.