diff mbox series

[4/4] Add QEMU command line argument to enable DSA offloading.

Message ID 20230529182001.2232069-5-hao.xiang@bytedance.com
State New
Headers show
Series Add Intel Data Streaming Accelerator offloading | expand

Commit Message

Hao Xiang May 29, 2023, 6:20 p.m. UTC
This change adds a new argument --dsa-accelerate to qemu.

Signed-off-by: Hao Xiang <hao.xiang@bytedance.com>
---
 qemu-options.hx                      | 10 ++++++++++
 softmmu/runstate.c                   |  4 ++++
 softmmu/vl.c                         | 22 ++++++++++++++++++++++
 storage-daemon/qemu-storage-daemon.c |  2 ++
 4 files changed, 38 insertions(+)
diff mbox series

Patch

diff --git a/qemu-options.hx b/qemu-options.hx
index b37eb9662b..29491ee691 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -4890,6 +4890,16 @@  SRST
         otherwise the option is ignored. Default is off.
 ERST
 
+DEF("dsa-accelerate", HAS_ARG, QEMU_OPTION_dsa,
+    "-dsa-accelerate <file>\n"
+    "                Use Intel Data Streaming Accelerator for certain QEMU\n"
+    "                operations, eg, checkpoint.\n",
+    QEMU_ARCH_I386)
+SRST
+``-dsa-accelerate path``
+    The device path to a DSA accelerator.
+ERST
+
 DEF("dump-vmstate", HAS_ARG, QEMU_OPTION_dump_vmstate,
     "-dump-vmstate <file>\n"
     "                Output vmstate information in JSON format to file.\n"
diff --git a/softmmu/runstate.c b/softmmu/runstate.c
index 2f2396c819..1f938e192f 100644
--- a/softmmu/runstate.c
+++ b/softmmu/runstate.c
@@ -41,6 +41,7 @@ 
 #include "qapi/qapi-commands-run-state.h"
 #include "qapi/qapi-events-run-state.h"
 #include "qemu/accel.h"
+#include "qemu/cutils.h"
 #include "qemu/error-report.h"
 #include "qemu/job.h"
 #include "qemu/log.h"
@@ -834,6 +835,9 @@  void qemu_cleanup(void)
     tpm_cleanup();
     net_cleanup();
     audio_cleanup();
+
+    dsa_cleanup();
+
     monitor_cleanup();
     qemu_chr_cleanup();
     user_creatable_cleanup();
diff --git a/softmmu/vl.c b/softmmu/vl.c
index b0b96f67fa..8ace491183 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -161,6 +161,7 @@  static const char *mem_path;
 static const char *incoming;
 static const char *loadvm;
 static const char *accelerators;
+static const char *dsa_path;
 static bool have_custom_ram_size;
 static const char *ram_memdev_id;
 static QDict *machine_opts_dict;
@@ -373,6 +374,20 @@  static QemuOptsList qemu_msg_opts = {
     },
 };
 
+static QemuOptsList qemu_dsa_opts = {
+    .name = "dsa-accelerate",
+    .head = QTAILQ_HEAD_INITIALIZER(qemu_dsa_opts.head),
+    .desc = {
+        {
+            .name = "device",
+            .type = QEMU_OPT_STRING,
+            .help = "The device path to DSA accelerator used for certain "
+                    "QEMU operations, eg, checkpoint\n",
+        },
+        { /* end of list */ }
+    },
+};
+
 static QemuOptsList qemu_name_opts = {
     .name = "name",
     .implied_opt_name = "guest",
@@ -2704,6 +2719,7 @@  void qemu_init(int argc, char **argv)
     qemu_add_opts(&qemu_semihosting_config_opts);
     qemu_add_opts(&qemu_fw_cfg_opts);
     qemu_add_opts(&qemu_action_opts);
+    qemu_add_opts(&qemu_dsa_opts);
     module_call_init(MODULE_INIT_OPTS);
 
     error_init(argv[0]);
@@ -3504,6 +3520,12 @@  void qemu_init(int argc, char **argv)
                 }
                 configure_msg(opts);
                 break;
+            case QEMU_OPTION_dsa:
+                dsa_path = optarg;
+                if (configure_dsa(dsa_path)) {
+                    exit(1);
+                }
+                break;
             case QEMU_OPTION_dump_vmstate:
                 if (vmstate_dump_file) {
                     error_report("only one '-dump-vmstate' "
diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-storage-daemon.c
index 0e9354faa6..0e4375407a 100644
--- a/storage-daemon/qemu-storage-daemon.c
+++ b/storage-daemon/qemu-storage-daemon.c
@@ -439,6 +439,8 @@  int main(int argc, char *argv[])
     job_cancel_sync_all();
     bdrv_close_all();
 
+    dsa_cleanup();
+
     monitor_cleanup();
     qemu_chr_cleanup();
     user_creatable_cleanup();