[PATCH V4] drop kdump script rhcrashkernel-param in kexec-tools repo
by Tong Li
Resolves: bz1399436
Since currently crashkernel= will be handled in kdump anaconda addon
we can safely remove rhcrashkernel-param callback.
Signed-off-by: Tong Li <tonli(a)redhat.com>
---
v1 -> v2: delete rhcrashkernel-param file as well
v2 -> v3: remove the mention of justification from commit log
V3 -> v4: also drop /usr/sbin/ since no other files use it
Since only rhcrashkernel-param was installed to /usr/sbin/, droping this
directory as well to make rpm build correctly.
kexec-tools.spec | 4 ----
rhcrashkernel-param | 6 ------
2 files changed, 10 deletions(-)
delete mode 100644 rhcrashkernel-param
diff --git a/kexec-tools.spec b/kexec-tools.spec
index d73b398..b6d2552 100644
--- a/kexec-tools.spec
+++ b/kexec-tools.spec
@@ -19,7 +19,6 @@ Source12: mkdumprd.8
Source14: 98-kexec.rules
Source15: kdump.conf.5
Source16: kdump.service
-Source17: rhcrashkernel-param
Source18: kdump.sysconfig.s390x
Source19: eppic_050615.tar.gz
Source20: kdump-lib.sh
@@ -187,8 +186,6 @@ install -m 644 %{SOURCE14} $RPM_BUILD_ROOT%{_udevrulesdir}/98-kexec.rules
install -m 644 %{SOURCE15} $RPM_BUILD_ROOT%{_mandir}/man5/kdump.conf.5
install -m 644 %{SOURCE16} $RPM_BUILD_ROOT%{_unitdir}/kdump.service
install -m 755 -D %{SOURCE22} $RPM_BUILD_ROOT%{_prefix}/lib/systemd/system-generators/kdump-dep-generator.sh
-mkdir -p $RPM_BUILD_ROOT/usr/sbin
-install -m 755 %{SOURCE17} $RPM_BUILD_ROOT/usr/sbin/rhcrashkernel-param
%ifarch %{ix86} x86_64 ppc64 s390x ppc64le
install -m 755 makedumpfile-1.6.0/makedumpfile $RPM_BUILD_ROOT/sbin/makedumpfile
@@ -292,7 +289,6 @@ done
%files
/sbin/*
-/usr/sbin/*
%{_bindir}/*
%{_datadir}/kdump
%{_prefix}/lib/kdump
diff --git a/rhcrashkernel-param b/rhcrashkernel-param
deleted file mode 100644
index a823e4b..0000000
--- a/rhcrashkernel-param
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-if grep -q Fedora /etc/redhat-release; then
- echo -n
-else
- echo crashkernel=auto
-fi
--
2.7.4
6 years, 4 months
[PATCH v5 2/2] kdumpctl: sanity check of nr_cpus for x86_64 in case running out of vectors
by Xunlei Pang
Check the number of cpus for x86_64 kdump kernel to boot with.
We met an issue on x86_64: kdump runs out of vectors with the
default "nr_cpus=1", when requesting tons of irqs.
This patch detects such situation and warns users about the risk.
The total number of vectors percpu is 256 defined by x86 architecture.
The available vectors can be allocated to io devices percpu starts
from FIRST_EXTERNAL_VECTOR(see kernel code), and some high-numbered
ones are consumed by some system interrupts. As a result, the vectors
for io device are within [FIRST_EXTERNAL_VECTOR, FIRST_SYSTEM_VECTOR),
with one known exception, 0x80 within the range is reserved specially
as the syscall vector.
FIRST_EXTERNAL_VECTOR is invariably 32, while FIRST_SYSTEM_VECTOR can
vary between different kernel versions. E.g. FIRST_SYSTEM_VECTOR gets
0xef(with CONFIG_X86_LOCAL_APIC on)for linux-4.10, that is 17 vectors
reserved, considering it may increase in the future and the special
vectors, we use a flexible variance and assume there are 32 reserved
from FIRST_EXTERNAL_VECTOR. Then the max vectors for device interrupts
percpu is: (256-32)-32=192, we acquire the number N of device interrupts
from /proc/irq/, then the number of minimal cpus required is calculated:
(N + 192 - 1) / 192
Acked-by: Pratyush Anand <panand(a)redhat.com>
Signed-off-by: Xunlei Pang <xlpang(a)redhat.com>
---
v4-v5:
- Improved code comments to solve the over-80-chars issue.
- Replaced "ls /proc/irq/ -l | grep ^d | wc -l" with
"ls -ld /proc/irq/*/ | wc -l" according to Dave's suggestion.
kdumpctl | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/kdumpctl b/kdumpctl
index b2068cc..4d68be0 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -105,6 +105,71 @@ append_cmdline()
echo $cmdline
}
+# Check the number of cpus for kdump kernel to boot with.
+# We met an issue on x86_64: kdump runs out of vectors with
+# "nr_cpus=1" when requesting tons of irqs, so here we check
+# "nr_cpus=1" and warn users if kdump probably can't work.
+check_kdump_cpus()
+{
+ local nr_origin nr_min nr_max
+ local arch=$(uname -m) cmdline=$KDUMP_COMMANDLINE_APPEND
+
+ if [ $arch != "x86_64" ]; then
+ return
+ fi
+
+ # We only care about the default "nr_cpus=1".
+ echo $cmdline | grep -E -q "nr_cpus=1[[:space:]]*|nr_cpus=1$"
+ if [ $? -ne 0 ]; then
+ return
+ fi
+
+ nr_origin=1
+
+ # Online cpus in first kernel.
+ nr_max=$(grep -c '^processor' /proc/cpuinfo)
+
+ # To calculate the estimated minimal cpus required.
+ nr_min=$(ls -ld /proc/irq/*/ | wc -l)
+
+ # Vectors for io device start from FIRST_EXTERNAL_VECTOR(32),
+ # some high-numbered ones starting from FIRST_EXTERNAL_VECTOR
+ # are reserved for system internal uses.
+ #
+ # We use a flexible variance and assume there are 32 reserved
+ # from FIRST_EXTERNAL_VECTOR. Then the total vectors for device
+ # interrupts percpu is: (256-32)-32=192.
+ #
+ # For "nr_cpus=1", irq and vector have the 1:1 mapping.
+ nr_min=$(($nr_min + 192 - 1))
+ nr_min=$(($nr_min / 192))
+ if [ $nr_min -gt 1 ]; then
+ # The system seems to have tons of interrupts. We need
+ # some further calculation of the number of cpus(>1).
+ # For "nr_cpus>1", irq and vector have the 1:M mapping,
+ # multiple-cpu affinity can consume multiple vectors.
+ # Luckily for x2apic which is commonly deployed on large
+ # modern machines, default case of boot, device bringup
+ # etc will use a single cpu to minimize vector pressure.
+ #
+ # For further safety, we add one more cpu and round it
+ # up to an even number.
+ nr_min=$(($nr_min + 1))
+ nr_min=$(($nr_min + $nr_min % 2))
+ fi
+
+ if [ $nr_min -gt $nr_max ]; then
+ nr_min=$nr_max
+ fi
+
+ if [ $nr_origin -ge $nr_min ]; then
+ return
+ fi
+
+ echo -n "Warning: nr_cpus=1 may not be enough for kdump boot,"
+ echo " try nr_cpus=$nr_min or larger instead"
+}
+
# This function performs a series of edits on the command line.
# Store the final result in global $KDUMP_COMMANDLINE.
prepare_cmdline()
@@ -134,6 +199,8 @@ prepare_cmdline()
fi
KDUMP_COMMANDLINE=$cmdline
+
+ check_kdump_cpus
}
--
1.8.3.1
6 years, 4 months
[PATCH v4 1/2] kdumpctl: change prepare_cmdline() to operate KDUMP_COMMANDLINE directly
by Xunlei Pang
Since KDUMP_COMMANDLINE is a global variable, prepare_cmdline can
modify it directly instead of echoing back the result. This change
enables it to output messages.
Changed some coding styles.
Acked-by: Dave Young <dyoung(a)redhat.com>
Signed-off-by: Xunlei Pang <xlpang(a)redhat.com>
---
v1->v2:
Changed some comments.
v2->v3:
No change.
v3->v4:
No change.
kdumpctl | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/kdumpctl b/kdumpctl
index cb6f004..b2068cc 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -105,10 +105,12 @@ append_cmdline()
echo $cmdline
}
-# This function performs a series of edits on the command line
+# This function performs a series of edits on the command line.
+# Store the final result in global $KDUMP_COMMANDLINE.
prepare_cmdline()
{
- local cmdline;
+ local cmdline id
+
if [ -z "$KDUMP_COMMANDLINE" ]; then
cmdline=`cat /proc/cmdline`
# 'root' parameter will cause kdump failure in live images
@@ -118,6 +120,7 @@ prepare_cmdline()
else
cmdline=${KDUMP_COMMANDLINE}
fi
+
# These params should always be removed
cmdline=`remove_cmdline_param "$cmdline" crashkernel panic_on_warn`
# These params can be removed configurably
@@ -125,12 +128,12 @@ prepare_cmdline()
cmdline="${cmdline} ${KDUMP_COMMANDLINE_APPEND}"
- local id=`get_bootcpu_initial_apicid`
+ id=`get_bootcpu_initial_apicid`
if [ ! -z ${id} ] ; then
cmdline=`append_cmdline "${cmdline}" disable_cpu_apicid ${id}`
fi
- echo $cmdline
+ KDUMP_COMMANDLINE=$cmdline
}
@@ -642,7 +645,7 @@ load_kdump()
fi
fi
- KDUMP_COMMANDLINE=`prepare_cmdline`
+ prepare_cmdline
# For secureboot enabled machines, use new kexec file based syscall.
# Old syscall will always fail as it does not have capability to
--
1.8.3.1
6 years, 4 months
[PATCH] use --hostonly-i18n for dracut
by Tong Li
Resolves: bz1411240
Use --hostonly-i18n to force dracut to install only needed
keyboard and font files according to host's configuration, which
reduced initramfs's size by 2M on F25 x86_64.
Signed-off-by: Tong Li <tonli(a)redhat.com>
---
mkdumprd | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mkdumprd b/mkdumprd
index 3359383..f30d9c2 100644
--- a/mkdumprd
+++ b/mkdumprd
@@ -37,7 +37,7 @@ is_wdt_addition_needed
[[ $? -eq 0 ]] && WDTCFG="-a watchdog"
extra_modules=""
-dracut_args=("--hostonly" "-o" "plymouth dash resume ifcfg" $WDTCFG)
+dracut_args=("--hostonly" "--hostonly-i18n" "-o" "plymouth dash resume ifcfg" $WDTCFG)
OVERRIDE_RESETTABLE=0
add_dracut_arg() {
--
2.7.4
6 years, 4 months
[RESEND PATCH v2 1/2] kdumpctl: change prepare_cmdline() to operate KDUMP_COMMANDLINE directly
by Xunlei Pang
Since KDUMP_COMMANDLINE is a global variable, prepare_cmdline can
modify it directly instead of echoing back the result. This change
enables it to output messages.
Changed some coding styles.
Signed-off-by: Xunlei Pang <xlpang(a)redhat.com>
---
v1->v2:
Changed some comments.
kdumpctl | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/kdumpctl b/kdumpctl
index cb6f004..b2068cc 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -105,10 +105,12 @@ append_cmdline()
echo $cmdline
}
-# This function performs a series of edits on the command line
+# This function performs a series of edits on the command line.
+# Store the final result in global $KDUMP_COMMANDLINE.
prepare_cmdline()
{
- local cmdline;
+ local cmdline id
+
if [ -z "$KDUMP_COMMANDLINE" ]; then
cmdline=`cat /proc/cmdline`
# 'root' parameter will cause kdump failure in live images
@@ -118,6 +120,7 @@ prepare_cmdline()
else
cmdline=${KDUMP_COMMANDLINE}
fi
+
# These params should always be removed
cmdline=`remove_cmdline_param "$cmdline" crashkernel panic_on_warn`
# These params can be removed configurably
@@ -125,12 +128,12 @@ prepare_cmdline()
cmdline="${cmdline} ${KDUMP_COMMANDLINE_APPEND}"
- local id=`get_bootcpu_initial_apicid`
+ id=`get_bootcpu_initial_apicid`
if [ ! -z ${id} ] ; then
cmdline=`append_cmdline "${cmdline}" disable_cpu_apicid ${id}`
fi
- echo $cmdline
+ KDUMP_COMMANDLINE=$cmdline
}
@@ -642,7 +645,7 @@ load_kdump()
fi
fi
- KDUMP_COMMANDLINE=`prepare_cmdline`
+ prepare_cmdline
# For secureboot enabled machines, use new kexec file based syscall.
# Old syscall will always fail as it does not have capability to
--
1.8.3.1
6 years, 4 months
[PATCH v3 1/2] kdumpctl: change prepare_cmdline() to operate KDUMP_COMMANDLINE directly
by Xunlei Pang
Since KDUMP_COMMANDLINE is a global variable, prepare_cmdline can
modify it directly instead of echoing back the result. This change
enables it to output messages.
Changed some coding styles.
Acked-by: Dave Young <dyoung(a)redhat.com>
Signed-off-by: Xunlei Pang <xlpang(a)redhat.com>
---
v1->v2:
Changed some comments.
v2->v3:
No change.
kdumpctl | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/kdumpctl b/kdumpctl
index cb6f004..b2068cc 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -105,10 +105,12 @@ append_cmdline()
echo $cmdline
}
-# This function performs a series of edits on the command line
+# This function performs a series of edits on the command line.
+# Store the final result in global $KDUMP_COMMANDLINE.
prepare_cmdline()
{
- local cmdline;
+ local cmdline id
+
if [ -z "$KDUMP_COMMANDLINE" ]; then
cmdline=`cat /proc/cmdline`
# 'root' parameter will cause kdump failure in live images
@@ -118,6 +120,7 @@ prepare_cmdline()
else
cmdline=${KDUMP_COMMANDLINE}
fi
+
# These params should always be removed
cmdline=`remove_cmdline_param "$cmdline" crashkernel panic_on_warn`
# These params can be removed configurably
@@ -125,12 +128,12 @@ prepare_cmdline()
cmdline="${cmdline} ${KDUMP_COMMANDLINE_APPEND}"
- local id=`get_bootcpu_initial_apicid`
+ id=`get_bootcpu_initial_apicid`
if [ ! -z ${id} ] ; then
cmdline=`append_cmdline "${cmdline}" disable_cpu_apicid ${id}`
fi
- echo $cmdline
+ KDUMP_COMMANDLINE=$cmdline
}
@@ -642,7 +645,7 @@ load_kdump()
fi
fi
- KDUMP_COMMANDLINE=`prepare_cmdline`
+ prepare_cmdline
# For secureboot enabled machines, use new kexec file based syscall.
# Old syscall will always fail as it does not have capability to
--
1.8.3.1
6 years, 4 months
[PATCH v2 1/2] kdumpctl: change prepare_cmdline() to operate KDUMP_COMMANDLINE directly
by Xunlei Pang
Since KDUMP_COMMANDLINE is a global variable, prepare_cmdline can
modify it directly instead of echoing back the result. This change
enables it to output messages.
Changed some coding styles.
Signed-off-by: Xunlei Pang <xlpang(a)redhat.com>
---
v1->v2:
No change.
kdumpctl | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/kdumpctl b/kdumpctl
index cb6f004..b2068cc 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -105,10 +105,12 @@ append_cmdline()
echo $cmdline
}
-# This function performs a series of edits on the command line
+# This function performs a series of edits on the command line.
+# Store the final result in global $KDUMP_COMMANDLINE.
prepare_cmdline()
{
- local cmdline;
+ local cmdline id
+
if [ -z "$KDUMP_COMMANDLINE" ]; then
cmdline=`cat /proc/cmdline`
# 'root' parameter will cause kdump failure in live images
@@ -118,6 +120,7 @@ prepare_cmdline()
else
cmdline=${KDUMP_COMMANDLINE}
fi
+
# These params should always be removed
cmdline=`remove_cmdline_param "$cmdline" crashkernel panic_on_warn`
# These params can be removed configurably
@@ -125,12 +128,12 @@ prepare_cmdline()
cmdline="${cmdline} ${KDUMP_COMMANDLINE_APPEND}"
- local id=`get_bootcpu_initial_apicid`
+ id=`get_bootcpu_initial_apicid`
if [ ! -z ${id} ] ; then
cmdline=`append_cmdline "${cmdline}" disable_cpu_apicid ${id}`
fi
- echo $cmdline
+ KDUMP_COMMANDLINE=$cmdline
}
@@ -642,7 +645,7 @@ load_kdump()
fi
fi
- KDUMP_COMMANDLINE=`prepare_cmdline`
+ prepare_cmdline
# For secureboot enabled machines, use new kexec file based syscall.
# Old syscall will always fail as it does not have capability to
--
1.8.3.1
6 years, 4 months
[PATCH 1/2] kdumpctl: change prepare_cmdline() to operate KDUMP_COMMANDLINE directly
by Xunlei Pang
Since KDUMP_COMMANDLINE is a global variable, prepare_cmdline can
modify it directly instead of echoing back the result. This change
enables it to output messages.
Changed some coding style.
Signed-off-by: Xunlei Pang <xlpang(a)redhat.com>
---
kdumpctl | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/kdumpctl b/kdumpctl
index cb6f004..507f2dc 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -106,9 +106,11 @@ append_cmdline()
}
# This function performs a series of edits on the command line
+# Store the final result in global $KDUMP_COMMANDLINE.
prepare_cmdline()
{
- local cmdline;
+ local cmdline id
+
if [ -z "$KDUMP_COMMANDLINE" ]; then
cmdline=`cat /proc/cmdline`
# 'root' parameter will cause kdump failure in live images
@@ -118,6 +120,7 @@ prepare_cmdline()
else
cmdline=${KDUMP_COMMANDLINE}
fi
+
# These params should always be removed
cmdline=`remove_cmdline_param "$cmdline" crashkernel panic_on_warn`
# These params can be removed configurably
@@ -125,12 +128,12 @@ prepare_cmdline()
cmdline="${cmdline} ${KDUMP_COMMANDLINE_APPEND}"
- local id=`get_bootcpu_initial_apicid`
+ id=`get_bootcpu_initial_apicid`
if [ ! -z ${id} ] ; then
cmdline=`append_cmdline "${cmdline}" disable_cpu_apicid ${id}`
fi
- echo $cmdline
+ KDUMP_COMMANDLINE=$cmdline
}
@@ -642,7 +645,7 @@ load_kdump()
fi
fi
- KDUMP_COMMANDLINE=`prepare_cmdline`
+ prepare_cmdline
# For secureboot enabled machines, use new kexec file based syscall.
# Old syscall will always fail as it does not have capability to
--
1.8.3.1
6 years, 4 months
[PATCH V3] drop kdump script rhcrashkernel-param in kexec-tools repo
by Tong Li
Resolves: bz1399436
Since currently crashkernel= will be handled in kdump anaconda addon
we can safely remove rhcrashkernel-param callback.
Signed-off-by: Tong Li <tonli(a)redhat.com>
---
v1 -> v2: delete rhcrashkernel-param file as well
v2 -> v3: remove the mention of justification from commit log
kexec-tools.spec | 2 --
rhcrashkernel-param | 6 ------
2 files changed, 8 deletions(-)
delete mode 100644 rhcrashkernel-param
diff --git a/kexec-tools.spec b/kexec-tools.spec
index 1a8aa70..2518fcc 100644
--- a/kexec-tools.spec
+++ b/kexec-tools.spec
@@ -19,7 +19,6 @@ Source12: mkdumprd.8
Source14: 98-kexec.rules
Source15: kdump.conf.5
Source16: kdump.service
-Source17: rhcrashkernel-param
Source18: kdump.sysconfig.s390x
Source19: eppic_050615.tar.gz
Source20: kdump-lib.sh
@@ -203,7 +202,6 @@ install -m 644 %{SOURCE15} $RPM_BUILD_ROOT%{_mandir}/man5/kdump.conf.5
install -m 644 %{SOURCE16} $RPM_BUILD_ROOT%{_unitdir}/kdump.service
install -m 755 -D %{SOURCE22} $RPM_BUILD_ROOT%{_prefix}/lib/systemd/system-generators/kdump-dep-generator.sh
mkdir -p $RPM_BUILD_ROOT/usr/sbin
-install -m 755 %{SOURCE17} $RPM_BUILD_ROOT/usr/sbin/rhcrashkernel-param
%ifarch %{ix86} x86_64 ppc64 s390x ppc64le
install -m 755 makedumpfile-1.6.0/makedumpfile $RPM_BUILD_ROOT/sbin/makedumpfile
diff --git a/rhcrashkernel-param b/rhcrashkernel-param
deleted file mode 100644
index a823e4b..0000000
--- a/rhcrashkernel-param
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-if grep -q Fedora /etc/redhat-release; then
- echo -n
-else
- echo crashkernel=auto
-fi
--
2.7.4
6 years, 5 months