[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/3] coroutine: Add qemu_co_mutex_assert_locked()
From: |
Kevin Wolf |
Subject: |
Re: [PATCH 1/3] coroutine: Add qemu_co_mutex_assert_locked() |
Date: |
Thu, 24 Oct 2019 12:54:11 +0200 |
User-agent: |
Mutt/1.12.1 (2019-06-15) |
Am 24.10.2019 um 11:59 hat Denis Lunev geschrieben:
> On 10/23/19 6:26 PM, Kevin Wolf wrote:
> > Some functions require that the caller holds a certain CoMutex for them
> > to operate correctly. Add a function so that they can assert the lock is
> > really held.
> >
> > Cc: address@hidden
> > Signed-off-by: Kevin Wolf <address@hidden>
> > ---
> > include/qemu/coroutine.h | 7 +++++++
> > 1 file changed, 7 insertions(+)
> >
> > diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
> > index 9801e7f5a4..a36bcfe5c8 100644
> > --- a/include/qemu/coroutine.h
> > +++ b/include/qemu/coroutine.h
> > @@ -167,6 +167,13 @@ void coroutine_fn qemu_co_mutex_lock(CoMutex *mutex);
> > */
> > void coroutine_fn qemu_co_mutex_unlock(CoMutex *mutex);
> >
> > +/**
> > + * Assert that the current coroutine holds @mutex.
> > + */
> > +static inline coroutine_fn void qemu_co_mutex_assert_locked(CoMutex *mutex)
> > +{
> > + assert(mutex->locked && mutex->holder == qemu_coroutine_self());
> > +}
> >
> > /**
> > * CoQueues are a mechanism to queue coroutines in order to continue
> > executing
> I think that we should use atomic_read(&mutex->locked) and require barriers
> working with holder.
Hm, this would only be necessary for the case that the assertion doesn't
hold true. I'll do the atomic_read() because it's easy enough, but I
don't think we need or want barriers here. If another thread modifies
this concurrently, the condition is false either way.
Kevin