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
|
||
|