From fb83e0d26a2f6a64820ddd5724aa270f1600f288 Mon Sep 17 00:00:00 2001 From: huzunhao 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 @@ 6 + nav-box False @@ -190,6 +191,59 @@ 1 + + + True + False + 0 + Kdump Memory Reservation: + + + 0 + 2 + 1 + 1 + + + + + _Automatic + True + True + False + True + 0 + True + True + + + + 1 + 2 + 1 + 1 + + + + + _Manual + True + True + False + True + 0 + True + True + autoButton + + + + 2 + 2 + 1 + 1 + + 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