All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <f4bug@amsat.org>
To: qemu-devel@nongnu.org
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: [RFC PATCH 14/15] softmmu/cpus: Extract QMP command handlers to cpus-qmp.c
Date: Mon, 17 May 2021 13:55:24 +0200	[thread overview]
Message-ID: <20210517115525.1088693-15-f4bug@amsat.org> (raw)
In-Reply-To: <20210517115525.1088693-1-f4bug@amsat.org>

qmp_memsave() and qmp_pmemsave() call cpu_memory_rw_debug()
and cpu_physical_memory_read(), which are target specific
prototypes. To be able to build softmmu/cpus.c once for
all targets, extract the QMP commands handlers to a new
file which will be built per target.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 softmmu/cpus-qmp.c  | 115 ++++++++++++++++++++++++++++++++++++++++++++
 softmmu/cpus.c      |  89 ----------------------------------
 softmmu/meson.build |   1 +
 3 files changed, 116 insertions(+), 89 deletions(-)
 create mode 100644 softmmu/cpus-qmp.c

diff --git a/softmmu/cpus-qmp.c b/softmmu/cpus-qmp.c
new file mode 100644
index 00000000000..7b613028225
--- /dev/null
+++ b/softmmu/cpus-qmp.c
@@ -0,0 +1,115 @@
+/*
+ * QEMU System Emulator
+ *
+ * Copyright (c) 2003-2008 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "qemu/osdep.h"
+#include "exec/exec-all.h"
+#include "qapi/error.h"
+#include "qapi/qmp/qerror.h"
+#include "qapi/qapi-commands-machine.h"
+#include "monitor/monitor.h"
+#include "hw/nmi.h"
+
+void qmp_memsave(int64_t addr, int64_t size, const char *filename,
+                 bool has_cpu, int64_t cpu_index, Error **errp)
+{
+    FILE *f;
+    uint32_t l;
+    CPUState *cpu;
+    uint8_t buf[1024];
+    int64_t orig_addr = addr, orig_size = size;
+
+    if (!has_cpu) {
+        cpu_index = 0;
+    }
+
+    cpu = qemu_get_cpu(cpu_index);
+    if (cpu == NULL) {
+        error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
+                   "a CPU number");
+        return;
+    }
+
+    f = fopen(filename, "wb");
+    if (!f) {
+        error_setg_file_open(errp, errno, filename);
+        return;
+    }
+
+    while (size != 0) {
+        l = sizeof(buf);
+        if (l > size) {
+            l = size;
+        }
+        if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) {
+            error_setg(errp, "Invalid addr 0x%016" PRIx64 "/size %" PRId64
+                             " specified", orig_addr, orig_size);
+            goto exit;
+        }
+        if (fwrite(buf, 1, l, f) != l) {
+            error_setg(errp, QERR_IO_ERROR);
+            goto exit;
+        }
+        addr += l;
+        size -= l;
+    }
+
+exit:
+    fclose(f);
+}
+
+void qmp_pmemsave(int64_t addr, int64_t size, const char *filename,
+                  Error **errp)
+{
+    FILE *f;
+    uint32_t l;
+    uint8_t buf[1024];
+
+    f = fopen(filename, "wb");
+    if (!f) {
+        error_setg_file_open(errp, errno, filename);
+        return;
+    }
+
+    while (size != 0) {
+        l = sizeof(buf);
+        if (l > size) {
+            l = size;
+        }
+        cpu_physical_memory_read(addr, buf, l);
+        if (fwrite(buf, 1, l, f) != l) {
+            error_setg(errp, QERR_IO_ERROR);
+            goto exit;
+        }
+        addr += l;
+        size -= l;
+    }
+
+exit:
+    fclose(f);
+}
+
+void qmp_inject_nmi(Error **errp)
+{
+    nmi_monitor_handle(monitor_get_cpu_index(monitor_cur()), errp);
+}
diff --git a/softmmu/cpus.c b/softmmu/cpus.c
index a7ee431187a..e3810135166 100644
--- a/softmmu/cpus.c
+++ b/softmmu/cpus.c
@@ -24,20 +24,14 @@
 
 #include "qemu/osdep.h"
 #include "qemu-common.h"
-#include "monitor/monitor.h"
 #include "qapi/error.h"
-#include "qapi/qapi-commands-machine.h"
-#include "qapi/qapi-commands-misc.h"
 #include "qapi/qapi-events-run-state.h"
-#include "qapi/qmp/qerror.h"
 #include "exec/gdbstub.h"
 #include "sysemu/hw_accel.h"
-#include "exec/exec-all.h"
 #include "qemu/thread.h"
 #include "qemu/plugin.h"
 #include "sysemu/cpus.h"
 #include "qemu/guest-random.h"
-#include "hw/nmi.h"
 #include "sysemu/replay.h"
 #include "sysemu/runstate.h"
 #include "sysemu/cpu-timers.h"
@@ -720,86 +714,3 @@ void list_cpus(const char *optarg)
     cpu_list();
 #endif
 }
-
-void qmp_memsave(int64_t addr, int64_t size, const char *filename,
-                 bool has_cpu, int64_t cpu_index, Error **errp)
-{
-    FILE *f;
-    uint32_t l;
-    CPUState *cpu;
-    uint8_t buf[1024];
-    int64_t orig_addr = addr, orig_size = size;
-
-    if (!has_cpu) {
-        cpu_index = 0;
-    }
-
-    cpu = qemu_get_cpu(cpu_index);
-    if (cpu == NULL) {
-        error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
-                   "a CPU number");
-        return;
-    }
-
-    f = fopen(filename, "wb");
-    if (!f) {
-        error_setg_file_open(errp, errno, filename);
-        return;
-    }
-
-    while (size != 0) {
-        l = sizeof(buf);
-        if (l > size)
-            l = size;
-        if (cpu_memory_rw_debug(cpu, addr, buf, l, 0) != 0) {
-            error_setg(errp, "Invalid addr 0x%016" PRIx64 "/size %" PRId64
-                             " specified", orig_addr, orig_size);
-            goto exit;
-        }
-        if (fwrite(buf, 1, l, f) != l) {
-            error_setg(errp, QERR_IO_ERROR);
-            goto exit;
-        }
-        addr += l;
-        size -= l;
-    }
-
-exit:
-    fclose(f);
-}
-
-void qmp_pmemsave(int64_t addr, int64_t size, const char *filename,
-                  Error **errp)
-{
-    FILE *f;
-    uint32_t l;
-    uint8_t buf[1024];
-
-    f = fopen(filename, "wb");
-    if (!f) {
-        error_setg_file_open(errp, errno, filename);
-        return;
-    }
-
-    while (size != 0) {
-        l = sizeof(buf);
-        if (l > size)
-            l = size;
-        cpu_physical_memory_read(addr, buf, l);
-        if (fwrite(buf, 1, l, f) != l) {
-            error_setg(errp, QERR_IO_ERROR);
-            goto exit;
-        }
-        addr += l;
-        size -= l;
-    }
-
-exit:
-    fclose(f);
-}
-
-void qmp_inject_nmi(Error **errp)
-{
-    nmi_monitor_handle(monitor_get_cpu_index(monitor_cur()), errp);
-}
-
diff --git a/softmmu/meson.build b/softmmu/meson.build
index d8e03018abf..5e578b20e6c 100644
--- a/softmmu/meson.build
+++ b/softmmu/meson.build
@@ -2,6 +2,7 @@
   'arch_init.c',
   'balloon.c',
   'cpus.c',
+  'cpus-qmp.c',
   'cpu-throttle.c',
   'datadir.c',
   'globals.c',
-- 
2.26.3



  parent reply	other threads:[~2021-05-17 12:07 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-17 11:55 [RFC PATCH 00/15] softmmu: Make various objects target agnostic Philippe Mathieu-Daudé
2021-05-17 11:55 ` [RFC PATCH 01/15] accel/kvm: Add more stubs Philippe Mathieu-Daudé
2021-05-26 18:35   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 02/15] accel/whpx: Simplify #ifdef'ry Philippe Mathieu-Daudé
2021-05-26 18:45   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 03/15] accel/hax: " Philippe Mathieu-Daudé
2021-05-26 18:49   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 04/15] accel: Only use TCG when building user-mode emulation Philippe Mathieu-Daudé
2021-05-26 18:52   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 05/15] accel/kvm: Simplify user-mode #ifdef'ry Philippe Mathieu-Daudé
2021-05-26 18:53   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 06/15] hw/acpi/memory_hotplug: Remove unused 'hw/acpi/pc-hotplug.h' header Philippe Mathieu-Daudé
2021-05-26 18:53   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 07/15] softmmu/globals: Remove unused 'hw/i386/*' headers Philippe Mathieu-Daudé
2021-05-26 18:54   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 08/15] softmmu/cpu-timers: Remove unused 'exec/exec-all.h' header Philippe Mathieu-Daudé
2021-05-26 18:55   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 09/15] softmmu/runstate: Clean headers Philippe Mathieu-Daudé
2021-05-26 18:55   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 10/15] exec/gdbstub: Make gdb_exit() / gdb_set_stop_cpu() target agnostic Philippe Mathieu-Daudé
2021-05-19 18:12   ` Philippe Mathieu-Daudé
2021-05-26 18:59   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 11/15] exec/cpu: Make address_space_init/reloading_memory_map " Philippe Mathieu-Daudé
2021-05-26 19:01   ` Richard Henderson
2021-05-26 21:32     ` Philippe Mathieu-Daudé
2021-05-26 21:43       ` Richard Henderson
2022-02-03 12:37     ` Philippe Mathieu-Daudé via
2021-05-17 11:55 ` [RFC PATCH 12/15] sysemu/kvm: Make kvm_on_sigbus() / kvm_on_sigbus_vcpu() " Philippe Mathieu-Daudé
2021-05-26 19:02   ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 13/15] sysemu/memory_mapping: Become target-agnostic Philippe Mathieu-Daudé
2021-05-26 19:06   ` Richard Henderson
2021-05-17 11:55 ` Philippe Mathieu-Daudé [this message]
2021-05-26 19:10   ` [RFC PATCH 14/15] softmmu/cpus: Extract QMP command handlers to cpus-qmp.c Richard Henderson
2021-05-26 21:35     ` Philippe Mathieu-Daudé
2021-05-26 21:47       ` Richard Henderson
2021-05-17 11:55 ` [RFC PATCH 15/15] softmmu: Build target-agnostic objects once Philippe Mathieu-Daudé
2021-05-26 19:10   ` Richard Henderson

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=20210517115525.1088693-15-f4bug@amsat.org \
    --to=f4bug@amsat.org \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.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 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.