[RFC] cacheutils crash extension module
by Kazuhito Hagio
Hi Dave,
I've written "cacheutils" crash extension module that lists dentry caches and
dumps page caches associated with a specified file path. I think this module
would be helpful for support folks to find and see config/log files in vmcore.
For example:
$ make extensions
crash> extend cacheutils.so
./cacheutils.so: shared object loaded
crash> extend
SHARED OBJECT COMMANDS
./cacheutils.so ccat cls
crash> cls /var/log
DENTRY INODE I_MAPPING NRPAGES % PATH
ffff9c0c3eabe300 ffff9c0c3e875b78 ffff9c0c3e875ce8 0 0 ./
ffff9c0c16a22900 ffff9c0c16ada2f8 ffff9c0c16ada468 0 0 anaconda/
ffff9c0c37611000 ffff9c0c3759f5b8 ffff9c0c3759f728 0 0 audit/
ffff9c0c375ccc00 ffff9c0c3761c8b8 ffff9c0c3761ca28 1 100 btmp
ffff9c0c28fda240 ffff9c0c22c713f8 ffff9c0c22c71568 6 100 cron
ffff9c0c3eb7f180 ffff9c0bfd402a78 ffff9c0bfd402be8 36 7 dnf.librepo.log
...
crash> ccat /var/log/messages | tail
Nov 28 16:43:57 fedora systemd[27015]: Reached target Basic System.
Nov 28 16:43:57 fedora systemd[27015]: Reached target Default.
Nov 28 16:43:57 fedora systemd[1]: Started User Manager for UID 0.
Nov 28 16:43:57 fedora systemd[27015]: Startup finished in 61ms.
It tested OK from RHEL5 (x86_64) to kernel 5.1, which has XArray,
and a recent x86 Fedora.
I have three questions (requests) related to this, and I would appreciate it
if you would take a look at them after your vacation :)
* Is it possible to export the get_mount_list() and get_dump_level() functions
to extension modules? (The patch at the end exports these two functions.)
Now the get_mount_list() is copied from crash/filesys.c to this module.
And I'd like to call the get_dump_level() to inform users whether the "ccat"
command is available or not with their vmcore when the module is loaded.
If they are exported, I will remove the "#define NOT_EXPORTED" and #ifdef
sections in it.
* Is the CRASHDEBUG(0) in do_xarray_dump_cb() function on purpose?
This module uses the function and it sometimes prints the following messages
without crash -d option. The similar message for radix tree is suppressed by
CRASHDEBUG(1), but this has CRASHDEBUG(0), so I'm wondering about it.
crash> ccat /var/log/messages
ccat: entry has XARRAY_TAG_MASK bits set: 239ab0024001
ccat: entry has XARRAY_TAG_MASK bits set: 239ae0024001
ccat: entry has XARRAY_TAG_MASK bits set: 239af0024001
static void do_xarray_dump_cb(ulong node, ulong slot, const char *path,
ulong index, void *private)
{
...
if (!cb(slot)) {
if (slot & XARRAY_TAG_MASK) {
if (CRASHDEBUG(0))
error(INFO, "entry has XARRAY_TAG_MASK bits set: %lx\n", slot);
return;
* Is it possible to add this module to your crash extension modules page?
I'm planning to put it on GitHub, so I'd like you to add the link to the page.
Thanks,
Kazu
Signed-off-by: Kazuhito Hagio <k-hagio(a)ab.jp.nec.com>
---
defs.h | 2 ++
diskdump.c | 3 +--
filesys.c | 3 +--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/defs.h b/defs.h
index 912037fcc762..42e381e6d9c1 100644
--- a/defs.h
+++ b/defs.h
@@ -5298,6 +5298,7 @@ void set_tmpfile2(FILE *);
void close_tmpfile2(void);
void open_files_dump(ulong, int, struct reference *);
void get_pathname(ulong, char *, int, int, ulong);
+ulong *get_mount_list(int *, struct task_context *);
char *vfsmount_devname(ulong, char *, int);
ulong file_to_dentry(ulong);
ulong file_to_vfsmnt(ulong);
@@ -6440,6 +6441,7 @@ int diskdump_phys_base(unsigned long *);
int diskdump_set_phys_base(unsigned long);
ulong *diskdump_flags;
int is_partial_diskdump(void);
+int get_dump_level(void);
int dumpfile_is_split(void);
void show_split_dumpfiles(void);
void x86_process_elf_notes(void *, unsigned long);
diff --git a/diskdump.c b/diskdump.c
index 694339fbb713..e88243e616cc 100644
--- a/diskdump.c
+++ b/diskdump.c
@@ -80,7 +80,6 @@ struct diskdump_data {
static struct diskdump_data diskdump_data = { 0 };
static struct diskdump_data *dd = &diskdump_data;
-static int get_dump_level(void);
ulong *diskdump_flags = &diskdump_data.flags;
@@ -2114,7 +2113,7 @@ get_diskdump_switch_stack(ulong task)
* Version 1 and later compressed kdump dumpfiles contain the dump level
* in an additional field of the sub_header_kdump structure.
*/
-static int
+int
get_dump_level(void)
{
int dump_level;
diff --git a/filesys.c b/filesys.c
index 037704126840..d88ea28ebe7a 100644
--- a/filesys.c
+++ b/filesys.c
@@ -37,7 +37,6 @@ static int mount_point(char *);
static int open_file_reference(struct reference *);
static void memory_source_init(void);
static int get_pathname_component(ulong, ulong, int, char *, char *);
-static ulong *get_mount_list(int *, struct task_context *);
char *inode_type(char *, char *);
static void match_proc_version(void);
static void get_live_memory_source(void);
@@ -1600,7 +1599,7 @@ show_mounts(ulong one_vfsmount, int flags, struct task_context *namespace_contex
/*
* Allocate and fill a list of the currently-mounted vfsmount pointers.
*/
-static ulong *
+ulong *
get_mount_list(int *cntptr, struct task_context *namespace_context)
{
struct list_data list_data, *ld;
--
2.18.1
5 years, 3 months
[PATCH] Fix parse_line when expression is followed by a character that is not token-terminating
by Dave Wysochanski
Commit e082c372c7f1a782b058ec359dfbbbee0f0b6aad reworked parse_line to
make a single expression encompassed by a set of parenthesis into a
single argument. In the process it changed parse_line to improperly
handle lines like the following:
p (struct task_struct *)0xffff881813c40aa0
It could still properly handle lines with a space after the expression:
p (struct task_struct *) 0xffff881813c40aa0
The reason it failed with the former is that once exiting the expression
loop when seeing the terminating ')' and expression == 0, it would then
start the next token at the next character after the terminating ')' but
there was no place for a terminating NULL char. As a result, the call
to parse_line would return 3 instead of two, and an error would result:
crash> p (struct task_struct *)0xffff881813c40aa0
A syntax error in expression, near `0xffff881813c40aa0'.
p: gdb request failed: p (struct task_struct *)0xffff881813c40aa0 0xffff881813c40aa0
The fix is fairly straightforward. Just 'continue' the loop once we
exit the expression code. That way we retain the same behavior as before
when an address follows directly an expression without a space.
Signed-off-by: Dave Wysochanski <dwysocha(a)redhat.com>
---
tools.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/tools.c b/tools.c
index eceea90..2d95c3a 100644
--- a/tools.c
+++ b/tools.c
@@ -246,8 +246,10 @@ next:
break;
}
}
- if (expression == 0)
+ if (expression == 0) {
i++;
+ continue;
+ }
}
if (str[i] != NULLCHAR && str[i] != '\n') {
--
1.7.1
5 years, 3 months
Analysis of s390 on x86_64
by Nikolay Borisov
Hello Dave,
I'd like to better understand why s390-on-x86_64 analysis is not
supported e.g. respective pair in get_current_configuration is missing?
Is it due to the endianness mismatch ? gdb does support setting the
endianness of a target? Or are there other problems?
5 years, 3 months
Problem with crash-7.2.6 and certain print commands?
by Dave Wysochanski
We rebuilt crash with the tarball from:
http://people.redhat.com/anderson/crash-7.2.6.tar.gz
I thought initially something had gone wrong with the tarball, so I
redownloaded it myself and did an md5sum. This checked out ok. I
We had a report that the print command was broken, specifically this
failed:
crash> pd ((struct zone *)0xffff901e3ffda000)->min_slab_pages
p: invalid option -- '>'
p: invalid option -- 'm'
p: invalid option -- 'i'
p: invalid option -- 'n'
p: invalid option -- '_'
p: invalid option -- 's'
p: invalid option -- 'l'
p: invalid option -- 'a'
p: invalid option -- 'b'
p: invalid option -- '_'
p: invalid option -- 'p'
p: invalid option -- 'a'
p: invalid option -- 'g'
p: invalid option -- 'e'
p: invalid option -- 's'
Usage:
p [-x|-d][-u] [expression | symbol[:cpuspec]]
Enter "help p" for details.
We thought we didn't have this commit:
commit 977c3a20a053eaff5b1f0c95246f88cd66712f27
Author: Dave Anderson <anderson(a)redhat.com>
Date: Thu Jan 24 13:36:02 2019 -0500
Fix for the "p" command if the expression contains more than one
opening parenthesis character and a minus/dash sign. Without the
patch, the minus/dash sign will get dropped from the command prior
to it being passed on to gdb for evaluation, and the command will
fail with the message "p: gdb request failed: <expression>",
where the <expression> string will not contain the minus/dash sign.
(anderson(a)redhat.com)
diff --git a/symbols.c b/symbols.c
index 5f77e27..6814723 100644
--- a/symbols.c
+++ b/symbols.c
@@ -1,8 +1,8 @@
/* symbols.c - core analysis suite
*
* Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
- * Copyright (C) 2002-2018 David Anderson
- * Copyright (C) 2002-2018 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2002-2019 David Anderson
+ * Copyright (C) 2002-2019 Red Hat, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -7201,7 +7201,7 @@ cmd_p(void)
*(cpuspec-1) = ':';
}
- process_gdb_output(concat_args(buf1, 0, TRUE), radix,
+ process_gdb_output(concat_args(buf1, 0, FALSE), radix,
sp ? sp->name : NULL, do_load_module_filter);
}
But this was reverted again in:
commit e082c372c7f1a782b058ec359dfbbbee0f0b6aad
Author: Dave Anderson <anderson(a)redhat.com>
Date: Thu Jan 31 12:08:43 2019 -0500
Fix for the internal parse_line() utility function to account for
embedded sets of parentheses, which may be used for expressions that
are passed to gdb by the "p" command. Without the patch, expressions
containing embedded sets of parentheses are broken up into multiple
argument tokens instead of just one. The previous commit has been
reverted by this one.
(anderson(a)redhat.com)
diff --git a/symbols.c b/symbols.c
index 6814723..e73e735 100644
--- a/symbols.c
+++ b/symbols.c
@@ -7201,7 +7201,7 @@ cmd_p(void)
*(cpuspec-1) = ':';
}
- process_gdb_output(concat_args(buf1, 0, FALSE), radix,
+ process_gdb_output(concat_args(buf1, 0, TRUE), radix,
sp ? sp->name : NULL, do_load_module_filter);
}
5 years, 3 months
[PATCH] Add missing help options to the option list
by Kazuhito Hagio
Hi Dave,
I wanted to see net->flags for a vmcore and could see it with "help -N"
option. But it is not listed in the help option list, which is printed
by "help help" command. Is it just missed?
Also, I found that -g, -O and -z options are missing from the list, too.
I think it might be helpful for some users to add the -g and -z options
to it, but I'm not sure whether the -O option should be added.
Signed-off-by: Kazuhito Hagio <k-hagio(a)ab.jp.nec.com>
---
help.c | 6 ++++++
net.c | 2 +-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/help.c b/help.c
index f4ac1baf94b6..c0c750f8f39f 100644
--- a/help.c
+++ b/help.c
@@ -647,6 +647,7 @@ cmd_help(void)
fprintf(fp, " -D - dumpfile contents/statistics\n");
fprintf(fp, " -e - extension table data\n");
fprintf(fp, " -f - filesys table\n");
+ fprintf(fp, " -g - gdb data\n");
fprintf(fp, " -h - hash_table data\n");
fprintf(fp, " -H - hash_table data (verbose)\n");
fprintf(fp, " -k - kernel_table\n");
@@ -654,6 +655,7 @@ cmd_help(void)
fprintf(fp, " -L - LKCD page cache environment\n");
fprintf(fp, " -M <num> machine specific\n");
fprintf(fp, " -m - machdep_table\n");
+ fprintf(fp, " -N - net_table\n");
fprintf(fp, " -n - dumpfile contents/statistics\n");
fprintf(fp, " -o - offset_table and size_table\n");
fprintf(fp, " -p - program_context\n");
@@ -664,6 +666,7 @@ cmd_help(void)
fprintf(fp, " -v - vm_table\n");
fprintf(fp, " -V - vm_table (verbose)\n");
fprintf(fp, " -x - text cache\n");
+ fprintf(fp, " -z - help options\n");
return;
case 'L':
@@ -1004,6 +1007,7 @@ char *help_help[] = {
" -D - dumpfile contents/statistics",
" -e - extension table data",
" -f - filesys table",
+" -g - gdb data",
" -h - hash_table data",
" -H - hash_table data (verbose)",
" -k - kernel_table",
@@ -1011,6 +1015,7 @@ char *help_help[] = {
" -L - LKCD page cache environment",
" -M <num> machine specific",
" -m - machdep_table",
+" -N - net_table",
" -n - dumpfile contents/statistics",
" -o - offset_table and size_table",
" -p - program_context",
@@ -1021,6 +1026,7 @@ char *help_help[] = {
" -v - vm_table",
" -V - vm_table (verbose)",
" -x - text cache",
+" -z - help options",
NULL
};
diff --git a/net.c b/net.c
index f08f22a2c833..7c9c8bd9c98d 100644
--- a/net.c
+++ b/net.c
@@ -1279,7 +1279,7 @@ dump_hw_addr(unsigned char *ha, int len)
}
/*
- * help -n output
+ * help -N output
*/
void
dump_net_table(void)
--
2.18.1
5 years, 4 months
[ANNOUNCE] crash version 7.2.6 is available
by Dave Anderson
Download from: http://people.redhat.com/anderson
or
https://github.com/crash-utility/crash/releases
The github master branch serves as a development branch that will contain
all patches that are queued for the next release:
$ git clone git://github.com/crash-utility/crash.git
Changelog:
- Two fixes for the Xen hypervisor; the first fixes a bug seen
with Xen 4.11.0 during initialization, which fails with the error
message "crash: invalid kernel virtual address: <address> type:
fill_pcpu_struct", followed by "WARNING: cannot fill pcpu_struct"
and "crash: cannot read cpu_info". The second fix prevents a
segmentation violation associated with a crash-7.1.1 commit that
addressed the Xen 4.5.0 hypervisor symbol name change from
"dom0" to "hardware_domain".
(dietmar.hahn(a)ts.fujitsu.com)
- Fix for Linux 4.20 and later x86_64 kernels which are NOT
configured with CONFIG_RANDOMIZE_BASE. Linux 4.20 introduced
kernel commit d52888aa2753e3063a9d3a0c9f72f94aa9809c15, titled
"x86/mm: Move LDT remap out of KASLR region on 5-level paging",
which modified the 4-level and 5-level paging PAGE_OFFSET values.
Without this patch, the crash session fails during initialization
with the error message "crash: read error: kernel virtual address:
<address> type: tss_struct ist array". For kernels prior to
Linux 4.20.0 which have backports of the kernel commit, the kernel's
PAGE_OFFSET value must be manually specified via the command line
option "--machdep page_offset=ffff888000000000" for kernels with
4-level page tables, or "--machdep page_offset=ff11000000000000"
for kernels with 5-level paging. (or alternatively the shorter
version "-m page_offset=<address>" may be used). The command
line option requirement may be revisited in the future.
(anderson(a)redhat.com)
- Fix for the "p" command if the expression contains more than one
opening parenthesis character and a minus/dash sign. Without the
patch, the minus/dash sign will get dropped from the command prior
to it being passed on to gdb for evaluation, and the command will
fail with the message "p: gdb request failed: <expression>",
where the <expression> string will not contain the minus/dash sign.
(anderson(a)redhat.com)
- Fix for the internal parse_line() utility function to account for
embedded sets of parentheses, which may be used for expressions that
are passed to gdb by the "p" command. Without the patch, expressions
containing embedded sets of parentheses are broken up into multiple
argument tokens instead of just one. The previous commit has been
reverted by this one.
(anderson(a)redhat.com)
- First phase of support for ARM64 kernels that are configured with
CONFIG_ARM64_USER_VA_BITS_52, which causes the PTRS_PER_PGD count
to increase from 64 to 1024. Without the patch, "WARNING: cannot
access vmalloc'd module memory" will be displayed during session
initialization, and the translation of any mapped kernel virtual
address that requires a page table walk will fail, leading to a
myriad of other errors.
(anderson(a)redhat.com)
- Support for configurable CONFIG_ARM64_PA_BITS values introduced
in kernel commit 982aa7c5f0861bf56b2412ca341a13f44c238ba4, titled
"arm64: add kconfig symbol to configure physical address size".
Without the patch, it is impossible to determine the value of
CONFIG_ARM64_PA_BITS is, and will require a new MAX_PHYSMEM_BITS
vmcoreinfo entry to be exported. This patch reads that entry
during intitialization.
(anderson(a)redhat.com)
- For live system analysis where there is no vmcoreinfo ELF note
attached to /proc/kcore, or for dumpfile analysis where there is no
vmcoreinfo ELF note attached to the dumpfile, this patch sets the
internal pc->read_vmcoreinfo() function to a new plugin function
that reads the data directly from the live kernel or dumpfile.
Because the function is set much later during initialization than
if the ELF note is attached to /proc/kcore or the dumpfile, it may
not be available during very early session initialization.
(anderson(a)redhat.com)
- Fix for Linux 4.14.84 and later 4.14-based x86_64 kernels which
are NOT configured with CONFIG_RANDOMIZE_BASE and have backported
kernel commit d52888aa2753e3063a9d3a0c9f72f94aa9809c15, titled
"x86/mm: Move LDT remap out of KASLR region on 5-level paging",
which modified the 4-level and 5-level paging PAGE_OFFSET values.
Without this patch, the crash session fails during initialization
with the error message "crash: read error: kernel virtual address:
<address> type: tss_struct ist array".
(anderson(a)redhat.com)
- Fix for determining the x86_64 "phys_base" value in dumpfiles created
by the KVM "virsh dump" facility if the kernel is KASLR-enabled and
does not have the phys_base value stored in vmcoreinfo data. Without
the patch, the message "WARNING: cannot determine physical base
address: defaulting to 0" is displayed, and the crash session fails
to initialize.
(jiangran.jr(a)alibaba-inc.com)
- 32-bit ARM kernels built with the Thumb-2 instruction set utilize
the R7 register instead of FP for unwinding stacks using the DWARF
unwinder. On those kernels, without the patch, the "bt" command
only shows the task header.
(vincent.whitchurch(a)axis.com)
- Fix for the "kmem -z" option on Linux 5.0 and later kernels
that contain commit a921444382b49cc7fdeca3fba3e278bc09484a27,
titled "mm: move zone watermark accesses behind an accessor".
Without the patch, the command fails with the error message
"kmem: invalid (optional) structure member offsets: zone_pages_min
or zone_struct_pages_min".
(k-hagio(a)ab.jp.nec.com)
- Fix for the "kmem -i" option on Linux 5.0 and later kernels
that contain commit ca79b0c211af63fa3276f0e3fd7dd9ada2439839
titled "mm: convert totalram_pages and totalhigh_pages variables
to atomic". Without the patch, the command prints some incorrect
values, and besides does not print high/low memory information on
kernels which are configured with CONFIG_HIGHMEM.
(k-hagio(a)ab.jp.nec.com)
- Fix for the display of kernel module symbol types by the "sym"
command in Linux 5.0 and later kernels if the module debuginfo
data has not been loaded into the crash session. The st_info member
of the Elf32_Sym or Elf64_Sym structures has changed so as to not
contain ASCII symbol type characters, and as a result the "sym"
command will show unprintable data as the symbol type. With the
patch, only text types ("t" or "T") will be displayed, and the
symbols others will show "?".
(anderson(a)redhat.com)
- First phase of support of the upcoming ARM64 kernel memory map
changes to support 52-bit kernel virtual addressing, which allows
the configuration of CONFIG_ARM64_VA_BITS to be 52, but where the
actual number of VA bits may be downgraded during boot depending
upon the hardware capability. This phase is only applicable for
live system analysis.
(anderson(a)redhat.com)
- Fix for the "dis <function>" option with kernel module text
symbols on Linux 5.0 and later kernels. Without the patch, the
disassembly may stop prematurely or extend into the next function
because the st_size member of the Elf32_Sym or Elf64_Sym text
symbol structures can no longer be used as the function size.
(anderson(a)redhat.com)
- Commit dd12805ed1db7 in the linux-next kernel repository, titled
"XArray: Remove radix tree compatibility", changes the definition
of "radix_tree_root" back to be a struct. However, the content of
the new structure differs from the original structure, so without
the patch, current linux-next kernels fail during initialization
with the error message "radix trees do not exist or have changed
their format". Because the new "radix_tree_root" and "xarray"
structures have nearly the same layout, the existing functionality
for XArrays can be reused.
(prudo(a)linux.ibm.com)
- Fixes for the "trace.so" extension module:
(1) The reader_page can be empty if it was never read, do not record
it if it is empty. Better yet, do not record any page that is
empty. The struct buffer_page "real_end" is not available in
older kernels, so it needs to be tested if it exists before we
can use it.
(2) In newer kernels, the sp->type of kernel module symbols does not
contain the symbol type character unless the module's debuginfo
data has been loaded into the crash session. Writing a garbage
type to the kallsyms file for trace-cmd to read causes it to
crash, so just always write an 'm'.
(3) Add the "trace dump -t <trace.dat>" option to the SYNOPSIS line
of the help page.
(rostedt(a)goodmis.org)
- Fix to find the kernel configuration data in Linux 5.1 kernels
containing commit 13610aa908dcfce77135bb799c0a10d0172da6ba, titled
"kernel/configs: use .incbin directive to embed config_data.gz".
Without the patch, new kernels configured with CONFIG_IKCONFIG_PROC
will display "WARNING: could not find MAGIC_START!" during session
initialization, and also when running "sys config" during runtime.
(anderson(a)redhat.com)
- Fix for the PPC64 "bt" command running against kernels that are
configured with CONFIG_THREAD_INFO_IN_TASK. Without the patch,
the "bt" command fails with the message "bt: invalid/stale stack
pointer for this task: <address>".
(anderson(a)redhat.com)
- Fix for the "files -d <dentry>" option if the dentry.d_inode
pointer is NULL. Without the patch, the command output does not
display the super_block pointer or the file's pathname.
(martin.moore(a)hpe.com)
- When the is_s390_dump() function is called to determine whether
a file is an s390 dumpfile, it currently presumes that the fopen()
call always works, and then tries to read it with using a NULL file
pointer. Change it to verify that the fopen() was successful, and
if not, print an error message as is done with the other dumpfile
type verifier functions.
(ramin.blackhat(a)gmail.com)
- Implement support for ARM64 kernels that are configured with:
CONFIG_ARM64_PA_BITS=52
CONFIG_ARM64_64K_PAGES
CONFIG_PGTABLE_LEVELS=3
and that run on a host containing physical memory that utilizes
any bit in the uppermost 4 bits of the 52-bit physical address
range.
(anderson(a)redhat.com)
- Extension of the "snap.so" extension module to pass a second
architecture-specific value in the ELF header; its initial use
is for support of the upcoming ARM64 52-bit kernel virtual
address space by passing both the VA_BITS and VA_BITS_ACTUAL
values.
(anderson(a)redhat.com)
- Apply initial changes to support kernel address space layout
randomization (KASLR) for s390X. This is the minimal patch-set
required to process s390x dumps for the kernels configured with
CONFIG_RANDOMIZE_BASE, and to accept the "--kaslr" command line
option. Only dumpfiles whose headers contain kernel VMCOREINFO
data are supported.
(zaslonko(a)linux.ibm.com)
- Fix for the "dev -[dD]" options on Linux 5.1-rc1 and later kernels
that contain commit 570d0200123fb4f809aa2f6226e93a458d664d70, titled
"driver core: move device->knode_class to device_private". Without
the patch, the command options fail with the error message "dev:
invalid structure member offset: device_knode_class".
(k-hagio(a)ab.jp.nec.com)
- Linux 4.18 kernels introduced a new CONFIG_PROC_VMCORE_DEVICE_DUMP
configuration in commit 2724273e8fd00b512596a77ee063f49b25f36507,
titled "vmcore: add API to collect hardware dump in second kernel",
in which device drivers may collect a device specific snapshot of the
hardware/firmware state of their underlying devices, and export the
data as a kdump ELF note with type NT_VMCOREDD. This patch
recognizes the new ELF note(s) in both ELF and compressed kdump
vmcore dumpfiles. The "help -[nD]" option shows basic information
about each note, and two new "dev" command options have been
introduced. The "dev -V" option displays an indexed list of each
note, showing the device name, the dumpfile offset, and the size
of each note. The "dev -v index [file]" option either dumps the
contents of a note to the display screen in a human-readable format,
or copies the note data directly to a specified file.
(surendra(a)chelsio.com)
- If the kernel's "vmap_area_list" doubly-linked list is corrupt such
that it does not link back to the global list_head, commands that
require information regarding the range of virtually-mapped kernel
addresses will display a generic list-handling error message such as
"kmem: invalid list entry: 0", and the command will typically fail
to fully complete. However, without the patch, there will also be
"WARNING: malloc/free mismatch (29/30)" messages that get displayed
after every subsequent command. This patch prevents the mismatch
messages, and also adds an additional error message indicating
"WARNING: invalid/corrupt vmap_area_list" to further clarify the
generic list-handling error message.
(dwysocha(a)redhat.com, anderson(a)redhat.com)
- Fix for the "dev" help page to remove the unused -r option letter.
(surendra(a)chelsio.com)
- If a duplicate list entry is encountered when using the "list -B"
Brent algorithm, change the list loop length value from hexadecimal
to decimal.
(dwysocha(a)redhat.com)
- Update the README file to indicate the capability of building an
x86_64 crash binary with "make target=PPC64", which can be used to
analyze ppc64le dumpfiles on an x86_64 host.
(anderson(a)redhat.com)
- Fix for hybrid kernels that have backported support for the Xarray
facility while allowing subsystems to continue to use radix trees.
Without the patch, the crash session fails during initialization
with the message "crash: xarray facility does not exist or has
changed its format".
(anderson(a)redhat.com)
5 years, 4 months