|
Bernhard M. Wiedemann |
131f53 |
From: Janosch Frank <frankja@linux.ibm.com>
|
|
Bernhard M. Wiedemann |
131f53 |
Date: Thu, 11 Aug 2022 12:10:57 +0000
|
|
Bernhard M. Wiedemann |
131f53 |
Subject: dump: Rework get_start_block
|
|
Bernhard M. Wiedemann |
131f53 |
MIME-Version: 1.0
|
|
Bernhard M. Wiedemann |
131f53 |
Content-Type: text/plain; charset=UTF-8
|
|
Bernhard M. Wiedemann |
131f53 |
Content-Transfer-Encoding: 8bit
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
Git-commit: 0c2994ac9009577b967529ce18e269da5b280351
|
|
Bernhard M. Wiedemann |
131f53 |
References: jsc#PED-1716
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
get_start_block() returns the start address of the first memory block
|
|
Bernhard M. Wiedemann |
131f53 |
or -1.
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
With the GuestPhysBlock iterator conversion we don't need to set the
|
|
Bernhard M. Wiedemann |
131f53 |
start address and can therefore remove that code and the "start"
|
|
Bernhard M. Wiedemann |
131f53 |
DumpState struct member. The only functionality left is the validation
|
|
Bernhard M. Wiedemann |
131f53 |
of the start block so it only makes sense to re-name the function to
|
|
Bernhard M. Wiedemann |
131f53 |
validate_start_block()
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
|
|
Bernhard M. Wiedemann |
131f53 |
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
|
Bernhard M. Wiedemann |
131f53 |
Reviewed-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
|
|
Bernhard M. Wiedemann |
131f53 |
Message-Id: <20220811121111.9878-5-frankja@linux.ibm.com>
|
|
Bernhard M. Wiedemann |
131f53 |
Signed-off-by: Li Zhang <lizhang@suse.de>
|
|
Bernhard M. Wiedemann |
131f53 |
---
|
|
Bernhard M. Wiedemann |
131f53 |
dump/dump.c | 20 ++++++--------------
|
|
Bernhard M. Wiedemann |
131f53 |
include/sysemu/dump.h | 2 --
|
|
Bernhard M. Wiedemann |
131f53 |
2 files changed, 6 insertions(+), 16 deletions(-)
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
diff --git a/dump/dump.c b/dump/dump.c
|
|
Bernhard M. Wiedemann |
131f53 |
index 340de5a1e7a463573a14a0565682..e204912a89560c3e7724b9359a1e 100644
|
|
Bernhard M. Wiedemann |
131f53 |
--- a/dump/dump.c
|
|
Bernhard M. Wiedemann |
131f53 |
+++ b/dump/dump.c
|
|
Bernhard M. Wiedemann |
131f53 |
@@ -1500,30 +1500,22 @@ static void create_kdump_vmcore(DumpState *s, Error **errp)
|
|
Bernhard M. Wiedemann |
131f53 |
}
|
|
Bernhard M. Wiedemann |
131f53 |
}
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
-static ram_addr_t get_start_block(DumpState *s)
|
|
Bernhard M. Wiedemann |
131f53 |
+static int validate_start_block(DumpState *s)
|
|
Bernhard M. Wiedemann |
131f53 |
{
|
|
Bernhard M. Wiedemann |
131f53 |
GuestPhysBlock *block;
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
if (!s->has_filter) {
|
|
Bernhard M. Wiedemann |
131f53 |
- s->next_block = QTAILQ_FIRST(&s->guest_phys_blocks.head);
|
|
Bernhard M. Wiedemann |
131f53 |
return 0;
|
|
Bernhard M. Wiedemann |
131f53 |
}
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
QTAILQ_FOREACH(block, &s->guest_phys_blocks.head, next) {
|
|
Bernhard M. Wiedemann |
131f53 |
+ /* This block is out of the range */
|
|
Bernhard M. Wiedemann |
131f53 |
if (block->target_start >= s->begin + s->length ||
|
|
Bernhard M. Wiedemann |
131f53 |
block->target_end <= s->begin) {
|
|
Bernhard M. Wiedemann |
131f53 |
- /* This block is out of the range */
|
|
Bernhard M. Wiedemann |
131f53 |
continue;
|
|
Bernhard M. Wiedemann |
131f53 |
}
|
|
Bernhard M. Wiedemann |
131f53 |
-
|
|
Bernhard M. Wiedemann |
131f53 |
- s->next_block = block;
|
|
Bernhard M. Wiedemann |
131f53 |
- if (s->begin > block->target_start) {
|
|
Bernhard M. Wiedemann |
131f53 |
- s->start = s->begin - block->target_start;
|
|
Bernhard M. Wiedemann |
131f53 |
- } else {
|
|
Bernhard M. Wiedemann |
131f53 |
- s->start = 0;
|
|
Bernhard M. Wiedemann |
131f53 |
- }
|
|
Bernhard M. Wiedemann |
131f53 |
- return s->start;
|
|
Bernhard M. Wiedemann |
131f53 |
- }
|
|
Bernhard M. Wiedemann |
131f53 |
+ return 0;
|
|
Bernhard M. Wiedemann |
131f53 |
+ }
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
return -1;
|
|
Bernhard M. Wiedemann |
131f53 |
}
|
|
Bernhard M. Wiedemann |
131f53 |
@@ -1670,8 +1662,8 @@ static void dump_init(DumpState *s, int fd, bool has_format,
|
|
Bernhard M. Wiedemann |
131f53 |
goto cleanup;
|
|
Bernhard M. Wiedemann |
131f53 |
}
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
- s->start = get_start_block(s);
|
|
Bernhard M. Wiedemann |
131f53 |
- if (s->start == -1) {
|
|
Bernhard M. Wiedemann |
131f53 |
+ /* Is the filter filtering everything? */
|
|
Bernhard M. Wiedemann |
131f53 |
+ if (validate_start_block(s) == -1) {
|
|
Bernhard M. Wiedemann |
131f53 |
error_setg(errp, QERR_INVALID_PARAMETER, "begin");
|
|
Bernhard M. Wiedemann |
131f53 |
goto cleanup;
|
|
Bernhard M. Wiedemann |
131f53 |
}
|
|
Bernhard M. Wiedemann |
131f53 |
diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h
|
|
Bernhard M. Wiedemann |
131f53 |
index ffc2ea1072f3d6dca792925a7fdc..7fce1d4af67c357bd4d80b936290 100644
|
|
Bernhard M. Wiedemann |
131f53 |
--- a/include/sysemu/dump.h
|
|
Bernhard M. Wiedemann |
131f53 |
+++ b/include/sysemu/dump.h
|
|
Bernhard M. Wiedemann |
131f53 |
@@ -166,8 +166,6 @@ typedef struct DumpState {
|
|
Bernhard M. Wiedemann |
131f53 |
hwaddr memory_offset;
|
|
Bernhard M. Wiedemann |
131f53 |
int fd;
|
|
Bernhard M. Wiedemann |
131f53 |
|
|
Bernhard M. Wiedemann |
131f53 |
- GuestPhysBlock *next_block;
|
|
Bernhard M. Wiedemann |
131f53 |
- ram_addr_t start;
|
|
Bernhard M. Wiedemann |
131f53 |
bool has_filter;
|
|
Bernhard M. Wiedemann |
131f53 |
int64_t begin;
|
|
Bernhard M. Wiedemann |
131f53 |
int64_t length;
|