Bug 607168

Summary: crashkernel=auto doesn't work on systems <4GB RAM
Product: Red Hat Enterprise Linux 6 Reporter: Stefan Assmann <sassmann>
Component: kernelAssignee: Red Hat Kernel Manager <kernel-mgr>
Status: CLOSED NOTABUG QA Contact: Red Hat Kernel QE team <kernel-qe>
Severity: medium Docs Contact:
Priority: medium    
Version: 6.0CC: amwang, jwest, nhorman, prarit
Target Milestone: rc   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2010-11-09 22:21:14 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---
Attachments:
Description Flags
crashkernel-v1.patch none

Description Stefan Assmann 2010-06-23 12:44:03 UTC
Description of problem:
The crashkernel=auto detection algorithm bails out on systems with less than 4GB of memory, leading to the remove of the whole crashkernel=auto command line parameter.

The algorithm shouldn't force any artificial boundaries, instead it should try it's best to get kdump working. So instead of bailing out in the case of <4GB main memory it should just return the default of 128MB. If the system cannot allocate the memory it's going to complain anyway.

kernel/kexec.c
unsigned long long __init arch_default_crash_size(unsigned long long total_size)
{
        if (total_size < KEXEC_AUTO_THRESHOLD)
                return 0;
include/asm-generic/kexec.h
#define KEXEC_AUTO_THRESHOLD (1ULL<<32) /* 4G */

Also the kernel command line should be preserved the way it is. Tempering with it is usually a bad idea. It also conceals the reason why no memory gets reserved in this scenario.

static void __init reserve_crashkernel(void)
[...]
                        /*
                         * We can't reserve memory auotmatcally,
                         * remove "crashkernel=auto" from cmdline.
                         */
                        ck_cmdline += 4; /* strlen("auto") */
                        memmove(ck_cmdline - 16, ck_cmdline,
                                strlen(cmdline) - (ck_cmdline - cmdline) + 1);
                        return -ENOMEM;



Version-Release number of selected component (if applicable):
2.6.32-37.el6.i686

Comment 2 RHEL Product and Program Management 2010-06-23 13:13:00 UTC
This request was evaluated by Red Hat Product Management for inclusion in a Red
Hat Enterprise Linux major release.  Product Management has requested further
review of this request by Red Hat Engineering, for potential inclusion in a Red
Hat Enterprise Linux Major release.  This request is not yet committed for
inclusion.

Comment 4 Stefan Assmann 2010-06-24 09:44:21 UTC
Created attachment 426507 [details]
crashkernel-v1.patch

Comment 7 RHEL Product and Program Management 2010-07-15 15:05:02 UTC
This issue has been proposed when we are only considering blocker
issues in the current Red Hat Enterprise Linux release. It has
been denied for the current Red Hat Enterprise Linux release.

** If you would still like this issue considered for the current
release, ask your support representative to file as a blocker on
your behalf. Otherwise ask that it be considered for the next
Red Hat Enterprise Linux release. **