315 lines
14 KiB
Diff
315 lines
14 KiB
Diff
|
|
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
|
|||
|
|
|