From: Emanuele Giuseppe Esposito <eesposit@redhat.com>
To: qemu-block@nongnu.org
Cc: "Kevin Wolf" <kwolf@redhat.com>, "Fam Zheng" <fam@euphon.net>,
"Vladimir Sementsov-Ogievskiy" <vsementsov@virtuozzo.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Juan Quintela" <quintela@redhat.com>,
qemu-devel@nongnu.org, "John Snow" <jsnow@redhat.com>,
"Emanuele Giuseppe Esposito" <eesposit@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Markus Armbruster" <armbru@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Hanna Reitz" <hreitz@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Eric Blake" <eblake@redhat.com>
Subject: [PATCH v8 02/31] main loop: macros to mark GS and I/O functions
Date: Thu, 3 Mar 2022 10:15:47 -0500 [thread overview]
Message-ID: <20220303151616.325444-3-eesposit@redhat.com> (raw)
In-Reply-To: <20220303151616.325444-1-eesposit@redhat.com>
Righ now, IO_CODE and IO_OR_GS_CODE are nop, as there isn't
really a way to check that a function is only called in I/O.
On the other side, we can use qemu_in_main_thread() to check if
we are in the main loop.
The usage of macros makes easy to extend them in the future without
making changes in all callers. They will also visually help understanding
in which category each function is, without looking at the header.
Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
---
include/qemu/main-loop.h | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h
index bc42b5939d..7a4d6a0920 100644
--- a/include/qemu/main-loop.h
+++ b/include/qemu/main-loop.h
@@ -269,6 +269,24 @@ bool qemu_mutex_iothread_locked(void);
*/
bool qemu_in_main_thread(void);
+/* Mark and check that the function is part of the global state API. */
+#define GLOBAL_STATE_CODE() \
+ do { \
+ assert(qemu_in_main_thread()); \
+ } while (0)
+
+/* Mark and check that the function is part of the I/O API. */
+#define IO_CODE() \
+ do { \
+ /* nop */ \
+ } while (0)
+
+/* Mark and check that the function is part of the "I/O OR GS" API. */
+#define IO_OR_GS_CODE() \
+ do { \
+ /* nop */ \
+ } while (0)
+
/**
* qemu_mutex_lock_iothread: Lock the main loop mutex.
*
--
2.31.1
next prev parent reply other threads:[~2022-03-03 15:25 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-03 15:15 [PATCH v8 00/31] block layer: split block APIs in global state and I/O Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 01/31] main-loop.h: introduce qemu_in_main_thread() Emanuele Giuseppe Esposito
2022-03-03 15:15 ` Emanuele Giuseppe Esposito [this message]
2022-03-03 15:15 ` [PATCH v8 03/31] include/block/block: split header into I/O and global state API Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 04/31] assertions for block " Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 05/31] IO_CODE and IO_OR_GS_CODE for block I/O API Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 06/31] block/export/fuse.c: allow writable exports to take RESIZE permission Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 07/31] include/sysemu/block-backend: split header into I/O and global state (GS) API Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 08/31] block/block-backend.c: assertions for block-backend Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 09/31] IO_CODE and IO_OR_GS_CODE for block-backend I/O API Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 10/31] block.c: assertions to the block layer permissions API Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 11/31] include/block/block_int: split header into I/O and global state API Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 12/31] assertions for block_int " Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 13/31] IO_CODE and IO_OR_GS_CODE for block_int I/O API Emanuele Giuseppe Esposito
2022-03-03 15:15 ` [PATCH v8 14/31] block: introduce assert_bdrv_graph_writable Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 15/31] include/block/blockjob_int.h: split header into I/O and GS API Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 16/31] GS and IO CODE macros for blockjob_int.h Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 17/31] block.c: add assertions to static functions Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 18/31] include/block/blockjob.h: global state API Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 19/31] assertions for blockjob.h " Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 20/31] include/sysemu/blockdev.h: " Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 21/31] assertions for blockdev.h " Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 22/31] include/block/snapshot: global state API + assertions Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 23/31] block/copy-before-write.h: " Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 24/31] block/coroutines: I/O and "I/O or GS" API Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 25/31] block_int-common.h: split function pointers in BlockDriver Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 26/31] block_int-common.h: assertions in the callers of BlockDriver function pointers Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 27/31] block_int-common.h: split function pointers in BdrvChildClass Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 28/31] block_int-common.h: assertions in the callers of BdrvChildClass function pointers Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 29/31] block-backend-common.h: split function pointers in BlockDevOps Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 30/31] job.h: split function pointers in JobDriver Emanuele Giuseppe Esposito
2022-03-03 15:16 ` [PATCH v8 31/31] job.h: assertions in the callers of JobDriver function pointers Emanuele Giuseppe Esposito
2022-03-04 10:51 ` [PATCH v8 00/31] block layer: split block APIs in global state and I/O Kevin Wolf
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=20220303151616.325444-3-eesposit@redhat.com \
--to=eesposit@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=eduardo@habkost.net \
--cc=fam@euphon.net \
--cc=hreitz@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=richard.henderson@linaro.org \
--cc=stefanha@redhat.com \
--cc=vsementsov@virtuozzo.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).