kdump-anaconda-addon/Add-crashkernel-auto-for-Arm.patch

315 lines
14 KiB
Diff
Raw Permalink Normal View History

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