import CS tuned-2.26.0-1.el10.1

This commit is contained in:
eabdullin 2025-11-14 14:08:49 +00:00
parent 9c2d25225a
commit 6a45d5e20a
5 changed files with 131 additions and 327 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
tuned-2.25.1.tar.gz
tuned-2.26.0.tar.gz

View File

@ -1 +1 @@
SHA512 (tuned-2.25.1.tar.gz) = fa5ac9d818d11b118fb7c26db28993b704f590070edbece570fee1a6c60a1f5f850b711683c45b46f33d9b056a84e43ced2c4c1ee58e9ef3d1fd035a4c1d4de4
SHA512 (tuned-2.26.0.tar.gz) = af468e1b4ca2e10cf00cad53f27d65d0b5eab73e65b9c61d67fd39ff9687700704db87294fbf62bda949b3544a9ba69c82f6d35f448226654a5949fa8de1b2c0

View File

@ -1,311 +0,0 @@
From 91cb383ad7339873da3480463061500a308ba825 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavol=20=C5=BD=C3=A1=C4=8Dik?= <zacik.pa@gmail.com>
Date: Fri, 31 Jan 2025 12:43:08 +0100
Subject: [PATCH 1/2] bootloader: Simplify tuning of rpm-ostree kargs
The bootloader plugin claims that it does not mess
with existing kernel parameters; make sure we adhere
to that also for rpm-ostree systems:
1. Only append a new karg if the same key=value pair
does not already appear in kernel parameters. If we would
duplicate it, it would not be possible to determine which
one to delete when unapplying the profile.
2. Do not delete existing key=value pairs when the profile
adds a karg with another value for the key. A single key can
appear multiple times in the kernel parameter list with different
values.
Also make sure new kargs are added exactly in the order in which
they appear in the profile. This is especially important for kargs
related to hugepages.
Resolves: RHEL-45836
---
tuned/consts.py | 1 -
tuned/plugins/plugin_bootloader.py | 142 +++++++++++------------------
2 files changed, 53 insertions(+), 90 deletions(-)
diff --git a/tuned/consts.py b/tuned/consts.py
index 577ad9583..a92c78060 100644
--- a/tuned/consts.py
+++ b/tuned/consts.py
@@ -43,7 +43,6 @@
INITRD_IMAGE_DIR = "/boot"
BOOT_CMDLINE_TUNED_VAR = "TUNED_BOOT_CMDLINE"
BOOT_CMDLINE_INITRD_ADD_VAR = "TUNED_BOOT_INITRD_ADD"
-BOOT_CMDLINE_KARGS_DELETED_VAR = "TUNED_BOOT_KARGS_DELETED"
BOOT_CMDLINE_FILE = "/etc/tuned/bootcmdline"
PETITBOOT_DETECT_DIR = "/sys/firmware/opal"
MACHINE_ID_FILE = "/etc/machine-id"
diff --git a/tuned/plugins/plugin_bootloader.py b/tuned/plugins/plugin_bootloader.py
index 4c66189fb..07a66d265 100644
--- a/tuned/plugins/plugin_bootloader.py
+++ b/tuned/plugins/plugin_bootloader.py
@@ -209,24 +209,6 @@ def _get_config_options(cls):
"skip_grub_config": None,
}
- @staticmethod
- def _options_to_dict(options, omit=""):
- """
- Returns dict created from options
- e.g.: _options_to_dict("A=A A=B A B=A C=A", "A=B B=A B=B") returns {'A': ['A', None], 'C': ['A']}
- """
- d = {}
- omit = omit.split()
- for o in options.split():
- if o not in omit:
- arr = o.split('=', 1)
- d.setdefault(arr[0], []).append(arr[1] if len(arr) > 1 else None)
- return d
-
- @staticmethod
- def _dict_to_options(d):
- return " ".join([k + "=" + v1 if v1 is not None else k for k, v in d.items() for v1 in v])
-
def _rpm_ostree_status(self):
"""
Returns status of rpm-ostree transactions or None if not run on rpm-ostree system
@@ -241,68 +223,45 @@ def _rpm_ostree_status(self):
return None
return splited[1]
- def _wait_till_idle(self):
+ def _wait_till_rpm_ostree_idle(self):
+ """Check that rpm-ostree is idle, allowing some waiting time."""
sleep_cycles = 10
sleep_secs = 1.0
- for i in range(sleep_cycles):
+ for _ in range(sleep_cycles):
if self._rpm_ostree_status() == "idle":
return True
sleep(sleep_secs)
- if self._rpm_ostree_status() == "idle":
- return True
- return False
+ return self._rpm_ostree_status() == "idle"
+
+ def _get_rpm_ostree_kargs(self):
+ """Retrieve the output of rpm-ostree kargs, i.e., current default kernel arguments."""
+ if not self._wait_till_rpm_ostree_idle():
+ log.error("Error getting rpm-ostree kargs: rpm-ostree is busy")
+ return None
+ (rc, out, err) = self._cmd.execute(["rpm-ostree", "kargs"], return_err=True)
+ if out:
+ log.debug("rpm-ostree kargs: %s" % out)
+ if rc != 0:
+ log.error("Error getting rpm-ostree kargs: %s" % err)
+ return None
+ return out
- def _rpm_ostree_kargs(self, append={}, delete={}):
+ def _modify_rpm_ostree_kargs(self, delete_kargs=[], append_kargs=[]):
"""
- Method for appending or deleting rpm-ostree karg
- returns None if rpm-ostree not present or is run on not ostree system
- or tuple with new kargs, appended kargs and deleted kargs
+ Modify (delete and append) kernel arguments in a rpm-ostree system.
+ Return a boolean indicating whether the operation was successful.
"""
- (rc, out, err) = self._cmd.execute(['rpm-ostree', 'kargs'], return_err=True)
- log.debug("rpm-ostree output stdout:\n%s\nstderr:\n%s" % (out, err))
- if rc != 0:
- return None, None, None
- kargs = self._options_to_dict(out)
-
- if not self._wait_till_idle():
- log.error("Cannot wait for transaction end")
- return None, None, None
-
- deleted = {}
- delete_params = self._dict_to_options(delete).split()
- # Deleting kargs, e.g. deleting added kargs by profile
- for k, val in delete.items():
- for v in val:
- kargs[k].remove(v)
- deleted[k] = val
-
- appended = {}
- append_params = self._dict_to_options(append).split()
- # Appending kargs, e.g. new kargs by profile or restoring kargs replaced by profile
- for k, val in append.items():
- if kargs.get(k):
- # If there is karg that we add with new value we want to delete it
- # and store old value for restoring after profile unload
- log.debug("adding rpm-ostree kargs %s: %s for delete" % (k, kargs[k]))
- deleted.setdefault(k, []).extend(kargs[k])
- delete_params.extend([k + "=" + v if v is not None else k for v in kargs[k]])
- kargs[k] = []
- kargs.setdefault(k, []).extend(val)
- appended[k] = val
-
- if append_params == delete_params:
- log.info("skipping rpm-ostree kargs - append == deleting (%s)" % append_params)
- return kargs, appended, deleted
-
- log.info("rpm-ostree kargs - appending: '%s'; deleting: '%s'" % (append_params, delete_params))
- (rc, _, err) = self._cmd.execute(['rpm-ostree', 'kargs'] +
- ['--append=%s' % v for v in append_params] +
- ['--delete=%s' % v for v in delete_params], return_err=True)
+ if not self._wait_till_rpm_ostree_idle():
+ log.error("Error modifying rpm-ostree kargs: rpm-ostree is busy")
+ return False
+ (rc, _, err) = self._cmd.execute(
+ ["rpm-ostree", "kargs"] +
+ ["--delete=%s" % karg for karg in delete_kargs] +
+ ["--append=%s" % karg for karg in append_kargs], return_err=True)
if rc != 0:
- log.error("Something went wrong with rpm-ostree kargs\n%s" % (err))
- return self._options_to_dict(out), None, None
- else:
- return kargs, appended, deleted
+ log.error("Error modifying rpm-ostree kargs: %s" % err)
+ return False
+ return True
def _get_effective_options(self, options):
"""Merge provided options with plugin default options and merge all cmdline.* options."""
@@ -368,18 +327,16 @@ def _remove_grub2_tuning(self):
log.info("removing initrd image '%s'" % self._initrd_dst_img_val)
self._cmd.unlink(self._initrd_dst_img_val)
- def _get_rpm_ostree_changes(self):
+ def _get_appended_rpm_ostree_kargs(self):
+ """Return the list of kernel arguments that were appended by this profile (in a rpm-ostree system)."""
f = self._cmd.read_file(consts.BOOT_CMDLINE_FILE)
appended = re.search(consts.BOOT_CMDLINE_TUNED_VAR + r"=\"(.*)\"", f, flags=re.MULTILINE)
- appended = appended[1] if appended else ""
- deleted = re.search(consts.BOOT_CMDLINE_KARGS_DELETED_VAR + r"=\"(.*)\"", f, flags=re.MULTILINE)
- deleted = deleted[1] if deleted else ""
- return appended, deleted
+ return appended[1].split() if appended else []
def _remove_rpm_ostree_tuning(self):
- appended, deleted = self._get_rpm_ostree_changes()
- self._rpm_ostree_kargs(append=self._options_to_dict(deleted), delete=self._options_to_dict(appended))
- self._patch_bootcmdline({consts.BOOT_CMDLINE_TUNED_VAR: "", consts.BOOT_CMDLINE_KARGS_DELETED_VAR: ""})
+ """Remove kernel parameter tuning in a rpm-ostree system."""
+ self._modify_rpm_ostree_kargs(delete_kargs=self._get_appended_rpm_ostree_kargs())
+ self._patch_bootcmdline({consts.BOOT_CMDLINE_TUNED_VAR: ""})
def _instance_unapply_static(self, instance, rollback = consts.ROLLBACK_SOFT):
if rollback == consts.ROLLBACK_FULL and not self._skip_grub_config_val:
@@ -489,14 +446,22 @@ def _grub2_cfg_patch(self, d):
return True
def _rpm_ostree_update(self):
- appended, _ = self._get_rpm_ostree_changes()
- _cmdline_dict = self._options_to_dict(self._cmdline_val, appended)
- if not _cmdline_dict:
- return None
- (_, _, d) = self._rpm_ostree_kargs(append=_cmdline_dict)
- if d is None:
+ """Apply kernel parameter tuning in a rpm-ostree system."""
+ if self._get_appended_rpm_ostree_kargs():
+ # The kargs are already set in /etc/tuned/bootcmldine,
+ # we are likely post-reboot and done.
+ return
+ profile_kargs = self._cmdline_val.split()
+ active_kargs = self._get_rpm_ostree_kargs()
+ if active_kargs is None:
+ log.error("Not updating kernel arguments, could not read the current ones.")
return
- self._patch_bootcmdline({consts.BOOT_CMDLINE_TUNED_VAR : self._cmdline_val, consts.BOOT_CMDLINE_KARGS_DELETED_VAR : self._dict_to_options(d)})
+ # Only append key=value pairs that do not yet appear in kernel parameters,
+ # otherwise we would not be able to restore the cmdline to the previous state
+ # via rpm-ostree kargs --delete.
+ kargs_to_append = [karg for karg in profile_kargs if karg not in active_kargs.split()]
+ if self._modify_rpm_ostree_kargs(append_kargs=kargs_to_append):
+ self._patch_bootcmdline({consts.BOOT_CMDLINE_TUNED_VAR : " ".join(kargs_to_append)})
def _grub2_update(self):
self._grub2_cfg_patch({consts.GRUB2_TUNED_VAR : self._cmdline_val, consts.GRUB2_TUNED_INITRD_VAR : self._initrd_val})
@@ -646,11 +611,10 @@ def _cmdline(self, enabling, value, verify, ignore_missing, instance):
v = self._variables.expand(self._cmd.unquote(value))
if verify:
if self._rpm_ostree:
- rpm_ostree_kargs = self._rpm_ostree_kargs()[0]
- cmdline = self._dict_to_options(rpm_ostree_kargs)
+ cmdline = self._get_rpm_ostree_kargs()
else:
cmdline = self._cmd.read_file("/proc/cmdline")
- if len(cmdline) == 0:
+ if cmdline is None or len(cmdline) == 0:
return None
cmdline_set = set(cmdline.split())
value_set = set(v.split())
From 3e05cb783ee10ea78efb113c54bd2ad7d73a0e2e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavol=20=C5=BD=C3=A1=C4=8Dik?= <zacik.pa@gmail.com>
Date: Fri, 16 May 2025 15:13:25 +0200
Subject: [PATCH 2/2] bootloader: Remove previously appended rpm-ostree kargs
If TuneD-appended kargs are present and do not match
the kargs to be appended, we should remove them. This
can happen if there was no profile rollback, e.g.,
when using the no-daemon mode.
Resolves: RHEL-86814
---
tuned/plugins/plugin_bootloader.py | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/tuned/plugins/plugin_bootloader.py b/tuned/plugins/plugin_bootloader.py
index 07a66d265..2711e116f 100644
--- a/tuned/plugins/plugin_bootloader.py
+++ b/tuned/plugins/plugin_bootloader.py
@@ -105,7 +105,7 @@ class BootloaderPlugin(base.Plugin):
----
[main]
include=profile_1
-
+
[bootloader]
cmdline_profile_2=-quiet
----
@@ -114,7 +114,7 @@ class BootloaderPlugin(base.Plugin):
----
[main]
include=profile_1
-
+
[bootloader]
cmdline_profile_1=-quiet
----
@@ -447,20 +447,28 @@ def _grub2_cfg_patch(self, d):
def _rpm_ostree_update(self):
"""Apply kernel parameter tuning in a rpm-ostree system."""
- if self._get_appended_rpm_ostree_kargs():
- # The kargs are already set in /etc/tuned/bootcmldine,
- # we are likely post-reboot and done.
- return
+ appended_kargs = self._get_appended_rpm_ostree_kargs()
profile_kargs = self._cmdline_val.split()
active_kargs = self._get_rpm_ostree_kargs()
if active_kargs is None:
log.error("Not updating kernel arguments, could not read the current ones.")
return
+ # Ignore kargs previously appended by TuneD, these will be removed later.
+ non_tuned_kargs = active_kargs.split()
+ for karg in appended_kargs:
+ non_tuned_kargs.remove(karg)
# Only append key=value pairs that do not yet appear in kernel parameters,
# otherwise we would not be able to restore the cmdline to the previous state
# via rpm-ostree kargs --delete.
- kargs_to_append = [karg for karg in profile_kargs if karg not in active_kargs.split()]
- if self._modify_rpm_ostree_kargs(append_kargs=kargs_to_append):
+ kargs_to_append = [karg for karg in profile_kargs if karg not in non_tuned_kargs]
+ if appended_kargs == kargs_to_append:
+ # The correct kargs are already set in /etc/tuned/bootcmldine,
+ # we are likely post-reboot and done.
+ log.info("Kernel arguments already set, not updating.")
+ return
+ # If there are kargs in /etc/bootcmdline and they do not match
+ # the requested ones, there was no rollback, so remove them now.
+ if self._modify_rpm_ostree_kargs(delete_kargs=appended_kargs, append_kargs=kargs_to_append):
self._patch_bootcmdline({consts.BOOT_CMDLINE_TUNED_VAR : " ".join(kargs_to_append)})
def _grub2_update(self):

View File

@ -0,0 +1,68 @@
From 8889fbb65a2fef367811dbbf97aaa77afcc59d09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= <jskarvad@redhat.com>
Date: Wed, 8 Oct 2025 19:29:41 +0200
Subject: [PATCH] cpu-partitioning: autodetect dracut hook directory,
workaround for systemd
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Wrong hook directory can make the machine unbootable:
https://issues.redhat.com/browse/RHEL-119889
Also added workaround for currently non-functional systemd plugin
which doesn't include the systemd config into the initrd image.
Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
---
profiles/cpu-partitioning/script.sh | 13 +++++++++++--
profiles/cpu-partitioning/tuned.conf | 3 ++-
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/profiles/cpu-partitioning/script.sh b/profiles/cpu-partitioning/script.sh
index ec422ca..5fe8d7d 100755
--- a/profiles/cpu-partitioning/script.sh
+++ b/profiles/cpu-partitioning/script.sh
@@ -3,10 +3,19 @@
. /usr/lib/tuned/functions
start() {
+ DRACUT_VER=`dracut --version | sed 's/^.* \([0-9]\+\).*/\1/'`
+ echo "$DRACUT_VER" | grep -q '^[[:digit:]]\+$' || DRACUT_VER="0"
+ # https://issues.redhat.com/browse/RHEL-119889
+ if [ "$DRACUT_VER" -gt "102" ]
+ then
+ DRACUT_HOOK_DIR="/var/lib/dracut/hooks/pre-udev"
+ else
+ DRACUT_HOOK_DIR="/usr/lib/dracut/hooks/pre-udev"
+ fi
mkdir -p "${TUNED_tmpdir}/etc/systemd"
- mkdir -p "${TUNED_tmpdir}/usr/lib/dracut/hooks/pre-udev"
+ mkdir -p "${TUNED_tmpdir}${DRACUT_HOOK_DIR}"
cp /etc/systemd/system.conf "${TUNED_tmpdir}/etc/systemd/"
- cp 00-tuned-pre-udev.sh "${TUNED_tmpdir}/usr/lib/dracut/hooks/pre-udev/"
+ cp 00-tuned-pre-udev.sh "${TUNED_tmpdir}${DRACUT_HOOK_DIR}"
setup_kvm_mod_low_latency
disable_ksm
return "$?"
diff --git a/profiles/cpu-partitioning/tuned.conf b/profiles/cpu-partitioning/tuned.conf
index 11f03cf..e795dcb 100644
--- a/profiles/cpu-partitioning/tuned.conf
+++ b/profiles/cpu-partitioning/tuned.conf
@@ -23,6 +23,7 @@ tmpdir=${f:strip:${f:exec:mktemp:-d}}
isolated_cores_expanded=${f:cpulist_unpack:${isolated_cores}}
isolated_cpumask=${f:cpulist2hex:${isolated_cores_expanded}}
not_isolated_cores_expanded=${f:cpulist_invert:${isolated_cores_expanded}}
+not_isolated_cores=${f:cpulist_pack:${not_isolated_cores_expanded}}
isolated_cores_online_expanded=${f:cpulist_online:${isolated_cores}}
not_isolated_cores_online_expanded=${f:cpulist_online:${not_isolated_cores_expanded}}
not_isolated_cpumask=${f:cpulist2hex:${not_isolated_cores_expanded}}
@@ -62,4 +63,4 @@ priority=10
initrd_remove_dir=True
initrd_dst_img=tuned-initrd.img
initrd_add_dir=${tmpdir}
-cmdline_cpu_part=+nohz=on${cmd_isolcpus} nohz_full=${isolated_cores} rcu_nocbs=${isolated_cores} tuned.non_isolcpus=${not_isolated_cpumask} intel_pstate=disable nosoftlockup
+cmdline_cpu_part=+nohz=on${cmd_isolcpus} nohz_full=${isolated_cores} rcu_nocbs=${isolated_cores} tuned.non_isolcpus=${not_isolated_cpumask} systemd.cpu_affinity=${not_isolated_cores} intel_pstate=disable nosoftlockup
--
2.51.0

View File

@ -42,15 +42,16 @@
Summary: A dynamic adaptive system tuning daemon
Name: tuned
Version: 2.25.1
Release: 2%{?prerel1}%{?dist}
Version: 2.26.0
Release: 1%{?prerel1}%{?dist}.1
License: GPL-2.0-or-later AND CC-BY-SA-3.0
Source0: https://github.com/redhat-performance/%{name}/archive/v%{version}%{?prerel2}/%{name}-%{version}%{?prerel2}.tar.gz
# RHEL-9 specific recommend.conf:
Source1: recommend.conf
URL: http://www.tuned-project.org/
BuildArch: noarch
BuildRequires: systemd, desktop-file-utils
BuildRequires: systemd
BuildRequires: desktop-file-utils
%if 0%{?rhel}
BuildRequires: asciidoc
%else
@ -60,7 +61,8 @@ Requires(post): systemd, virt-what
Requires(preun): systemd
Requires(postun): systemd
BuildRequires: make
BuildRequires: %{_py}, %{_py}-devel
BuildRequires: %{_py}
BuildRequires: %{_py}-devel
# BuildRequires for 'make test'
# python-mock is needed for python-2.7, but it's not available on RHEL-7, only in the EPEL
%if %{without python3} && ( ! 0%{?rhel} || 0%{?rhel} >= 8 || 0%{?epel})
@ -76,15 +78,23 @@ Requires: %{_py}-schedutils
# requires for packages with inconsistent python2/3 names
%if %{with python3}
# BuildRequires for 'make test'
BuildRequires: python3-dbus, python3-gobject-base
Requires: python3-dbus, python3-gobject-base
BuildRequires: python3-dbus
BuildRequires: python3-gobject-base
Requires: python3-dbus
Requires: python3-gobject-base
%else
# BuildRequires for 'make test'
BuildRequires: dbus-python, pygobject3-base
Requires: dbus-python, pygobject3-base
BuildRequires: dbus-python
BuildRequires: pygobject3-base
Requires: dbus-python
Requires: pygobject3-base
%endif
Requires: virt-what, ethtool, gawk
Requires: util-linux, dbus, polkit
Requires: virt-what
Requires: ethtool
Requires: gawk
Requires: util-linux
Requires: dbus
Requires: polkit
%if 0%{?fedora} > 22 || 0%{?rhel} > 7
Recommends: dmidecode
# https://src.fedoraproject.org/rpms/tuned/pull-request/8
@ -108,7 +118,8 @@ Recommends: subscription-manager
Requires: python3-syspurpose
%endif
%endif
Patch0: tuned-2.25.1-bootc-kargs.patch
# https://github.com/redhat-performance/tuned/pull/805
Patch: tuned-2.26.0-cpu-partitioning-initrd-workaround.patch
%description
The tuned package contains a daemon that tunes system settings dynamically.
@ -281,7 +292,7 @@ to TuneD from power-profiles-daemon (PPD).
%prep
%autosetup -p1 -n %{name}-%{version}%{?prerel2}
# Replace the upstream recommend.conf with a RHEL-9-specific one
# Replace the upstream recommend.conf with a RHEL-10-specific one
rm -f recommend.conf
cp -p %{SOURCE1} recommend.conf
@ -296,10 +307,8 @@ make install DESTDIR="%{buildroot}" BINDIR="%{_bindir}" SBINDIR="%{_sbindir}" \
make install-ppd DESTDIR="%{buildroot}" BINDIR="%{_bindir}" \
SBINDIR="%{_sbindir}" DOCDIR="%{docdir}" %{make_python_arg}
%if ! 0%{?rhel}
# manual
make install-html DESTDIR=%{buildroot} DOCDIR=%{docdir}
%endif
# conditional support for grub2, grub2 is not available on all architectures
# and tuned is noarch package, thus the following hack is needed
@ -628,6 +637,44 @@ fi
%config(noreplace) %{_sysconfdir}/tuned/ppd.conf
%changelog
* Mon Oct 20 2025 Jaroslav Škarvada <jskarvad@redhat.com> - 2.26.0-1.1
- cpu-partitioning: added initrd generation dracut/systemd workarounds
resolves: RHEL-120175
* Mon Aug 25 2025 Jaroslav Škarvada <jskarvad@redhat.com> - 2.26.0-1
- new release
- rebased tuned to latest upstream
related: RHEL-94809
* Sun Aug 17 2025 Jaroslav Škarvada <jskarvad@redhat.com> - 2.26.0-0.1.rc1
- new release
- rebased tuned to latest upstream
resolves: RHEL-94809
- tuned-ppd: renamed thinkpad_function_keys as sysfs_acpi_monitor
- tuned-ppd: enabled sysfs_acpi_monitor by default
- tuned-ppd: fixed inotify watch for performance degradation
- tuned-ppd: pinned virtual files in memory for inotify
- fixed instance priority inheritance
resolves: RHEL-94842
- hotplug: added fixes for device remove race condition
- tuned-main.conf: added startup_udev_settle_wait option
resolves: RHEL-88238
- functions: silenced errors if module kvm_intel does not exist
- functions: make calc_isolated_cores return CPU ranges
- scsi: used 'med_power_with_dipm' for SATA ALPM
- scsi: do not set ALPM on external SATA ports
resolves: RHEL-79913
- network_latency: Set non-zero rcutree.nohz_full_patience_delay
- realtime: disable appropriate P-State drivers
- plugin_disk: added support for MMC (MultiMediaCard) devices
- udev: fix possible traceback in device matcher
resolves: RHEL-97087
- udev-settle: obey udev buffer size and handle possible tracebacks
resolves: RHEL-92637
- daemon: re-raise daemon init exception in no-daemon mode
- vm: deprecate dirty_ratio in favour of dirty_bytes with percents
- gui: fix the profile deleter script
* Thu Jun 05 2025 Pavol Žáčik <pzacik@redhat.com> - 2.25.1-2
- Fix handling of kernel arguments on bootc systems
resolves: RHEL-94185