diff options
author | Josh Junon <junon@oro.sh> | 2024-08-02 16:07:03 +0200 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2024-08-05 09:34:34 +0200 |
commit | ef71d8209f5786c4e68b5ac7dbc0da7a43f0ed4e (patch) | |
tree | 03ceacf621067c4d52aad93d6069a7d3f638fb14 | |
parent | 01bed0ff14bb94edc3be3c701e6d31679560d388 (diff) | |
download | qemu-ef71d8209f5786c4e68b5ac7dbc0da7a43f0ed4e.zip qemu-ef71d8209f5786c4e68b5ac7dbc0da7a43f0ed4e.tar.gz qemu-ef71d8209f5786c4e68b5ac7dbc0da7a43f0ed4e.tar.bz2 |
qmp: Fix higher half vaddrs for [p]memsave
Fixes higher-half address parsing for QMP commands
`[p]memsave`.
Signed-off-by: Josh Junon <junon@oro.sh>
Message-ID: <20240802140704.13591-1-junon@oro.sh>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
[Subject tweaked, and one PRId64 updated to PRIu64]
Signed-off-by: Markus Armbruster <armbru@redhat.com>
-rw-r--r-- | qapi/machine.json | 11 | ||||
-rw-r--r-- | system/cpus.c | 12 |
2 files changed, 15 insertions, 8 deletions
diff --git a/qapi/machine.json b/qapi/machine.json index 4582e58..d431743 100644 --- a/qapi/machine.json +++ b/qapi/machine.json @@ -852,7 +852,11 @@ # <- { "return": {} } ## { 'command': 'memsave', - 'data': {'val': 'int', 'size': 'int', 'filename': 'str', '*cpu-index': 'int'} } + 'data': { + 'val': 'uint64', + 'size': 'size', + 'filename': 'str', + '*cpu-index': 'int' } } ## # @pmemsave: @@ -878,7 +882,10 @@ # <- { "return": {} } ## { 'command': 'pmemsave', - 'data': {'val': 'int', 'size': 'int', 'filename': 'str'} } + 'data': { + 'val': 'uint64', + 'size': 'size', + 'filename': 'str' } } ## # @Memdev: diff --git a/system/cpus.c b/system/cpus.c index 5e3a988..1c818ff 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -792,14 +792,14 @@ int vm_stop_force_state(RunState state) } } -void qmp_memsave(int64_t addr, int64_t size, const char *filename, +void qmp_memsave(uint64_t addr, uint64_t size, const char *filename, bool has_cpu, int64_t cpu_index, Error **errp) { FILE *f; - uint32_t l; + uint64_t l; CPUState *cpu; uint8_t buf[1024]; - int64_t orig_addr = addr, orig_size = size; + uint64_t orig_addr = addr, orig_size = size; if (!has_cpu) { cpu_index = 0; @@ -823,7 +823,7 @@ void qmp_memsave(int64_t addr, int64_t size, const char *filename, 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 + error_setg(errp, "Invalid addr 0x%016" PRIx64 "/size %" PRIu64 " specified", orig_addr, orig_size); goto exit; } @@ -840,11 +840,11 @@ exit: fclose(f); } -void qmp_pmemsave(int64_t addr, int64_t size, const char *filename, +void qmp_pmemsave(uint64_t addr, uint64_t size, const char *filename, Error **errp) { FILE *f; - uint32_t l; + uint64_t l; uint8_t buf[1024]; f = fopen(filename, "wb"); |