kdump-anaconda-addon/Add-crashkernel-auto-for-Arm.patch
yangl777 0800a41061 add crashkernel auto for arm and fix test
(cherry picked from commit 36be1117ea0a536bf03c09dceee3c3a4339c5ea4)
2024-06-12 15:56:51 +08:00

315 lines
14 KiB
Diff
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From fb83e0d26a2f6a64820ddd5724aa270f1600f288 Mon Sep 17 00:00:00 2001
From: huzunhao <huzunhao2@huawei.com>
Date: Tue, 4 Apr 2023 15:47:51 +0800
Subject: [PATCH] Add crashkernel auto for Arm
---
com_redhat_kdump/common.py | 7 ++-
com_redhat_kdump/gui/spokes/kdump.glade | 54 ++++++++++++++++++++++++
com_redhat_kdump/gui/spokes/kdump.py | 43 ++++++++++++++++---
com_redhat_kdump/service/installation.py | 2 +-
com_redhat_kdump/service/kdump.py | 4 +-
com_redhat_kdump/service/kickstart.py | 27 ++++++------
com_redhat_kdump/tui/spokes/kdump.py | 4 +-
po/zh_CN.po | 12 +++---
8 files changed, 123 insertions(+), 30 deletions(-)
diff --git a/com_redhat_kdump/common.py b/com_redhat_kdump/common.py
index 1b79186..b8450c8 100644
--- a/com_redhat_kdump/common.py
+++ b/com_redhat_kdump/common.py
@@ -65,10 +65,15 @@ def getMemoryBounds():
totalMemory = getTotalMemory()
- if blivet.arch.get_arch() == 'ppc64':
+ arch = blivet.arch.get_arch()
+ if arch.startswith('ppc64'):
lowerBound = 256
minUsable = 1024
step = 1
+ elif arch == 'aarch64':
+ lowerBound = 768
+ minUsable = 768
+ step = 1
else:
lowerBound = 128
minUsable = 256
diff --git a/com_redhat_kdump/gui/spokes/kdump.glade b/com_redhat_kdump/gui/spokes/kdump.glade
index fdcfdfb..aebc211 100644
--- a/com_redhat_kdump/gui/spokes/kdump.glade
+++ b/com_redhat_kdump/gui/spokes/kdump.glade
@@ -14,6 +14,7 @@
<property name="spacing">6</property>
<child internal-child="nav_box">
<object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1">
+ <property name="name">nav-box</property>
<property name="can_focus">False</property>
<child internal-child="nav_area">
<object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1">
@@ -190,6 +191,59 @@
<property name="height">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="reservationTypeLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Kdump Memory Reservation:</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="autoButton">
+ <property name="label" translatable="yes">_Automatic</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_reservation_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="manualButton">
+ <property name="label" translatable="yes">_Manual</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">autoButton</property>
+ <signal name="toggled" handler="on_reservation_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
<child>
<placeholder/>
</child>
diff --git a/com_redhat_kdump/gui/spokes/kdump.py b/com_redhat_kdump/gui/spokes/kdump.py
index 9420755..c229485 100644
--- a/com_redhat_kdump/gui/spokes/kdump.py
+++ b/com_redhat_kdump/gui/spokes/kdump.py
@@ -66,6 +66,9 @@ class KdumpSpoke(NormalSpoke):
self._fadumpButton.show()
else:
self._fadumpButton.hide()
+ self._reservationTypeLabel = self.builder.get_object("reservationTypeLabel")
+ self._autoButton = self.builder.get_object("autoButton")
+ self._manualButton = self.builder.get_object("manualButton")
self._toBeReservedLabel = self.builder.get_object("toBeReservedLabel")
self._toBeReservedSpin = self.builder.get_object("toBeReservedSpin")
self._totalMemLabel = self.builder.get_object("totalMemLabel")
@@ -82,11 +85,12 @@ class KdumpSpoke(NormalSpoke):
def refresh(self):
# If a reserve amount is requested, set it in the spin button
# Strip the trailing 'M'
- reserveMB = self._proxy.ReservedMemory
- if reserveMB and reserveMB[-1] == 'M':
- reserveMB = reserveMB[:-1]
- if reserveMB:
- self._toBeReservedSpin.set_value(int(reserveMB))
+ if self._proxy.ReservedMemory != "auto":
+ reserveMB = self._proxy.ReservedMemory
+ if reserveMB and reserveMB[-1] == 'M':
+ reserveMB = reserveMB[:-1]
+ if reserveMB:
+ self._toBeReservedSpin.set_value(int(reserveMB))
# Set the various labels. Use the spin button signal handler to set the
# usable memory label once the other two have been set.
@@ -97,6 +101,13 @@ class KdumpSpoke(NormalSpoke):
# the sensitivities on the related widgets. Set the radio button first,
# since the radio buttons' bailiwick is a subset of that of the
# enable/disable checkbox.
+ if self._proxy.ReservedMemory == "auto":
+ self._autoButton.set_active(True)
+ self._manualButton.set_active(False)
+ else:
+ self._autoButton.set_active(False)
+ self._manualButton.set_active(True)
+
if self._proxy.KdumpEnabled:
self._enableButton.set_active(True)
else:
@@ -110,7 +121,10 @@ class KdumpSpoke(NormalSpoke):
def apply(self):
# Copy the GUI state into the AddonData object
self._proxy.KdumpEnabled = self._enableButton.get_active()
- self._proxy.ReservedMemory = "%dM" % self._toBeReservedSpin.get_value_as_int()
+ if self._autoButton.get_active():
+ self._proxy.ReservedMemory = "auto"
+ else:
+ self._proxy.ReservedMemory = "%dM" % self._toBeReservedSpin.get_value_as_int()
self._proxy.FadumpEnabled = self._fadumpButton.get_active()
@property
@@ -147,10 +161,27 @@ class KdumpSpoke(NormalSpoke):
self._totalMemMB.set_sensitive(status)
self._usableMemLabel.set_sensitive(status)
self._usableMemMB.set_sensitive(status)
+ self._autoButton.set_sensitive(status)
+ self._manualButton.set_sensitive(status)
self._fadumpButton.set_sensitive(status)
if not status:
self._fadumpButton.set_active(False)
+ if status:
+ self._autoButton.emit("toggled")
+
+ def on_reservation_toggled(self, radiobutton, user_data=None):
+ status = self._manualButton.get_active()
+
+ # If setting to auto, disable the manual config spinner and
+ # the total/usable memory labels
+ fancy_set_sensitive(self._toBeReservedSpin, status)
+ self._totalMemLabel.set_sensitive(status)
+ self._totalMemMB.set_sensitive(status)
+ self._usableMemLabel.set_sensitive(status)
+ self._usableMemMB.set_sensitive(status)
+
+
def on_enable_fadump_toggled(self, checkbutton, user_data=None):
if self._enableButton.get_active():
self.enablefadump = self._fadumpButton.get_active()
diff --git a/com_redhat_kdump/service/installation.py b/com_redhat_kdump/service/installation.py
index d2f4d75..64638a9 100644
--- a/com_redhat_kdump/service/installation.py
+++ b/com_redhat_kdump/service/installation.py
@@ -58,7 +58,7 @@ class KdumpConfigurationTask(Task):
# Copy our reserved amount to the bootloader arguments.
if self._kdump_enabled:
# Ensure that the amount is an amount in MB.
- if self._reserved_memory[-1] != 'M':
+ if self._reserved_memory != "auto" and self._reserved_memory[-1] != 'M':
self._reserved_memory += 'M'
args.append('crashkernel=%s' % self._reserved_memory)
diff --git a/com_redhat_kdump/service/kdump.py b/com_redhat_kdump/service/kdump.py
index f4811df..ff902b7 100644
--- a/com_redhat_kdump/service/kdump.py
+++ b/com_redhat_kdump/service/kdump.py
@@ -41,14 +41,14 @@ class KdumpService(KickstartService):
def __init__(self):
"""Create a service."""
super().__init__()
- self._kdump_enabled = False
+ self._kdump_enabled = True
self.kdump_enabled_changed = Signal()
self._fadump_enabled = False
self.fadump_enabled_changed = Signal()
+ self.reserveMB = "auto"
lower, upper, step = getMemoryBounds()
- self._reserved_memory = "%d" % lower
self.reserved_memory_changed = Signal()
def publish(self):
diff --git a/com_redhat_kdump/service/kickstart.py b/com_redhat_kdump/service/kickstart.py
index 41ba6eb..28d8a23 100644
--- a/com_redhat_kdump/service/kickstart.py
+++ b/com_redhat_kdump/service/kickstart.py
@@ -88,19 +88,20 @@ class KdumpKickstartData(AddonData):
opts = op.parse_args(args=args, lineno=line_number)
- # Validate the reserve-mb argument
- # Allow a final 'M' for consistency with the crashkernel kernel
- # parameter. Strip it if found. And strip quotes.
- opts.reserve_mb = opts.reserve_mb.strip("'\"")
-
- if opts.reserve_mb and opts.reserve_mb[-1] == 'M':
- opts.reserve_mb = opts.reserve_mb[:-1]
-
- try:
- _test = int(opts.reserve_mb)
- except ValueError:
- msg = _("Invalid value '%s' for --reserve-mb") % opts.reserve_mb
- raise KickstartParseError(msg, lineno=line_number)
+ if opts.reserve_mb != "auto":
+ # Validate the reserve-mb argument
+ # Allow a final 'M' for consistency with the crashkernel kernel
+ # parameter. Strip it if found. And strip quotes.
+ opts.reserve_mb = opts.reserve_mb.strip("'\"")
+
+ if opts.reserve_mb and opts.reserve_mb[-1] == 'M':
+ opts.reserve_mb = opts.reserve_mb[:-1]
+
+ try:
+ _test = int(opts.reserve_mb)
+ except ValueError:
+ msg = _("Invalid value '%s' for --reserve-mb") % opts.reserve_mb
+ raise KickstartParseError(msg, lineno=line_number)
# Store the parsed arguments
self.enabled = opts.enabled
diff --git a/com_redhat_kdump/tui/spokes/kdump.py b/com_redhat_kdump/tui/spokes/kdump.py
index 58106ba..dc1d73d 100644
--- a/com_redhat_kdump/tui/spokes/kdump.py
+++ b/com_redhat_kdump/tui/spokes/kdump.py
@@ -48,7 +48,7 @@ class KdumpSpoke(NormalTUISpoke):
self._lower, self._upper, self._step = getMemoryBounds()
# Allow a string of digits optionally followed by 'M'
- self._reserve_check_re = re.compile(r'^(\d+M?)$')
+ self._reserve_check_re = re.compile(r'^((auto)|(\d+M?))$')
self._proxy = KDUMP.get_proxy()
@@ -116,6 +116,8 @@ class KdumpSpoke(NormalTUISpoke):
def _check_reserve_valid(self, key, report_func):
if self._reserve_check_re.match(key):
+ if key == "auto":
+ return True
if key[-1] == 'M':
key = key[:-1]
key = int(key)
diff --git a/po/zh_CN.po b/po/zh_CN.po
index ed13cbd..fb63e9b 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -79,11 +79,11 @@ msgstr "启用 kdump_E"
msgid "_Enable dump mode fadump"
msgstr "启用转储模式 fadump_E"
-#~ msgid "Kdump Memory Reservation:"
-#~ msgstr "为 Kdump 保留的内存:"
+msgid "Kdump Memory Reservation:"
+msgstr "为 Kdump 保留的内存:"
-#~ msgid "_Automatic"
-#~ msgstr "自动_A"
+msgid "_Automatic"
+msgstr "自动_A"
-#~ msgid "_Manual"
-#~ msgstr "手动_M"
+msgid "_Manual"
+msgstr "手动_M"
--
2.19.1