[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:38:04 +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)
> ---
> 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;
Oh hang on, what black magic is this. Does the compiler do a NULL check
before calling the cleanup?
> +}
> +
> +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 2/7] hw/mips: Use QEMU_IOTHREAD_LOCK_GUARD in cpu_mips_irq_request, (continued)
- Re: [PATCH for-8.0 1/7] qemu/main-loop: Introduce QEMU_IOTHREAD_LOCK_GUARD,
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
[PATCH for-8.0 6/7] hw/ppc: Use QEMU_IOTHREAD_LOCK_GUARD in ppc_set_irq, Richard Henderson, 2022/11/18