[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH for-8.0 1/7] qemu/main-loop: Introduce QEMU_IOTHREAD_LOCK_GUA
From: |
Alex Bennée |
Subject: |
Re: [PATCH for-8.0 1/7] qemu/main-loop: Introduce QEMU_IOTHREAD_LOCK_GUARD |
Date: |
Fri, 18 Nov 2022 13:30:15 +0000 |
User-agent: |
mu4e 1.9.2; emacs 28.2.50 |
Richard Henderson <richard.henderson@linaro.org> writes:
> Create a wrapper for locking/unlocking the iothread lock.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com> (maintainer:Main loop)
You might want to review Paolo's comments from:
Subject: [RFC PATCH] main-loop: introduce WITH_QEMU_IOTHREAD_LOCK
Date: Mon, 24 Oct 2022 18:19:09 +0100
Message-Id: <20221024171909.434818-1-alex.bennee@linaro.org>
So it would be worth having the WITH_QEMU_IOTHREAD_LOCK() and
MAYBE_WITH_QEMU_IOTHREAD_LOCK() helpers for completeness.
And of course the name cleanup.
> ---
> include/qemu/main-loop.h | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
> index 3c9a9a982d..c25f390696 100644
> --- a/include/qemu/main-loop.h
> +++ b/include/qemu/main-loop.h
> @@ -343,6 +343,35 @@ void qemu_mutex_lock_iothread_impl(const char *file, int
> line);
> */
> void qemu_mutex_unlock_iothread(void);
>
> +/**
> + * QEMU_IOTHREAD_LOCK_GUARD
> + *
> + * Wrap a block of code in a conditional qemu_mutex_{lock,unlock}_iothread.
> + */
> +typedef struct IOThreadLockAuto IOThreadLockAuto;
> +
> +static inline IOThreadLockAuto *qemu_iothread_auto_lock(const char *file,
> + int line)
> +{
> + if (qemu_mutex_iothread_locked()) {
> + return NULL;
> + }
> + qemu_mutex_lock_iothread_impl(file, line);
> + /* Anything non-NULL causes the cleanup function to be called */
> + return (IOThreadLockAuto *)(uintptr_t)1;
> +}
> +
> +static inline void qemu_iothread_auto_unlock(IOThreadLockAuto *l)
> +{
> + qemu_mutex_unlock_iothread();
> +}
> +
> +G_DEFINE_AUTOPTR_CLEANUP_FUNC(IOThreadLockAuto, qemu_iothread_auto_unlock)
> +
> +#define QEMU_IOTHREAD_LOCK_GUARD() \
> + g_autoptr(IOThreadLockAuto) _iothread_lock_auto __attribute__((unused)) \
> + = qemu_iothread_auto_lock(__FILE__, __LINE__)
> +
> /*
> * qemu_cond_wait_iothread: Wait on condition for the main loop mutex
> *
--
Alex Bennée
[PATCH for-8.0 5/7] target/riscv: Use QEMU_IOTHREAD_LOCK_GUARD in riscv_cpu_update_mip, Richard Henderson, 2022/11/18
[PATCH for-8.0 4/7] target/ppc: Use QEMU_IOTHREAD_LOCK_GUARD in cpu_interrupt_exittb, Richard Henderson, 2022/11/18