[PATCH makedumpfile v2 0/9] Improvements to makedumpfile extensions, plus userspace stack tracing extension

Stephen Brennan stephen.s.brennan at oracle.com
Thu Aug 20 16:31:05 PDT 2026


Hello all,

This is v2 of my series of improvements for makedumpfile extensions.
v1 can be found here: https://lore.kernel.org/kexec/20260714004550.3698175-1-stephen.s.brennan@oracle.com/

There have only been a few changes from v1:
- Updated extension/sample.c to use the new API in patch 3.
- Reordered and reworded the extension retained pages statistic per Tao's
  suggestion, so that it is more clear.
- Included a more complete commit message in patch 7.
- In patch 1, removed the "nr_pages = 1" when extensions return PG_EXCLUDE.
- Significantly reworded patch 1's commit message to explain the different cases
  and the alternative approach.

Notable improvements in the "userstack.c" extension are:
- Leverage "detect_cycle.h" API to apply Brent's algorithm for cycle detection
  in linked list iteration, to avoid infinite loops while iterating tasks &
  threads on corrupt vmcores.
- Set a limit to the number of retained anon_vma entries, to avoid hitting OOM
  issues in case of a huge vmcore or a bug in the extension.

As discussed on v1, the final two patches containing the extensions are not to
be merged. I will publish them in a Github repository as soon as I can get it
arranged with my employer. They are more for demonstration of the API and
continued sharing until the repository is available.

The major discussion on v1 was on patch 4, dealing with how extensions are
called, between:

(a) Extensions are called for all base pages, and their decisions may conflict
with the head page decision.
(b) Extensions are not called for tail pages, and the head page decision is used
instead.

As I explained in my last reply, I believe that (b) is still the best way. It is
less complex than (a). It is also more efficient, because makedumpfile today
skips processing many excluded tail pages, which adds up for large systems with
many huge pages. We do not have any extension which requires any policy more
complex than PG_INCLUDE_HEAD.

- elfheader requires PG_INCLUDE_HEAD
- userstack only uses PG_INCLUDE. I could imagine potentially wanting to include
  just the sub-pages of compound pages that are actually used by the stack. But
  it hasn't been necessary so far.
- amdgpu buffers may be compound pages but if they are, then the entire page
  would be excluded.

I do have an implementation of (a) as I showed in the thread. If I'm wrong here,
I can always fall back to that.

Thank you,
Stephen


Stephen Brennan (9):
  Do not call extensions for tail pages
  Honor CFLAGS in extension/Makefile
  Share page information with extension callbacks
  Introduce a stat for pages retained by extension
  Move page checks into makedumpfile.h
  Simplify arguments for page checks
  Add PG_INCLUDE_HEAD extension return status
  Add userstack extension
  Add elfheader extension

 extension.c             |  10 +-
 extension.h             |  10 +-
 extensions/Makefile     |   8 +-
 extensions/elfheader.c  |  93 +++++++++++
 extensions/list.h       | 106 ++++++++++++
 extensions/sample.c     |   2 +-
 extensions/userstack.c  | 351 ++++++++++++++++++++++++++++++++++++++++
 extensions/vma_mtree.c  | 140 ++++++++++++++++
 extensions/vma_mtree.h  |   7 +
 extensions/vma_rbtree.c |  56 +++++++
 extensions/vma_rbtree.h |  12 ++
 makedumpfile.c          | 189 +++++++++-------------
 makedumpfile.h          |  78 ++++++++-
 13 files changed, 931 insertions(+), 131 deletions(-)
 create mode 100644 extensions/elfheader.c
 create mode 100644 extensions/list.h
 create mode 100644 extensions/userstack.c
 create mode 100644 extensions/vma_mtree.c
 create mode 100644 extensions/vma_mtree.h
 create mode 100644 extensions/vma_rbtree.c
 create mode 100644 extensions/vma_rbtree.h

-- 
2.52.0




More information about the kexec mailing list