Download from: http://people.redhat.com/anderson Changelog: - Fix for the "ps" command's display of per-task RSS and %MEM values in Linux 2.6.34 and later kernels in which SPLIT_RSS_COUNTING is enabled. Without the patch, the values are only taken from each task's mm_struct.rss_stat structure, which may contain stale values because they may not be synchronized with the RSS values stored in each per-thread task_struct.rss_stat structure; this may lead to invalid or slightly low RSS values, and worst-case, the %MEM value may show garbage percentage values. (vinayakm.list@xxxxxxxxx) - Addressed a few (harmless) Coverity Scan complaints in diskdump.c: 1579:dead_error_line – Execution cannot reach this expression ""|"" inside statement "fprintf(fp, "%sDUMP_DH_COMP...". 1574:dead_error_line – Execution cannot reach this expression ""|"" inside statement "fprintf(fp, "%sDUMP_HEADER_...". 1571:dead_error_line – Execution cannot reach this expression ""|"" inside statement "fprintf(fp, "%sDUMP_HEADER_...". (anderson@xxxxxxxxxx) - Addressed two warnings when compiling diskdump.c on 32-bit architectures when the snappy library is built in: diskdump.c:1046: warning: passing argument 3 of 'snappy_uncompressed_length' from incompatible pointer type /usr/include/snappy-c.h:120: note: expected ‘size_t *’ but argument is of type ‘ulong *’ diskdump.c:1056: warning: passing argument 4 of ‘snappy_uncompress’ from incompatible pointer type /usr/include/snappy-c.h:103: note: expected ‘size_t *’ but argument is of type ‘ulong *’ (anderson@xxxxxxxxxx) - Created a simpler interface with the internal do_list() function. Currently, if a caller wants to gather the contents of a list into an array, it must do the following: (1) call hq_open() so that the list contents will be verified and saved in the hash queue (2) call do_list() to store the list in the hash queue and return the number of entries in the list (3) allocate a buffer to store the array of entries in the list (4) pass the allocated buffer to retrieve_list() to be populated from the hash queue (5) call hq_close() With this patch, if the passed-in list_data.flags field has a new LIST_ALLOCATE bit set, then do_list() will perform steps (1), (3), (4) and (5) above. The caller can access the allocated array via a new list_data.list_ptr member, and, when done parsing the list, the allocated buffer should be returned via FREEBUF(). The only restriction is that the hash queue cannot be currently in use, or the do_list() call will fail. It should also be noted that there are circumstances where it still makes sense that steps (1), (3), (4) and (5) are performed by the do_list() caller. (anderson@xxxxxxxxxx) - Modified the internal parent_list() function, used by "ps -p", to utilize the simpler new do_list() functionality described above. (anderson@xxxxxxxxxx) - Modified the internal dump_vmap_area() function, used by the "kmem -v", "kmem <address>" and "search" commands, to utilize the simpler new do_list() functionality. (anderson@xxxxxxxxxx) - Modified the internal nr_blockdev_pages() function, used by the "kmem -i", to utilize the simpler new do_list() functionality. (anderson@xxxxxxxxxx) - Modified the internal get_mount_list() function, used by the "mount" and "files -d" commands, to utilize the simpler new do_list() functionality. (anderson@xxxxxxxxxx) - Modified the internal get_kmem_cache_list() function, used by the "kmem -[sS]", "kmem <address>", "rd -S" and "bf -F" commands, to utilize the simpler new do_list() functionality. (anderson@xxxxxxxxxx) - Modified the internal show_net_devices_v2() and show_net_devices_v3() functions, used by the "net" command, to utilize the simpler new do_list() functionality. (anderson@xxxxxxxxxx) - The "help -r" option has been extended to dump the X86 and X86_64 registers stored in the NT_PRSTATUS notes in netdump ELF, kdump ELF, and compressed kdump dumpfiles. Without the patch, the option only supports ELF dumpfiles created by the "virsh dump --memory-only" facility. (anderson@xxxxxxxxxx) - Modified the "runq -g" display to show the CFS task_group and cfs_rq addresses; also the current task is also displayed in its CFS or RT queue with with the notation "[CURRENT]" appended to the task data. (Anthony.Chen@xxxxxxxxxxxx) - Additional modification to the "runq -g" to display the task_group and rt_rq addresses for the RT queues, similar in nature to the CFS queue changes are done by the patch above. In addition, the CFS rb_root and RT prio_array addresses are no longer shown given that they can be determined by looking at the cfs_rq and rt_rq structures whose addresses are now displayed. (anderson@xxxxxxxxxx) - Modified the behavior of the "mod -t" option when running against Linux 2.6.18 and earlier kernels such that the hexadecimal value of the module->license_gplok member is always displayed. Without the patch, if a module's license_gplok boolean or bitmask value is 0, it would only be displayed if the module was unsigned. (anderson@xxxxxxxxxx, atomlin@xxxxxxxxxx) - Modified the internal dump_tasks_in_task_group_rt_rq() and dump_RT_prio_array() functions, used by the "runq" command, to utilize the simpler new do_list() functionality. (anderson@xxxxxxxxxx) - Resurrection of the remote analysis capability for use with the "xen-crashd" daemon running on a Xen Dom0 host, which communicates with a paused or shutdown DomU guest kernel. The daemon can be accessed like so: $ crash localhost:5001,/dev/xenmem vmlinux (dslutz@xxxxxxxxxxx) - Prevent the X86_64 "bt" command from using starting RSP and RIP values taken from the NT_PRSTATUS notes of kdump dumpfiles if the RSP address is not in the task's kernel stack, or in any of the relevant per-cpu exception stacks. This can happen when the number of NT_PRSTATUS notes does not match the number of online cpus. Without the patch, the command may generate a segmentation violation, fail with the error message "bt: cannot determine starting stack pointer", or fail with an error message indicating that the command "cannot transition" from an exception stack to the previous stack. (anderson@xxxxxxxxxx) - Fix for the X86_64 "bt" command for displaying the backtraces of active tasks running on the non-crashing cpus in kdump dumpfiles in which the "crash_nmi_callback" function frame does not appear in the per-cpu NMI exception stacks. That function frame is normally used as the starting point for the backtraces of those tasks, but if it does not exist, the "notify_die" frame will be used instead. Without the patch, the backtraces of the active non-crashing tasks are incorrect or incomplete. (anderson@xxxxxxxxxx) - Increment the X86_64 NR_CPUS maximum value from 5120 to 8192 to be able to account for Linux 3.13-rc1 and later kernels in which CONFIG_MAXSMP has been configured. If that is true, the CONFIG_NR_CPUS value is overridden, and the kernel NR_CPUS value will be set to 8192. This will cause the crash session to fail with the messages "WARNING: kernel-configured NR_CPUS (8192) greater than compiled-in NR_CPUS (5120)" and "crash: recompile crash with larger NR_CPUS". (anderson@xxxxxxxxxx) - A crash-7.0.3 fix for the proper determination of the kernel NR_CPUS configurable for Linux 3.8 and later kernels introduced a regression in Linux 3.8 and later kernels if: (1) the kernel is configured with CONFIG_SLAB, and (2) the sum of the kernel's NR_CPUS and MAX_NUMNODES values exceed the NR_CPUS value compiled into the crash utility. Without the patch, the crash session generates a segmentation fault while it indicates "please wait: gathering kmem slab cache data". (anderson@xxxxxxxxxx) - Update for the extensions/trace.c extension module to support the ftrace data structure changes introduced in Linux 3.10 kernels. Without the patch, loading the module with the "extend" command fails with the error message "extend: trace.so: no commands registered: shared object unloaded". (d.hatayama@xxxxxxxxxxxxxx) - Increment the S390 and S390X NR_CPUS maximum value from 64 to 512. (holzheu@xxxxxxxxxxxxxxxxxx) - Implemented support for the redesigned per-slab object bookkeeping that was introduced in Linux 3.13-rc1 for kernels configured with CONFIG_SLAB. In those kernels, the head page structure associated with each slab is overloaded to serve as the (now removed) slab data structure, and the array of kmem_bufctl_t data structures that used to be appended to each slab data structure for object management has been replaced by a new freelist stack mechanism. Without the patch, the crash session would fail during initialization with the error message "crash: invalid structure member offset: kmem_cache_s_c_num". It should be noted that this patch has only been tested on 3.13-rc1 kernels, which do not have the modified freelist_idx_t in place as of yet, so the replacement of integer-sized indexes with byte or short sized indexes had not been checked in. Furthermore, if this proposed patch set gets accepted: [RFC][PATCH 0/3] re-shrink 'struct page' when SLUB is on. https://lkml.org/lkml/2013/12/11/589 then both CONFIG_SLAB and CONFIG_SLUB support in the crash utility will be broken yet again. (anderson@xxxxxxxxxx) - In order to facilitate the building of the crash binary with either or both of the optional LZO or SNAPPY compression libraries, two new Makefile targets have been added: $ make lzo $ make snappy Without the patch, the CFLAGS.extra and LDFLAGS.extra files must be created or modified as described in these changelog entries: http://people.redhat.com/anderson/crash.changelog.html#LZO http://people.redhat.com/anderson/crash.changelog.html#SNAPPY This patch simply does the work automatically. After having done it one time, there is no need to use the targets for subsequent builds. The relevant libraries must pre-exist on the build machine. (anderson@xxxxxxxxxx) - Long overdue update of the README file. (anderson@xxxxxxxxxx) -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility