From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
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 [thread overview]
Message-ID: <87fseg757a.fsf@linaro.org> (raw)
In-Reply-To: <20221118091858.242569-2-richard.henderson@linaro.org>
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
next prev parent reply other threads:[~2022-11-18 13:39 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-18 9:18 [PATCH for-8.0 0/7] main-loop: Introduce QEMU_IOTHREAD_LOCK_GUARD Richard Henderson
2022-11-18 9:18 ` [PATCH for-8.0 1/7] qemu/main-loop: " Richard Henderson
2022-11-18 13:30 ` Alex Bennée
2022-11-20 23:30 ` Richard Henderson
2022-11-21 9:55 ` Alex Bennée
2022-11-21 11:05 ` Philippe Mathieu-Daudé
2022-11-18 13:38 ` Alex Bennée [this message]
2022-11-18 18:22 ` Richard Henderson
2022-11-18 9:18 ` [PATCH for-8.0 2/7] hw/mips: Use QEMU_IOTHREAD_LOCK_GUARD in cpu_mips_irq_request Richard Henderson
2022-11-21 10:55 ` Philippe Mathieu-Daudé
2022-11-18 9:18 ` [PATCH for-8.0 3/7] target/ppc: Use QEMU_IOTHREAD_LOCK_GUARD in ppc_maybe_interrupt Richard Henderson
2022-11-18 10:12 ` Daniel Henrique Barboza
2022-11-21 10:56 ` Philippe Mathieu-Daudé
2022-11-18 9:18 ` [PATCH for-8.0 4/7] target/ppc: Use QEMU_IOTHREAD_LOCK_GUARD in cpu_interrupt_exittb Richard Henderson
2022-11-18 10:13 ` Daniel Henrique Barboza
2022-11-18 10:35 ` Richard Henderson
2022-11-21 10:57 ` Philippe Mathieu-Daudé
2022-11-18 9:18 ` [PATCH for-8.0 5/7] target/riscv: Use QEMU_IOTHREAD_LOCK_GUARD in riscv_cpu_update_mip Richard Henderson
2022-11-20 23:18 ` Alistair Francis
2022-11-21 10:56 ` Philippe Mathieu-Daudé
2022-11-18 9:18 ` [PATCH for-8.0 6/7] hw/ppc: Use QEMU_IOTHREAD_LOCK_GUARD in ppc_set_irq Richard Henderson
2022-11-18 10:14 ` Daniel Henrique Barboza
2022-11-21 10:57 ` Philippe Mathieu-Daudé
2022-11-18 9:18 ` [PATCH for-8.0 7/7] accel/tcg: Use QEMU_IOTHREAD_LOCK_GUARD in io_readx/io_writex Richard Henderson
2022-11-21 11:02 ` Philippe Mathieu-Daudé
2022-11-18 9:36 ` [PATCH for-8.0 0/7] main-loop: Introduce QEMU_IOTHREAD_LOCK_GUARD 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=87fseg757a.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/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.