Comment 6 for bug 1712867

Revision history for this message
Marcelo Cerri (mhcerri) wrote :

I was able to make the xenial version of crash to work with both the linux-generic and linux-azure kernels applying the following upstream changes:

Commit: 7e0cb8b516788c7ba1ef9f32556df347ba0da187
Fix for Linux commit 0100301bfdf56a2a370c7157b5ab0fbf9313e1cd, which rewrote the X86_64 switch_to() code by embedding the __switch_to() call inside a new __switch_to_asm() assembly code ENTRY() function. Without the patch, the message "crash: cannot determine thread return address" gets displayed during initialization, and the "bt" command shows frame #0 starting at "schedule" instead of "__schedule". (<email address hidden>)
Commit: 63f7707d2b534bab2a18c52db41daae7e9c5e505
Fix for the "ps -t" option in 3.17 and later kernels that contain commit ccbf62d8a284cf181ac28c8e8407dd077d90dd4b, which changed the task_struct.start_time member from a struct timespec to a u64. Without the patch, the "RUN TIME" value is nonsensical. (<email address hidden>)

Commit: c1eb2b99e2d9201583aac5a664126d83039bddff
Fix for the "irq -s" option for Linux 4.2 and later kernels. Without the patch, the irq_chip.name string (e.g. "IO-APIC", "PCI-MSI", etc.) is missing from the display. (<email address hidden>)

Commit: 76a71fed90c6304110dbce61d6c833543f2f1ac8
Improvement of the accuracy of the allocated objects count for each kmem_cache shown by "kmem -s" in kernels configured with CONFIG_SLUB. Without the patch, the values under the ALLOCATED column may be too large because cached per-cpu objects are counted as allocated. (<email address hidden>)

Commit: 569002249b1d57162a1e94f529d295828d4e0253
When reading a task's task_struct.flags field, check for its size, which was changed from an unsigned long to an unsigned int. (<email address hidden>)

Commit: 10192898cf59b7b4bb102ef39c72ab65bd401471
Fix for Linux 4.8-rc1 commit 500462a9de657f86edaa102f8ab6bff7f7e43fc2, in which Thomas Gleixner redesigned the kernel timer mechanism to switch to a non-cascading wheel. Without the patch, the "timer" command fails with the message "timer: zero-size memory allocation! (called from <address>)" (<email address hidden>)

Commit: df08978f31ba39e94b3096804f4e0776373c8b53
Improvement of the "dev -d" option to display I/O statics for disks whose device driver uses the blk-mq interface. Currently "dev -d" always displays 0 in all fields for the blk-mq disk because blk-mq does not increment/decrement request_list.count[2] on I/O creation and I/O completion. The following values are used in blk-mq in such situations: - I/O creation: blk_mq_ctx.rq_dispatched[2] - I/O completion: blk_mq_ctx.rq_completed[2] So, we can get the counter of in-progress I/Os as follows: in progress I/Os == rq_dispatched - rq_completed This patch displays the result of above calculation for the disk. It determines whether the device driver uses blk-mq if the request_queue.mq_ops is not NULL. The "DRV" field is displayed as "N/A(MQ)" if the value for in-flight in the device driver does not exist for blk-mq. (<email address hidden>)

Commit: db552975315fec06a957c937803935d8fbddfd2d
Introduction of a new "bt -v" option that checks the kernel stack of all tasks for evidence of stack overflows. It does so by verifying the thread_info.task address, ensuring the thread_info.cpu value is a valid cpu number, and checking the end of the stack for the STACK_END_MAGIC value. (<email address hidden>)

Commit: c9f932440bd06f0a3d6d3ecc30d5c670021d5e5a
Fix for Linux 4.9-rc1 commits 15f4eae70d365bba26854c90b6002aaabb18c8aa and c65eacbe290b8141554c71b2c94489e73ade8c8d, which have introduced a new CONFIG_THREAD_INFO_IN_TASK configuration. This configuration moves each task's thread_info structure from the base of its kernel stack into its task_struct. Without the patch, the crash session fails during initialization with the error "crash: invalid structure member offset: thread_info_cpu". (<email address hidden>)

Commit: 24a696228c56fd4354d29abe05b206373e0c8bfb
Fix for Linux 4.10 commit 7fd8329ba502ef76dd91db561c7aed696b2c7720 "taint/module: Clean up global and module taint flags handling". Without the patch, when running against Linux 4.10-rc1 and later kernels, the crash utility fails during session initialization with the message "crash: invalid structure size: tnt". (<email address hidden>)

Commit: e37dd7852f590e3334420e5b41a833085ab1d0b0
Prepare for the kernel's "taint_flag.true" and "taint_flag.false" member names to be changed to "c_true" and "c_false", which fixes build problems when an out-of-tree module defines "true" or "false". (<email address hidden>)

Commit: 651c824ffe2fd7eb8e416dbf4ff5c9a1da6ef7c6
Prevent the livepatch taint flag check during the system banner display from generating a fatal session-killing error if relevant kernel symbol names or data structures change in the future (again). (<email address hidden>)