aboutsummaryrefslogtreecommitdiff
path: root/sys/i386
diff options
context:
space:
mode:
authorMitchell Horne <mhorne@FreeBSD.org>2021-11-17 15:35:18 +0000
committerMitchell Horne <mhorne@FreeBSD.org>2021-11-19 19:05:52 +0000
commit10fe6f80a6c871ba317ddc2684cecb8f02096943 (patch)
treedbcbc21577558682e40c87d7501eeccd7dd76763 /sys/i386
parent1d2d1418b492359921716aaa41e93750969b6e1f (diff)
downloadsrc-10fe6f80a6c871ba317ddc2684cecb8f02096943.tar.gz
src-10fe6f80a6c871ba317ddc2684cecb8f02096943.zip
minidump: Use the provided dump bitset
When constructing the set of dumpable pages, use the bitset provided by the state argument, rather than assuming vm_page_dump invariably. For normal kernel minidumps this will be a pointer to vm_page_dump, but when dumping the live system it will not. To do this, the functions in vm_dumpset.h are extended to accept the desired bitset as an argument. Note that this provided bitset is assumed to be derived from vm_page_dump, and therefore has the same size. Reviewed by: kib, markj, jhb MFC after: 2 weeks Sponsored by: Juniper Networks, Inc. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D31992
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/i386/minidump_machdep_base.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/i386/i386/minidump_machdep_base.c b/sys/i386/i386/minidump_machdep_base.c
index 196c375bec56..a3f09228fa2d 100644
--- a/sys/i386/i386/minidump_machdep_base.c
+++ b/sys/i386/i386/minidump_machdep_base.c
@@ -191,7 +191,8 @@ cpu_minidumpsys(struct dumperinfo *di, const struct minidumpstate *state)
pa = pde & PG_PS_FRAME;
for (k = 0; k < NPTEPG; k++) {
if (vm_phys_is_dumpable(pa))
- dump_add_page(pa);
+ vm_page_dump_add(state->dump_bitset,
+ pa);
pa += PAGE_SIZE;
}
continue;
@@ -204,7 +205,8 @@ cpu_minidumpsys(struct dumperinfo *di, const struct minidumpstate *state)
if ((pte & PG_V) == PG_V) {
pa = pte & PG_FRAME;
if (vm_phys_is_dumpable(pa))
- dump_add_page(pa);
+ vm_page_dump_add(
+ state->dump_bitset, pa);
}
}
} else {
@@ -218,12 +220,12 @@ cpu_minidumpsys(struct dumperinfo *di, const struct minidumpstate *state)
dumpsize += round_page(mbp->msg_size);
dumpsize += round_page(sizeof(dump_avail));
dumpsize += round_page(BITSET_SIZE(vm_page_dump_pages));
- VM_PAGE_DUMP_FOREACH(pa) {
+ VM_PAGE_DUMP_FOREACH(state->dump_bitset, pa) {
/* Clear out undumpable pages now if needed */
if (vm_phys_is_dumpable(pa)) {
dumpsize += PAGE_SIZE;
} else {
- dump_drop_page(pa);
+ vm_page_dump_drop(state->dump_bitset, pa);
}
}
dumpsize += PAGE_SIZE;
@@ -317,7 +319,7 @@ cpu_minidumpsys(struct dumperinfo *di, const struct minidumpstate *state)
}
/* Dump memory chunks */
- VM_PAGE_DUMP_FOREACH(pa) {
+ VM_PAGE_DUMP_FOREACH(state->dump_bitset, pa) {
error = blk_write(di, 0, pa, PAGE_SIZE);
if (error)
goto fail;