Re: crashkernel reservation failed - No suitable area found on a cortina/gemini SoC

From: Corentin Labbe
Date: Fri Apr 09 2021 - 10:53:21 EST


Le Wed, Apr 07, 2021 at 07:59:27AM -0700, Bruce Mitchell a écrit :
> On 4/7/2021 07:48, Corentin Labbe wrote:
> > Le Wed, Apr 07, 2021 at 07:28:26AM -0700, Bruce Mitchell a écrit :
> >> On 4/7/2021 07:23, Corentin Labbe wrote:
> >>> Le Wed, Apr 07, 2021 at 07:13:04AM -0700, Bruce Mitchell a écrit :
> >>>> On 4/7/2021 05:54, Corentin Labbe wrote:
> >>>>> Hello
> >>>>>
> >>>>> I try to do kexec on a cortina/gemini SoC.
> >>>>> On a "normal" boot, kexec fail to find memory so I added crashkernel=8M to cmdline. (kernel size is ~6M).
> >>>>> But now, kernel fail to reserve memory:
> >>>>> Load Kern image from 0x30020000 to 0x800000 size 7340032
> >>>>> Booting Linux on physical CPU 0x0
> >>>>> Linux version 5.12.0-rc5-next-20210401+ (compile@Red) (armv7a-unknown-linux-gnueabihf-gcc (Gentoo 9.3.0-r2 p4) 9.3.0, GNU ld (Gentoo 2.34 p6) 2.34.0) #98 PREEMPT Wed Apr 7 14:14:08 CEST 2021
> >>>>> CPU: FA526 [66015261] revision 1 (ARMv4), cr=0000397f
> >>>>> CPU: VIVT data cache, VIVT instruction cache
> >>>>> OF: fdt: Machine model: Edimax NS-2502
> >>>>> Memory policy: Data cache writeback
> >>>>> Zone ranges:
> >>>>> Normal [mem 0x0000000000000000-0x0000000007ffffff]
> >>>>> HighMem empty
> >>>>> Movable zone start for each node
> >>>>> Early memory node ranges
> >>>>> node 0: [mem 0x0000000000000000-0x0000000007ffffff]
> >>>>> Initmem setup node 0 [mem 0x0000000000000000-0x0000000007ffffff]
> >>>>> crashkernel reservation failed - No suitable area found.
> >>>>> Built 1 zonelists, mobility grouping on. Total pages: 32512
> >>>>> Kernel command line: console=ttyS0,19200n8 ip=dhcp crashkernel=8M
> >>>>> Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
> >>>>> Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
> >>>>> mem auto-init: stack:off, heap alloc:off, heap free:off
> >>>>> Memory: 119476K/131072K available (5034K kernel code, 579K rwdata, 1372K rodata, 3020K init, 210K bss, 11596K reserved, 0K cma-reserved, 0K highmem)
> >>>>> SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
> >>>>>
> >>>>> What can I do ?
> >>>>>
> >>>>> Thanks
> >>>>> Regards
> >>>>>
> >>>>> _______________________________________________
> >>>>> kexec mailing list
> >>>>> kexec@xxxxxxxxxxxxxxxxxxx
> >>>>> http://lists.infradead.org/mailman/listinfo/kexec
> >>>>>
> >>>>
> >>>> Hello Corentin,
> >>>>
> >>>> I see much larger crashkernel=xxM being shown here
> >>>> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/kdump/kdump.rst
> >>>> and from many of my other searches.
> >>>>
> >>>> Here is an interesting article on kdump for ARM-32
> >>>> https://kaiwantech.wordpress.com/2017/07/13/setting-up-kdump-and-crash-for-arm-32-an-ongoing-saga/
> >>>>
> >>>>
> >>>> Here is the kernel command line reference
> >>>> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/kernel-parameters.txt?h=v5.11#n732
> >>>>
> >>>> I feel your frustrations too.
> >>>
> >>> Hello
> >>>
> >>> Thanks but I have already read those documentation.
> >>> I search to know why the kernel cannot find 8M of memory ouf of 128.
> >>>
> >>> Regards
> >>>
> >>
> >> How much more memory does the kernel and initrd above and beyond just
> >> their physical size? (heaps, stacks, buffers, virtual filesystems)
> >
> > The kernel size include a rootfs.cpio.lzma of 3MB and dtb is appended.
> > The total kernel size is 7MB.
> > The uncompressed size of the kernel is 13M (size of vmlinux)
> > The uncompressed size of rootfs is 11M.
> >
> > cat /proc/meminfo
> > MemTotal: 122496 kB
> > MemFree: 103700 kB
> > MemAvailable: 101936 kB
> > Buffers: 0 kB
> > Cached: 10904 kB
> > SwapCached: 0 kB
> > Active: 4304 kB
> > Inactive: 8012 kB
> > Active(anon): 4304 kB
> > Inactive(anon): 8012 kB
> > Active(file): 0 kB
> > Inactive(file): 0 kB
> > Unevictable: 0 kB
> > Mlocked: 0 kB
> > HighTotal: 0 kB
> > HighFree: 0 kB
> > LowTotal: 122496 kB
> > LowFree: 103700 kB
> > SwapTotal: 0 kB
> > SwapFree: 0 kB
> > Dirty: 0 kB
> > Writeback: 0 kB
> > AnonPages: 1428 kB
> > Mapped: 3552 kB
> > Shmem: 10904 kB
> > KReclaimable: 608 kB
> > Slab: 2960 kB
> > SReclaimable: 608 kB
> > SUnreclaim: 2352 kB
> > KernelStack: 312 kB
> > PageTables: 136 kB
> > NFS_Unstable: 0 kB
> > Bounce: 0 kB
> > WritebackTmp: 0 kB
> > CommitLimit: 61248 kB
> > Committed_AS: 14336 kB
> > VmallocTotal: 901120 kB
> > VmallocUsed: 64 kB
> > VmallocChunk: 0 kB
> > Percpu: 32 kB
> > CmaTotal: 0 kB
> > CmaFree: 0 kB
> >
>
> I believe you need space for all of that,
> the smallest that would work for me was 20MB.

I tried without any change.

Anyway when trying to kexec I got:
kexec --no-ifdown --command-line="console=ttyS0,19200n8" /tmp/kernel |
Could not find a free area of memory of 0x668a8a bytes...
Cannot load /tmp/kernel

So reserving 8M is enough according to what kexec said.

So anyone know why the kernel cannot reserve 8M ?
Thanks