On Sun, Mar 15, 2026 at 09:24:39PM -0500, Bjorn Andersson wrote:
> On Wed, Mar 11, 2026 at 01:45:44AM +0530, Mukesh Ojha wrote:
> > First of all, I want to thank Eugene for his excellent work on this
> > series. What began as the Qualcomm Minidump driver from me has now
> > evolved into meminspect. He also presented meminspect a few months ago
> > at Linux Plumbers 2025.
> > 
> > Video of the recording is available here for anyone interested:
> > https://www.youtube.com/watch?v=aDZv4-kOLSc
> > 
> > Introduction:
> > 
> > meminspect is a mechanism which allows the kernel to mark specific
> > memory areas for memory dumping or specific inspection, statistics,
> > usage.  Once regions are marked, meminspect keeps an internal list with
> > the regions in a dedicated table.  Further, these regions can be
> > accessed using specific API by any interested driver.  Regions being
> > marked beforehand, when the system is up and running, there is no need
> > nor dependency on a panic handler, or a working kernel that can dump the
> > debug information.  meminspect can be primarily used for debugging. The
> > approach is feasible to work when pstore, kdump, or another mechanism do
> > not.  Pstore relies on persistent storage, a dedicated RAM area or
> > flash, which has the disadvantage of having the memory reserved all the
> > time, or another specific non volatile memory. Some devices cannot keep
> > the RAM contents on reboot so ramoops does not work. Some devices do not
> > allow kexec to run another kernel to debug the crashed one.  For such
> > devices, that have another mechanism to help debugging, like firmware,
> > kmemdump is a viable solution.
> > 
> > meminspect can create a core image, similar with /proc/vmcore, with only
> > the registered regions included. This can be loaded into crash tool/gdb
> > and analyzed. This happens if CRASH_DUMP=y.  To have this working,
> > specific information from the kernel is registered, and this is done at
> > meminspect init time, no need for the meminspect users to do anything.
> > 
> > This version of the meminspect patch series includes two drivers that
> > make use of it: one is the Qualcomm Minidump, and the other one is the
> > Debug Kinfo backend for Android devices, reworked from this source here:
> > https://android.googlesource.com/kernel/common/+/refs/heads/android-mainline/drivers/android/debug_kinfo.c
> > written originally by Jone Chou <[email protected]>
> > 
> > *** History, motivation and available online resources ***
> > 
> > The patch series is based on both minidump and kmemdump previous 
> > implementations.
> > 
> > After the three RFC kmemdump versions, considering the ML discussions, it 
> > was decided to
> > move this into kernel/ directory and rework it into naming it meminspect, 
> > as Thomas Gleixner
> > suggested.
> > 
> > Initial version of kmemdump and discussion is available here:
> > https://lore.kernel.org/lkml/[email protected]/
> > 
> > Kmemdump has been presented and discussed at Linaro Connect 2025,
> > including motivation, scope, usability and feasability.
> > Video of the recording is available here for anyone interested:
> > https://www.youtube.com/watch?v=r4gII7MX9zQ&list=PLKZSArYQptsODycGiE0XZdVovzAwYNwtK&index=14
> > 
> > Linaro blog on kmemdump can be found here:
> > https://www.linaro.org/blog/introduction-to-kmemdump/
> > 
> > Linaro blog on kmemdump step by stem using minidump backend is available 
> > here:
> > https://www.linaro.org/blog/kmemdump-step-by-step-on-qualcomm-automotive-platform/
> > 
> > The implementation is based on the initial Pstore/directly mapped zones
> > published as an RFC here:
> > https://lore.kernel.org/all/[email protected]/
> > 
> > The back-end implementation for qcom_minidump is based on the minidump
> > patch series and driver written by Mukesh Ojha, thanks:
> > https://lore.kernel.org/lkml/[email protected]/
> > 
> > The RFC v2 version with .section creation and macro annotation kmemdump
> > is available here:
> > https://lore.kernel.org/all/[email protected]/
> > 
> > The RFC v3 version with making everything static, which was pretty much 
> > rejected due to
> > all reasons discussed on the public ML:
> > https://lore.kernel.org/all/[email protected]/
> > 
> > *** How to use meminspect with minidump backend on Qualcomm platform guide 
> > ***
> > 
> > Prerequisites:
> > Crash tool compiled with target=ARM64 and minor changes required for
> > usual crash mode (minimal mode works without the patch) **A patch can be
> > applied from here https://p.calebs.dev/1687bc ** This patch will be
> > eventually sent in a reworked way to crash tool.
> > 
> 
> That patch was written 8 months ago, what's the timeline for landing
> this?
> 
> It's not feasible to have every users rebuild crash from source and
> maintain this copy in order to use the tool.

Right, Let me see what I can do to make it acceptable..

> 
> > Target kernel must be built with : CONFIG_DEBUG_INFO_REDUCED=n ; this
> > will have vmlinux include all the debugging information needed for crash
> > tool.
> > 
> > Also, the kernel requires these as well: CONFIG_MEMINSPECT,
> > CONFIG_CRASH_DUMP and the driver CONFIG_QCOM_MINIDUMP
> > 
> > Kernel arguments: Kernel firmware must be set to mode 'mini' by kernel
> > module parameter like this : qcom_scm.download_mode=mini
> > 
> > After the kernel boots, and minidump module is loaded, everything is
> > ready for a possible crash.
> > 
> > Once the crash happens, the firmware will kick in and you will see on
> > the console the message saying Sahara init, etc, that the firmware is
> > waiting in download mode. (this is subject to firmware supporting this
> > mode, I am using sa8775p-ride board)
> > 
> > Example of log on the console:
> > "
> > [...]
> > B -   1096414 - usb: init start
> > B -   1100287 - usb: qusb_dci_platform , 0x19
> > B -   1105686 - usb: usb3phy: PRIM success: lane_A , 0x60
> > B -   1107455 - usb: usb2phy: PRIM success , 0x4
> > B -   1112670 - usb: dci, chgr_type_det_err
> > B -   1117154 - usb: ID:0x260, value: 0x4
> > B -   1121942 - usb: ID:0x108, value: 0x1d90
> > B -   1124992 - usb: timer_start , 0x4c4b40
> > B -   1129140 - usb: vbus_det_pm_unavail
> > B -   1133136 - usb: ID:0x252, value: 0x4
> > B -   1148874 - usb: SUPER , 0x900e
> > B -   1275510 - usb: SUPER , 0x900e
> > B -   1388970 - usb: ID:0x20d, value: 0x0
> > B -   1411113 - usb: ENUM success
> > B -   1411113 - Sahara Init
> > B -   1414285 - Sahara Open
> > "
> 
> This doesn't add any specific value, it's just "Device entered ramdump
> mode".

Sure, will remove it.

> 
> > 
> > Once the board is in download mode, you can use the qdl tool (I
> > personally use edl , have not tried qdl yet)
> 
> Is this your or Eugen's comment? Why haven't you tested qdl yet?

It was Eugene's comment, but I get it, I can try QDL and check, if it
works.

> 
> >, to get all the regions as
> > separate files.  The tool from the host computer will list the regions
> > in the order they were downloaded.
> > 
> > Once you have all the files simply use `cat` to put them all together,
> > in the order of the indexes.  For my kernel config and setup, here is my
> > cat command : (you can use a script or something, I haven't done that so
> > far):
> 
> So these need to be sorted in numerical order, by that number at the end
> of the file name?
> 
> Do you manually punch these in? How do we make this user friendly?

Yes, manually.. but I think we can do better. We could make
this more user‑friendly by using the section header and string table in
the md_KELF binary both of which existed in the earlier implementation.
Then, we can write an upstream‑friendly script that reads this KELF
metadata file, checks whether a binary with the registered name is
present, and stitches everything together to form a complete ELF that
the crash tool can consume.  Let me know if you have any suggestion..

> 
> Regards,
> Bjorn
> 
> > 
> > `cat md_KELF1.BIN md_Kvmcorein2.BIN md_Kconfig3.BIN \
> > md_Ktotalram4.BIN md_Kcpu_poss5.BIN md_Kcpu_pres6.BIN \
> > md_Kcpu_onli7.BIN md_Kcpu_acti8.BIN md_Kmem_sect9.BIN \
> > md_Kjiffies10.BIN md_Klinux_ba11.BIN md_Knr_threa12.BIN \
> > md_Knr_irqs13.BIN md_Ktainted_14.BIN md_Ktaint_fl15.BIN \
> > md_Knode_sta16.BIN md_K__per_cp17.BIN md_Knr_swapf18.BIN \
> > md_Kinit_uts19.BIN md_Kprintk_r20.BIN md_Kprintk_r21.BIN \
> > md_Kprb22.BIN md_Kprb_desc23.BIN md_Kprb_info24.BIN \
> > md_Kprb_data25.BIN  md_Khigh_mem26.BIN md_Kinit_mm27.BIN \
> > md_Kunknown29.BIN md_Kunknown30.BIN md_Kunknown31.BIN \
> > md_Kunknown32.BIN md_Kunknown33.BIN md_Kunknown34.BIN \
> > md_Kunknown35.BIN md_Kunknown37.BIN \
> > md_Kunknown38.BIN md_Kunknown39.BIN md_Kunknown40.BIN \
> > md_Kunknown41.BIN md_Kunknown42.BIN md_Kunknown43.BIN \
> > md_Kunknown44.BIN md_Kunknown45.BIN  md_Kunknown46.BIN \
> > md_Kunknown47.BIN md_Kunknown48.BIN md_Kunknown49.BIN \
> > md_Kunknown50.BIN md_Kunknown51.BIN md_Kunknown52.BIN \
> > md_Kunknown53.BIN md_Kunknown54.BIN   > ./minidump_image`
> > 
> > Once you have the resulted file, use `crash` tool to load it, like this:
> > `./crash --no_modules --no_panic --no_kmem_cache --zero_excluded vmlinux 
> > minidump_image`
> > 
> > There is also a --minimal mode for ./crash that would work without any 
> > patch applied
> > to crash tool, but you can't inspect symbols, etc.
> > 
> > Once you load crash you will see something like this :
> >       KERNEL: minidump/20260310-235110/vmlinux  [TAINTED]
> >     DUMPFILE: ./minidump/20260310-235110/minidump_image
> >         CPUS: 8 [OFFLINE: 7]
> >         DATE: Thu Jan  1 05:30:00 +0530 1970
> >       UPTIME: 00:00:27
> >        TASKS: 0
> >     NODENAME: qemuarm64
> >      RELEASE: 7.0.0-rc3-next-20260309-00028-g528b3c656121
> >      VERSION: #5 SMP PREEMPT Tue Mar 10 18:18:41 UTC 2026
> >      MACHINE: aarch64  (unknown Mhz)
> >       MEMORY: 0
> >        PANIC: "Kernel panic - not syncing: sysrq triggered crash"
> > 
> > crash> log
> > [    0.000000] Booting Linux on physical CPU 0x0000000000 [0x514f0014]
> > [    0.000000] Linux version 7.0.0-rc3-next-20260309-00028-g528b3c656121 
> > (@21e3bca4168f) (aarch64-linux-gnu-gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 
> > 13.3.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #5 SMP PREEMPT Tue Mar 10 
> > 18:18:41 UTC 2026
> > 
> > *** Debug Kinfo backend driver ***
> > I need help with the testing of this driver, Anyone who actually wants
> > to test this, feel free to reply to the patch. we have also written a
> > simple DT binding for the driver.
> > 
> > Thanks in advance for the review, and apologies if I missed addressing any 
> > comment.
> > 
> > -Mukesh 
> > 
> > Changes in v2: 
> > https://lore.kernel.org/lkml/[email protected]/
> >  - Fixed doc warnings
> >  - Fixed kernel-test robot warnings.
> >  - Took Mike suggestion to remove mark inspect flag for dynamic memory.
> >  - Added R-b for printk patch.
> >  - Modified some commit messages for clarity.
> >  - corrected binding change for debug-kinfo as per Rob suggestion.
> > 
> > Changelog for meminspect v1:
> > - rename to meminspect
> > - start on top of v2 actually, with the section and all.
> > - remove the backend thing, change the API to access the table
> > - move everything to kernel/
> > - add dependency to CRASH_DUMP instead of a separate knob
> > - move the minidump driver to soc/qcom
> > - integrate the meminspect better into memblock by using a new memblock flag
> > - minor fixes : use dev_err_probe everywhere, rearrange variable 
> > declarations,
> > remove some useless code, etc.
> > 
> > Changelog for RFC v3:
> > - V2 available here : 
> > https://lore.kernel.org/all/[email protected]/
> > - Removed the .section as requested by David Hildenbrand.
> > - Moved all kmemdump registration(when possible) to vmcoreinfo.
> > - Because of this, some of the variables that I was registering had to be 
> > non-static
> > so I had to modify this as per David Hildenbrand suggestion.
> > - Fixed minor things in the Kinfo driver: one field was broken, fixed some
> > compiler warnings, fixed the copyright and remove some useless includes.
> > - Moved the whole kmemdump from drivers/debug into mm/ and Kconfigs into 
> > mm/Kconfig.debug
> > and it's now available in kernel hacking, as per Randy Dunlap review
> > - Reworked some of the Documentation as per review from Jon Corbet
> > 
> > Changelog for RFC v2:
> > - V1 available here: 
> > https://lore.kernel.org/lkml/[email protected]/
> > - Reworked the whole minidump implementation based on suggestions from 
> > Thomas Gleixner.
> > This means new API, macros, new way to store the regions inside kmemdump
> > (ditched the IDR, moved to static allocation, have a static default 
> > backend, etc)
> > - Reworked qcom_minidump driver based on review from Bjorn Andersson
> > - Reworked printk log buffer registration based on review from Petr Mladek
> > 
> > I appologize if I missed any review comments.
> > Patches are sent on top on next-20260309 tag
> > 
> > ---
> > Eugen Hristev (21):
> >       kernel: Introduce meminspect
> >       init/version: Annotate static information into meminspect
> >       mm/percpu: Annotate static information into meminspect
> >       cpu: Annotate static information into meminspect
> >       genirq/irqdesc: Annotate static information into meminspect
> >       timers: Annotate static information into meminspect
> >       kernel/fork: Annotate static information into meminspect
> >       mm/page_alloc: Annotate static information into meminspect
> >       mm/show_mem: Annotate static information into meminspect
> >       mm/swapfile: Annotate static information into meminspect
> >       kernel/vmcore_info: Register dynamic information into meminspect
> >       kernel/configs: Register dynamic information into meminspect
> >       mm/init-mm: Annotate static information into meminspect
> >       panic: Annotate static information into meminspect
> >       kallsyms: Annotate static information into meminspect
> >       mm/mm_init: Annotate static information into meminspect
> >       sched/core: Annotate runqueues into meminspect
> >       remoteproc: qcom: Move minidump data structures into its own header
> >       soc: qcom: Add minidump backend driver
> >       soc: qcom: smem: Add minidump platform device
> >       meminspect: Add debug kinfo compatible driver
> > 
> > Mukesh Ojha (4):
> >       mm/numa: Register node data information into meminspect
> >       mm/sparse: Register information into meminspect
> >       printk: Register information into meminspect
> >       dt-bindings: reserved-memory: Add Google Kinfo Pixel reserved memory
> > 
> >  Documentation/dev-tools/index.rst                  |   1 +
> >  Documentation/dev-tools/meminspect.rst             | 144 +++++++
> >  .../bindings/reserved-memory/google,kinfo.yaml     |  46 ++
> >  MAINTAINERS                                        |  14 +
> >  drivers/of/platform.c                              |   1 +
> >  drivers/remoteproc/qcom_common.c                   |  56 +--
> >  drivers/soc/qcom/Kconfig                           |  13 +
> >  drivers/soc/qcom/Makefile                          |   1 +
> >  drivers/soc/qcom/minidump.c                        | 272 ++++++++++++
> >  drivers/soc/qcom/smem.c                            |  10 +
> >  include/asm-generic/vmlinux.lds.h                  |  13 +
> >  include/linux/meminspect.h                         | 263 ++++++++++++
> >  include/linux/soc/qcom/minidump.h                  |  72 ++++
> >  init/Kconfig                                       |   1 +
> >  init/version-timestamp.c                           |   3 +
> >  init/version.c                                     |   3 +
> >  kernel/Makefile                                    |   1 +
> >  kernel/configs.c                                   |   6 +
> >  kernel/cpu.c                                       |   5 +
> >  kernel/fork.c                                      |   3 +
> >  kernel/irq/irqdesc.c                               |   2 +
> >  kernel/kallsyms.c                                  |   9 +
> >  kernel/meminspect/Kconfig                          |  30 ++
> >  kernel/meminspect/Makefile                         |   4 +
> >  kernel/meminspect/kinfo.c                          | 284 +++++++++++++
> >  kernel/meminspect/meminspect.c                     | 471 
> > +++++++++++++++++++++
> >  kernel/panic.c                                     |   4 +
> >  kernel/printk/printk.c                             |  11 +
> >  kernel/sched/core.c                                |   2 +
> >  kernel/time/timer.c                                |   2 +
> >  kernel/vmcore_info.c                               |   4 +
> >  mm/init-mm.c                                       |  11 +
> >  mm/mm_init.c                                       |   2 +
> >  mm/numa.c                                          |   2 +
> >  mm/page_alloc.c                                    |   2 +
> >  mm/percpu.c                                        |   2 +
> >  mm/show_mem.c                                      |   2 +
> >  mm/sparse.c                                        |   6 +
> >  mm/swapfile.c                                      |   2 +
> >  39 files changed, 1725 insertions(+), 55 deletions(-)
> > ---
> > base-commit: 343f51842f4ed7143872f3aa116a214a5619a4b9
> > change-id: 20260311-minidump-v2-eed8da647ce5
> > 
> > Best regards,
> > -- 
> > -Mukesh Ojha
> > 

-- 
-Mukesh Ojha

Reply via email to