Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15:Update
kdump.21349
kdump-treat-KDUMP_CPUS-0-as-all-available-CPUs....
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kdump-treat-KDUMP_CPUS-0-as-all-available-CPUs.patch of Package kdump.21349
From: Petr Tesarik <ptesarik@suse.com> Date: Fri Jun 23 13:43:15 2017 +0200 Subject: Treat KDUMP_CPUS=0 as "all available CPUs" References: bsc#1036223 Upstream: v0.8.17 Git-commit: 34192abe9a0f5ddbcd580fa52b7fa4400533b9a4 Since SMP after crash is now considered stable, remove the warnings and make the feature more useful by not requiring a fixed number of CPUs. Signed-off-by: Petr Tesarik <ptesarik@suse.com> --- doc/man/kdump.5.txt.in | 7 +++---- init/load.sh | 7 +++++-- kdumptool/calibrate.cc | 6 +++--- kdumptool/savedump.cc | 23 ++++++++++++++--------- kdumptool/savedump.h | 2 +- sysconfig.kdump.in | 7 +------ 6 files changed, 27 insertions(+), 25 deletions(-) --- a/doc/man/kdump.5.txt.in +++ b/doc/man/kdump.5.txt.in @@ -136,13 +136,12 @@ the number of CPUs in your system. This parameter modifies the _maxcpus_ parameter of the kdump kernel and the number of *makedumpfile*(8) processes created. +If the value is zero, all available CPUs are used, i.e. the _maxcpus_ +parameter is not added to the kdump kernel command line. + *Note:* This parameter does not work properly for the _ELF_ format, because *makedumpfile*(8) does not support split _ELF_ dump files. -*WARNING:* SETTING THIS NUMBER TO A NUMBER HIGHER THAN 1 IS EXPERIMENTAL! -SOME MACHINES ARE KNOWN TO HANG OR REBOOT RANDOMLY DURING INITIALISATION -OF THE DUMP KERNEL IF KDUMP_CPUS > 1. - Default is 1. --- a/init/load.sh +++ b/init/load.sh @@ -63,14 +63,17 @@ function build_kdump_commandline() local commandline="$KDUMP_COMMANDLINE" if [ -z "$commandline" ] ; then - local nr_cpus=$(cpus_param "$kdump_kernel") + local nr_cpus commandline=$( remove_from_commandline \ 'root|resume|crashkernel|splash|mem|BOOT_IMAGE|showopts|zfcp\.allow_lun_scan|hugepages|acpi_no_memhotplug|cgroup_disable|unknown_nmi_panic|rd\.udev\.children-max' \ < /proc/cmdline) + if [ ${KDUMP_CPUS:-1} -ne 0 ] ; then + nr_cpus=$(cpus_param "$kdump_kernel")=${KDUMP_CPUS:-1} + fi # Use deadline for saving the memory footprint commandline="$commandline elevator=deadline sysrq=yes reset_devices acpi_no_memhotplug cgroup_disable=memory" - commandline="$commandline irqpoll ${nr_cpus}=${KDUMP_CPUS:-1}" + commandline="$commandline irqpoll ${nr_cpus}" commandline="$commandline root=kdump rootflags=bind rd.udev.children-max=8" case $(uname -i) in i?86|x86_64) --- a/kdumptool/calibrate.cc +++ b/kdumptool/calibrate.cc @@ -905,10 +905,10 @@ void Calibrate::execute() } // Add memory based on CPU count - unsigned long cpus; - if (CAN_REDUCE_CPUS) { + unsigned long cpus = 0; + if (CAN_REDUCE_CPUS) cpus = config->KDUMP_CPUS.value(); - } else { + if (!cpus) { SystemCPU syscpu; unsigned long online = syscpu.numOnline(); unsigned long offline = syscpu.numOffline(); --- a/kdumptool/savedump.cc +++ b/kdumptool/savedump.cc @@ -41,6 +41,7 @@ #include "identifykernel.h" #include "email.h" #include "routable.h" +#include "calibrate.h" using std::string; using std::list; @@ -60,7 +61,7 @@ using std::ifstream; SaveDump::SaveDump() throw () : m_dump(DEFAULT_DUMP), m_transfer(NULL), m_usedDirectSave(false), - m_useMakedumpfile(false), m_useSplit(false), m_nomail(false) + m_useMakedumpfile(false), m_split(0), m_nomail(false) { Debug::debug()->trace("SaveDump::SaveDump()"); @@ -284,10 +285,15 @@ void SaveDump::saveDump(const RootDirURL if (noDump) return; // nothing to be done + unsigned long cpus = config->KDUMP_CPUS.value(); + if (cpus) { + SystemCPU syscpu; + cpus = syscpu.numOnline(); + } if (!config->kdumptoolContainsFlag("NOSPLIT") && - config->KDUMP_CPUS.value() > 1) { + cpus > 1) { if (!useElf) - m_useSplit = true; + m_split = cpus; else cerr << "Splitting ELF dumps is not supported." << endl; } @@ -305,7 +311,7 @@ void SaveDump::saveDump(const RootDirURL // use makedumpfile ostringstream cmdline; cmdline << "makedumpfile "; - if (m_useSplit) + if (m_split) cmdline << "--split "; cmdline << config->MAKEDUMPFILE_OPTIONS.value() << " "; cmdline << "-d " << config->KDUMP_DUMPLEVEL.value() << " "; @@ -340,10 +346,9 @@ void SaveDump::saveDump(const RootDirURL provider->setProgress(&progress); else cout << "Saving dump ..." << endl; - if (m_useSplit) { + if (m_split) { StringVector targets; - const int cpus = config->KDUMP_CPUS.value(); - for (int i = 1; i <= cpus; ++i) { + for (unsigned long i = 1; i <= m_split; ++i) { ostringstream ss; ss << "vmcore" << i; targets.push_back(ss.str()); @@ -482,8 +487,8 @@ void SaveDump::generateInfo() ss << "Dump level : " << Stringutil::number2string(config->KDUMP_DUMPLEVEL.value()) << endl; ss << "Dump format : " << config->KDUMP_DUMPFORMAT.value() << endl; - if (m_useSplit && m_usedDirectSave) - ss << "Split parts : " << config->KDUMP_CPUS.value() << endl; + if (m_split && m_usedDirectSave) + ss << "Split parts : " << m_split << endl; ss << endl; --- a/kdumptool/savedump.h +++ b/kdumptool/savedump.h @@ -112,7 +112,7 @@ class SaveDump : public Subcommand { Transfer *m_transfer; bool m_usedDirectSave; bool m_useMakedumpfile; - bool m_useSplit; + unsigned long m_split; std::string m_crashtime; std::string m_crashrelease; std::string m_rootdir; --- a/sysconfig.kdump.in +++ b/sysconfig.kdump.in @@ -18,13 +18,8 @@ KDUMP_KERNELVER="" # # Number of CPUs to be used in the kdump environment. You may want to # increase the number if computing power is the bottleneck in your setup. -# This value is used as the maxcpus parameter of the secondary kernel, so -# DON'T CHANGE IT unless your system can reliably re-initialize SMP after -# a kernel crash. # -# WARNING: SETTING THIS NUMBER TO A NUMBER HIGHER THAN 1 IS EXPERIMENTAL! -# SOME MACHINES ARE KNOWN TO HANG OR REBOOT RANDOMLY DURING INITIALISATION -# OF THE DUMP KERNEL IF KDUMP_CPUS > 1. +# If the value is zero, use all available CPUs. # # See also: kdump(5). #
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor