103 lines
3.2 KiB
Diff
103 lines
3.2 KiB
Diff
|
From b56c362132baef40cc25d910c1e0d217d83cfe44 Mon Sep 17 00:00:00 2001
|
||
|
From: Janosch Frank <frankja@linux.ibm.com>
|
||
|
Date: Thu, 11 Aug 2022 12:10:57 +0000
|
||
|
Subject: [PATCH 25/42] dump: Rework get_start_block
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
RH-Author: Cédric Le Goater <clg@redhat.com>
|
||
|
RH-MergeRequest: 226: s390: Enhanced Interpretation for PCI Functions and Secure Execution guest dump
|
||
|
RH-Bugzilla: 1664378 2043909
|
||
|
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
||
|
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
|
||
|
RH-Acked-by: Jon Maloy <jmaloy@redhat.com>
|
||
|
RH-Commit: [25/41] c93842a1aaeadcc11e91c194452fcd05d163b3ca
|
||
|
|
||
|
get_start_block() returns the start address of the first memory block
|
||
|
or -1.
|
||
|
|
||
|
With the GuestPhysBlock iterator conversion we don't need to set the
|
||
|
start address and can therefore remove that code and the "start"
|
||
|
DumpState struct member. The only functionality left is the validation
|
||
|
of the start block so it only makes sense to re-name the function to
|
||
|
validate_start_block()
|
||
|
|
||
|
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
|
||
|
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
||
|
Reviewed-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
|
||
|
Message-Id: <20220811121111.9878-5-frankja@linux.ibm.com>
|
||
|
(cherry picked from commit 0c2994ac9009577b967529ce18e269da5b280351)
|
||
|
Signed-off-by: Cédric Le Goater <clg@redhat.com>
|
||
|
---
|
||
|
dump/dump.c | 20 ++++++--------------
|
||
|
include/sysemu/dump.h | 2 --
|
||
|
2 files changed, 6 insertions(+), 16 deletions(-)
|
||
|
|
||
|
diff --git a/dump/dump.c b/dump/dump.c
|
||
|
index d981e843dd..e6aa037f59 100644
|
||
|
--- a/dump/dump.c
|
||
|
+++ b/dump/dump.c
|
||
|
@@ -1509,30 +1509,22 @@ static void create_kdump_vmcore(DumpState *s, Error **errp)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
-static ram_addr_t get_start_block(DumpState *s)
|
||
|
+static int validate_start_block(DumpState *s)
|
||
|
{
|
||
|
GuestPhysBlock *block;
|
||
|
|
||
|
if (!s->has_filter) {
|
||
|
- s->next_block = QTAILQ_FIRST(&s->guest_phys_blocks.head);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
QTAILQ_FOREACH(block, &s->guest_phys_blocks.head, next) {
|
||
|
+ /* This block is out of the range */
|
||
|
if (block->target_start >= s->begin + s->length ||
|
||
|
block->target_end <= s->begin) {
|
||
|
- /* This block is out of the range */
|
||
|
continue;
|
||
|
}
|
||
|
-
|
||
|
- s->next_block = block;
|
||
|
- if (s->begin > block->target_start) {
|
||
|
- s->start = s->begin - block->target_start;
|
||
|
- } else {
|
||
|
- s->start = 0;
|
||
|
- }
|
||
|
- return s->start;
|
||
|
- }
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
|
||
|
return -1;
|
||
|
}
|
||
|
@@ -1679,8 +1671,8 @@ static void dump_init(DumpState *s, int fd, bool has_format,
|
||
|
goto cleanup;
|
||
|
}
|
||
|
|
||
|
- s->start = get_start_block(s);
|
||
|
- if (s->start == -1) {
|
||
|
+ /* Is the filter filtering everything? */
|
||
|
+ if (validate_start_block(s) == -1) {
|
||
|
error_setg(errp, QERR_INVALID_PARAMETER, "begin");
|
||
|
goto cleanup;
|
||
|
}
|
||
|
diff --git a/include/sysemu/dump.h b/include/sysemu/dump.h
|
||
|
index ffc2ea1072..7fce1d4af6 100644
|
||
|
--- a/include/sysemu/dump.h
|
||
|
+++ b/include/sysemu/dump.h
|
||
|
@@ -166,8 +166,6 @@ typedef struct DumpState {
|
||
|
hwaddr memory_offset;
|
||
|
int fd;
|
||
|
|
||
|
- GuestPhysBlock *next_block;
|
||
|
- ram_addr_t start;
|
||
|
bool has_filter;
|
||
|
int64_t begin;
|
||
|
int64_t length;
|
||
|
--
|
||
|
2.37.3
|
||
|
|