]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
util/defer-call: move defer_call() to util/
authorStefan Hajnoczi <stefanha@redhat.com>
Wed, 13 Sep 2023 20:00:43 +0000 (16:00 -0400)
committerKevin Wolf <kwolf@redhat.com>
Tue, 31 Oct 2023 14:41:42 +0000 (15:41 +0100)
The networking subsystem may wish to use defer_call(), so move the code
to util/ where it can be reused.

As a reminder of what defer_call() does:

This API defers a function call within a defer_call_begin()/defer_call_end()
section, allowing multiple calls to batch up. This is a performance
optimization that is used in the block layer to submit several I/O requests
at once instead of individually:

  defer_call_begin(); <-- start of section
  ...
  defer_call(my_func, my_obj); <-- deferred my_func(my_obj) call
  defer_call(my_func, my_obj); <-- another
  defer_call(my_func, my_obj); <-- another
  ...
  defer_call_end(); <-- end of section, my_func(my_obj) is called once

Suggested-by: Ilya Maximets <i.maximets@ovn.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-ID: <20230913200045.1024233-3-stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
13 files changed:
MAINTAINERS
block/blkio.c
block/io_uring.c
block/linux-aio.c
block/meson.build
block/nvme.c
hw/block/dataplane/xen-block.c
hw/block/virtio-blk.c
hw/scsi/virtio-scsi.c
include/qemu/defer-call.h [new file with mode: 0644]
include/sysemu/block-backend-io.h
util/defer-call.c [moved from block/plug.c with 99% similarity]
util/meson.build

index cd8d6b140f4662e0bccde38e4341dc37edd0ada4..018ed62560f94ecfef5ff1d1dbeb7b550b3f8186 100644 (file)
@@ -2755,12 +2755,13 @@ S: Supported
 F: util/async.c
 F: util/aio-*.c
 F: util/aio-*.h
+F: util/defer-call.c
 F: util/fdmon-*.c
 F: block/io.c
-F: block/plug.c
 F: migration/block*
 F: include/block/aio.h
 F: include/block/aio-wait.h
+F: include/qemu/defer-call.h
 F: scripts/qemugdb/aio.py
 F: tests/unit/test-fdmon-epoll.c
 T: git https://github.com/stefanha/qemu.git block
index 7cf6d61f473ee6a99d68ec5e78a7eae3a3c0cff3..0a0a6c0f5fde6ae874982671dbe9842d2d8c70e0 100644 (file)
@@ -13,6 +13,7 @@
 #include "block/block_int.h"
 #include "exec/memory.h"
 #include "exec/cpu-common.h" /* for qemu_ram_get_fd() */
+#include "qemu/defer-call.h"
 #include "qapi/error.h"
 #include "qemu/error-report.h"
 #include "qapi/qmp/qdict.h"
index 8429f341be7c3affcdea11879f353e28cd3204b4..3a1e1f45b3cd318e1c2cc41ab88df580fae3725b 100644 (file)
@@ -15,6 +15,7 @@
 #include "block/block.h"
 #include "block/raw-aio.h"
 #include "qemu/coroutine.h"
+#include "qemu/defer-call.h"
 #include "qapi/error.h"
 #include "sysemu/block-backend.h"
 #include "trace.h"
index 49a37174c273c7f82f4f7d6415d34b9322281512..a2670b3e46269109eb253ac6b89dae1250c8d6a6 100644 (file)
@@ -14,6 +14,7 @@
 #include "block/raw-aio.h"
 #include "qemu/event_notifier.h"
 #include "qemu/coroutine.h"
+#include "qemu/defer-call.h"
 #include "qapi/error.h"
 #include "sysemu/block-backend.h"
 
index f351b9d0d3327554557829c64991a668eb5de12c..59ff6d380c041e415e0e49f127e787c94faa301e 100644 (file)
@@ -21,7 +21,6 @@ block_ss.add(files(
   'mirror.c',
   'nbd.c',
   'null.c',
-  'plug.c',
   'preallocate.c',
   'progress_meter.c',
   'qapi.c',
index dfbd1085fdbb1df9a4de6953772b56a172c7fe00..96b3f8f2fa1dcc19cde155e00d790907119f2380 100644 (file)
@@ -16,6 +16,7 @@
 #include "qapi/error.h"
 #include "qapi/qmp/qdict.h"
 #include "qapi/qmp/qstring.h"
+#include "qemu/defer-call.h"
 #include "qemu/error-report.h"
 #include "qemu/main-loop.h"
 #include "qemu/module.h"
index e9dd8f8a996c04ffe7bfcb3e8e107c039c2ac2c9..c4bb28c66fede684b4a6ee02a2b89009f64869bc 100644 (file)
@@ -19,6 +19,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "qemu/defer-call.h"
 #include "qemu/error-report.h"
 #include "qemu/main-loop.h"
 #include "qemu/memalign.h"
index 6a45033d151a9dd3d377f1de80f9943096a1be0b..a1f8e155227591fb428f065d11658f133e348a6b 100644 (file)
@@ -12,6 +12,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "qemu/defer-call.h"
 #include "qapi/error.h"
 #include "qemu/iov.h"
 #include "qemu/module.h"
index 42fcbcb45f182b88666292199937728665fbf9f3..9c751bf29699697e40a24bc5149583f9380b7cee 100644 (file)
@@ -18,6 +18,7 @@
 #include "standard-headers/linux/virtio_ids.h"
 #include "hw/virtio/virtio-scsi.h"
 #include "migration/qemu-file-types.h"
+#include "qemu/defer-call.h"
 #include "qemu/error-report.h"
 #include "qemu/iov.h"
 #include "qemu/module.h"
diff --git a/include/qemu/defer-call.h b/include/qemu/defer-call.h
new file mode 100644 (file)
index 0000000..e2c1d24
--- /dev/null
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Deferred calls
+ *
+ * Copyright Red Hat.
+ */
+
+#ifndef QEMU_DEFER_CALL_H
+#define QEMU_DEFER_CALL_H
+
+/* See documentation in util/defer-call.c */
+void defer_call_begin(void);
+void defer_call_end(void);
+void defer_call(void (*fn)(void *), void *opaque);
+
+#endif /* QEMU_DEFER_CALL_H */
index cfcfd85c1d24d1b28ae689d236c9b317ee618938..d174275a5cb6bb5926cee22fc1a2e6afd99f2e5f 100644 (file)
@@ -100,10 +100,6 @@ void blk_iostatus_set_err(BlockBackend *blk, int error);
 int blk_get_max_iov(BlockBackend *blk);
 int blk_get_max_hw_iov(BlockBackend *blk);
 
-void defer_call_begin(void);
-void defer_call_end(void);
-void defer_call(void (*fn)(void *), void *opaque);
-
 AioContext *blk_get_aio_context(BlockBackend *blk);
 BlockAcctStats *blk_get_stats(BlockBackend *blk);
 void *blk_aio_get(const AIOCBInfo *aiocb_info, BlockBackend *blk,
similarity index 99%
rename from block/plug.c
rename to util/defer-call.c
index f26173559c1f1d8c5ae4f77badbcf70da71d1337..037dc0abf0a6850664fccf26c6c2e84edaec6ba0 100644 (file)
@@ -22,7 +22,7 @@
 #include "qemu/coroutine-tls.h"
 #include "qemu/notify.h"
 #include "qemu/thread.h"
-#include "sysemu/block-backend.h"
+#include "qemu/defer-call.h"
 
 /* A function call that has been deferred until defer_call_end() */
 typedef struct {
index c4827fd70aa241d4c3ba7a868b2e4ed253b26a8e..769b24f2e0df23a755a4ed460c5d67cfc49aa4c4 100644 (file)
@@ -28,6 +28,7 @@ util_ss.add(when: 'CONFIG_WIN32', if_true: pathcch)
 if glib_has_gslice
   util_ss.add(files('qtree.c'))
 endif
+util_ss.add(files('defer-call.c'))
 util_ss.add(files('envlist.c', 'path.c', 'module.c'))
 util_ss.add(files('host-utils.c'))
 util_ss.add(files('bitmap.c', 'bitops.c'))