public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Justin M. Forbes <jforbes@fedoraproject.org>
To: git-commits@fedoraproject.org
Subject: [rpms/kernel] rawhide: kernel-7.2.0-0.rc4.260722g248951ddc14d.37
Date: Wed, 22 Jul 2026 18:47:59 GMT [thread overview]
Message-ID: <178474607973.1.3762349852201778661.rpms-kernel-6d7b12a9c6b0@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/kernel
Branch : rawhide
Commit : 6d7b12a9c6b05f100a4f1604ada5d04e5b812c0d
Author : Justin M. Forbes <jforbes@fedoraproject.org>
Date : 2026-07-22T12:47:46-06:00
Stats : +648/-364 in 46 file(s)
URL : https://src.fedoraproject.org/rpms/kernel/c/6d7b12a9c6b05f100a4f1604ada5d04e5b812c0d?branch=rawhide
Log:
kernel-7.2.0-0.rc4.260722g248951ddc14d.37
* Wed Jul 22 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.248951ddc14d.37]
- automotive: enable HUGETLBFS to workaround build error (Scott Weaver)
Resolves:
Signed-off-by: Justin M. Forbes <jforbes@fedoraproject.org>
---
diff --git a/Makefile.rhelver b/Makefile.rhelver
index b0dac0c..a62e60f 100644
--- a/Makefile.rhelver
+++ b/Makefile.rhelver
@@ -12,7 +12,7 @@ RHEL_MINOR = 99
#
# Use this spot to avoid future merge conflicts.
# Do not trim this comment.
-RHEL_RELEASE = 34
+RHEL_RELEASE = 37
#
# RHEL_REBASE_NUM
diff --git a/def_variants.yaml.fedora b/def_variants.yaml.fedora
index 3145c97..5756752 100644
--- a/def_variants.yaml.fedora
+++ b/def_variants.yaml.fedora
@@ -17,6 +17,7 @@ packages:
rules:
- .*kunit.*: modules-internal
exact_pkg: True
+ ignore_deps: True
- .*test[^/]*.ko: modules-internal
- arch/.*: modules-core
diff --git a/def_variants.yaml.rhel b/def_variants.yaml.rhel
index 4bfbd14..c3ca698 100644
--- a/def_variants.yaml.rhel
+++ b/def_variants.yaml.rhel
@@ -20,6 +20,7 @@ packages:
rules:
- .*kunit.*: modules-internal
exact_pkg: True
+ ignore_deps: True
- .*test[^/]*.ko: modules-internal
- arch/.*: modules-core
diff --git a/filtermods.py b/filtermods.py
index 53f6a09..79c706d 100755
--- a/filtermods.py
+++ b/filtermods.py
@@ -1,6 +1,68 @@
#!/usr/bin/env python3
"""
filter kmods into groups for packaging, see filtermods.adoc
+
+Algorithm overview
+==================
+Assigns each kernel module (kmod) to exactly one RPM sub-package while
+respecting kmod dependency constraints: if kmod A depends on kmod B, then
+B's package must be reachable from A's package (same package, or one that
+A's package transitively depends on).
+
+The solver uses constraint propagation (AC-3 arc consistency) followed by
+greedy instantiation. Each kmod keeps an allowed_list — a set of packages
+it could still be placed in. The algorithm narrows these sets until every
+kmod has exactly one package.
+
+Phases
+------
+
+ ┌─────────────────────────────────────────────────────────────┐
+ │ sort_kmods() │
+ └─────────────────────────────────────────────────────────────┘
+
+ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
+ │ 1. init labels │──▶│ 2. propagate │──▶│ 3. resolve │──▶│ 4. resolve │
+ │ │ │ │ │ preferred │ │ remaining │
+ └──────────────────┘ └──────────────────┘ └──────────────────┘ └──────────────────┘
+
+ allowed_list per kmod — how it evolves through the phases:
+
+ Phase 0 (setup): {all packages} — every kmod starts with full set
+ │
+ Phase 1 (init labels): ▼
+ needs rule: {exact_pkg} — hard lock to one package
+ wants rule: {target ∪ ancestors} — target package and those it depends on
+ no rule: {all packages} — unchanged
+ │
+ Phase 2 (propagate): ▼
+ worklist loop: prune infeasible pkgs — for each pkg in allowed_list, check
+ from allowed_list that every kmod neighbor has at least
+ │ one compatible pkg; if not, remove it
+ │ re-queue neighbors when set shrinks
+ ▼
+ arc-consistent state — fixed point, all remaining pkgs are
+ │ locally compatible with every neighbor
+ Phase 3 (resolve preferred):▼
+ for each kmod narrow to {preferred} — if kmod has a wants rule and its
+ with wants rule: then propagate preferred pkg is still allowed, pick it
+ │ (or nearest ancestor); re-propagate
+ │
+ Phase 4 (resolve remaining):▼
+ reverse topo order narrow to {default} — pick default pkg (or nearest ancestor);
+ for remaining: then propagate reverse topo so parents settle first
+ │
+ ▼
+ {single package} — every kmod assigned to exactly one pkg
+
+Convergence: allowed_list sets only shrink (monotonic). The potential
+ sum(|allowed_list|) is bounded below by 0 and strictly decreases on every
+ productive prune, so the worklist always drains.
+
+Correctness: pruning only removes packages provably incompatible with at
+ least one neighbor. For tree-shaped package hierarchies (the common case),
+ arc consistency guarantees that the greedy resolve phases cannot cause
+ dead ends.
"""
import argparse
@@ -10,8 +72,9 @@ import subprocess
import sys
import yaml
import unittest
+from collections import deque
-from logging import getLogger, DEBUG, INFO, WARN, ERROR, CRITICAL, NOTSET, FileHandler, StreamHandler, Formatter, Logger
+from logging import getLogger, DEBUG, INFO, WARNING, ERROR, CRITICAL, NOTSET, FileHandler, StreamHandler, Formatter
from typing import Optional
log = getLogger('filtermods')
@@ -64,13 +127,18 @@ def setup_logging(log_filename, stdout_log_level):
return log
-def canon_modname(kmod_pathname: str) -> str:
- name = os.path.basename(kmod_pathname)
- if name.endswith('.xz'):
- name = name[:-3]
+def strip_ko_suffix(name: str) -> str:
+ for ext in ('.xz', '.zst', '.gz'):
+ if name.endswith(ext):
+ name = name[:-len(ext)]
+ break
return name
+def canon_modname(kmod_pathname: str) -> str:
+ return strip_ko_suffix(os.path.basename(kmod_pathname))
+
+
class HierarchyObject:
def __init__(self):
self.depends_on = set()
@@ -96,6 +164,10 @@ def get_topo_order(obj_list: list[HierarchyObject], func_get_linked_objs=lambda
if all_deps_sorted:
no_deps.add(obj)
+ if not no_deps:
+ cycle_names = [str(obj) for obj in objs_to_sort]
+ raise Exception('Dependency cycle detected among: %s' % ', '.join(cycle_names))
+
for obj in no_deps:
topo_order.append(obj)
objs_sorted.add(obj)
@@ -112,7 +184,6 @@ class KMod(HierarchyObject):
self.is_dependency_for: set[KMod] = set()
self.assigned_to_pkg: Optional[KModPackage] = None
self.preferred_pkg: Optional[KModPackage] = None
- self.rule_specifity: int = 0
self.allowed_list: Optional[set[KModPackage]] = None
self.err = 0
@@ -138,7 +209,7 @@ class KModList():
kmod = KMod(kmod_pathname)
# log.debug('Adding kmod %s (%s) to list', kmod.name, kmod.kmod_pathname)
if kmod.kmod_pathname != kmod_pathname:
- raise Exception('Already have %s, but path changed? %s', kmod_name, kmod_pathname)
+ raise Exception('Already have %s, but path changed? %s' % (kmod_name, kmod_pathname))
if not kmod.name:
raise Exception('Each kmod needs a name')
self.name_to_kmod_map[kmod_name] = kmod
@@ -147,7 +218,7 @@ class KModList():
def process_depmod_line(self, line):
tmp = line.split(':')
if len(tmp) != 2:
- raise Exception('Depmod line has unexpected format: %s', line)
+ raise Exception('Depmod line has unexpected format: %s' % line)
kmod_pathname = tmp[0].strip()
dependencies_pathnames = tmp[1].strip()
kmod = self.get(kmod_pathname, create_if_missing=True)
@@ -162,6 +233,7 @@ class KModList():
with open(filepath) as f:
lines = f.readlines()
for line in lines:
+ line = line.strip()
if not line or line.startswith('#'):
continue
self.process_depmod_line(line)
@@ -186,9 +258,7 @@ class KModList():
ret = []
for root, dirs, files in os.walk(topdir):
for filename in files:
- if filename.endswith('.xz'):
- filename = filename[:-3]
- if filename.endswith('.ko'):
+ if strip_ko_suffix(filename).endswith('.ko'):
kmod_pathname = os.path.join(root, filename)
ret.append(kmod_pathname)
@@ -199,7 +269,7 @@ class KModList():
for kmod_pathname in ret:
kmod = self.get(kmod_pathname)
if not kmod:
- raise Exception('Could not find kmod %s in depmod', kmod_pathname)
+ raise Exception('Could not find kmod %s in depmod' % kmod_pathname)
log.debug('OK: all (%s) kmods from %s are known', len(ret), dirpath)
@@ -210,7 +280,9 @@ class KModPackage(HierarchyObject):
def _get_deps_for(pkg):
return pkg.is_dependency_for
- def __init__(self, name: str, depends_on=[]) -> None:
+ def __init__(self, name: str, depends_on=None) -> None:
+ if depends_on is None:
+ depends_on = []
self.name: str = name
self.depends_on: set[KModPackage] = set(depends_on)
self.is_dependency_for: set[KModPackage] = set()
@@ -220,6 +292,8 @@ class KModPackage(HierarchyObject):
self.all_depends_on_list: list[KModPackage] = self._get_all_linked(KModPackage._get_depends_on)
self.all_depends_on: set[KModPackage] = set(self.all_depends_on_list)
self.all_deps_for: Optional[set[KModPackage]] = None
+ self.self_and_below: set[KModPackage] = set()
+ self.self_and_above: set[KModPackage] = set()
self.default = False
log.debug('KModPackage created %s, depends_on: %s', name, [pkg.name for pkg in depends_on])
@@ -250,7 +324,7 @@ class KModPackageList(HierarchyObject):
def __init__(self) -> None:
self.name_to_obj: dict[str, KModPackage] = {}
self.kmod_pkg_list: list[KModPackage] = []
- self.rules: list[tuple[str, str, str]] = []
+ self.rules: list[tuple[str, str, str, bool]] = []
def get(self, pkgname):
if pkgname in self.name_to_obj:
@@ -293,116 +367,127 @@ def walk_kmod_chain(kmod, myfunc):
return visited
-# is pkg a parent to any pkg from "alist"
-def is_pkg_parent_to_any(pkg: KModPackage, alist: set[KModPackage]) -> bool:
- if pkg in alist:
- return True
+def pick_best(allowed_set: set[KModPackage], target_pkg: KModPackage = None) -> Optional[KModPackage]:
+ """Pick one package from allowed_set for a kmod to be assigned to.
- for some_pkg in alist:
- if some_pkg in pkg.all_depends_on:
- return True
- return False
+ If target_pkg is given, try it first, then walk down its dependency
+ chain and return the first match found in allowed_set.
+ If there is no target or no match, pick the package that sits highest
+ in the dependency tree (has the most dependencies below it).
-# is pkg a child to any pkg from "alist"
-def is_pkg_child_to_any(pkg: KModPackage, alist: set[KModPackage]) -> bool:
- if pkg in alist:
- return True
+ Example with: modules-extra -> modules-core
+ modules -> modules-core
- for some_pkg in alist:
- if pkg in some_pkg.all_depends_on:
- return True
- return False
+ pick_best({modules, modules-extra}) => modules-extra
+ (tied on depth, breaks tie by name)
+ pick_best({modules, modules-core}) => modules
+ (modules sits higher, it depends on modules-core)
+ pick_best({modules, modules-core}, modules) => modules
+ (target_pkg matches directly)
+ pick_best({modules-core}, modules) => modules-core
+ (target_pkg not in set, but its dependency is)
+ """
+ if not allowed_set:
+ return None
+ if target_pkg:
+ if target_pkg in allowed_set:
+ return target_pkg
+ for child in target_pkg.all_depends_on_list:
+ if child in allowed_set:
+ return child
+ return max(allowed_set, key=lambda p: (len(p.all_depends_on), p.name))
-def update_allowed(kmod: KMod, visited: set[KMod], update_linked: bool = False) -> int:
- num_updated = 0
- init = False
- to_remove = set()
+def prune_allowed(kmod: KMod) -> bool:
+ """Remove packages from kmod's allowed_list that are incompatible
+ with its kmod neighbors (dependencies and dependents).
- if kmod in visited:
- return num_updated
- visited.add(kmod)
+ For each package P in kmod's allowed_list, remove P if:
+ - any kmod dependency has allowed_list & P.self_and_below == {}, or
+ - any kmod dependent has allowed_list & P.self_and_above == {}
- # if we have nothing, try to initialise based on parents and children
- if kmod.allowed_list is None:
- init_allowed_list: set[KModPackage] = set()
+ where:
+ P.self_and_below = {P} | P.all_depends_on (P and everything P depends on)
+ P.self_and_above = {P} | P.get_all_deps_for() (P and everything that depends on P)
- # init from children
- for kmod_dep in kmod.depends_on:
- if kmod_dep.allowed_list:
- init_allowed_list.update(kmod_dep.allowed_list)
- init = True
-
- if init:
- # also add any pkgs that pkgs from list could depend on
- deps_for = set()
- for pkg in init_allowed_list:
- deps_for.update(pkg.get_all_deps_for())
- init_allowed_list.update(deps_for)
-
- # init from parents
- if not init:
- for kmod_par in kmod.is_dependency_for:
- if kmod_par.allowed_list:
- init_allowed_list.update(kmod_par.allowed_list)
- # also add any pkgs that depend on pkgs from list
- for pkg in kmod_par.allowed_list:
- init_allowed_list.update(pkg.all_depends_on)
- init = True
-
- if init:
- kmod.allowed_list = init_allowed_list
- log.debug('%s: init to %s', kmod.name, [x.name for x in kmod.allowed_list])
-
- kmod_allowed_list = kmod.allowed_list or set()
- # log.debug('%s: update to %s', kmod.name, [x.name for x in kmod_allowed_list])
-
- # each allowed is parent to at least one child allowed [for _all_ children]
- for pkg in kmod_allowed_list:
+ This ensures that if a kmod is placed in package P, its dependencies
+ can go into P or a package below P, and its dependents can go into P
+ or a package above P. Packages that violate this are eliminated.
+
+ Returns True if any packages were removed, False otherwise.
+ Sets kmod.err if the entire allowed_list becomes empty.
+ """
+ if kmod.err or not kmod.allowed_list:
+ return False
+
+ to_remove = set()
+ for pkg in kmod.allowed_list:
for kmod_dep in kmod.depends_on:
- if kmod_dep.allowed_list is None or kmod_dep.err:
+ if not kmod_dep.allowed_list or kmod_dep.err:
continue
- if not is_pkg_parent_to_any(pkg, kmod_dep.allowed_list):
+ if not (pkg.self_and_below & kmod_dep.allowed_list):
to_remove.add(pkg)
- log.debug('%s: remove %s from allowed, child: %s [%s]',
- kmod.name, [pkg.name], kmod_dep.name, [x.name for x in kmod_dep.allowed_list])
+ log.debug('%s: remove %s, child %s has %s',
+ kmod.name, pkg.name, kmod_dep.name, [x.name for x in kmod_dep.allowed_list])
+ break
+
+ if pkg in to_remove:
+ continue
- # each allowed is child to at least one parent allowed [for _all_ parents]
- for pkg in kmod_allowed_list:
for kmod_par in kmod.is_dependency_for:
- if kmod_par.allowed_list is None or kmod_par.err:
+ if not kmod_par.allowed_list or kmod_par.err:
continue
-
- if not is_pkg_child_to_any(pkg, kmod_par.allowed_list):
+ if not (pkg.self_and_above & kmod_par.allowed_list):
to_remove.add(pkg)
- log.debug('%s: remove %s from allowed, parent: %s %s',
- kmod.name, [pkg.name], kmod_par.name, [x.name for x in kmod_par.allowed_list])
+ log.debug('%s: remove %s, parent %s has %s',
+ kmod.name, pkg.name, kmod_par.name, [x.name for x in kmod_par.allowed_list])
+ break
- for pkg in to_remove:
- kmod_allowed_list.remove(pkg)
- num_updated = num_updated + 1
- if len(kmod_allowed_list) == 0:
- log.error('%s: cleared entire allow list', kmod.name)
- kmod.err = 1
+ if not to_remove:
+ return False
- if init or to_remove or update_linked:
- if to_remove:
- log.debug('%s: updated to %s', kmod.name, [x.name for x in kmod_allowed_list])
+ kmod.allowed_list -= to_remove
+ log.debug('%s: pruned to %s', kmod.name, [x.name for x in kmod.allowed_list])
+ if not kmod.allowed_list:
+ log.error('%s: cleared entire allow list', kmod.name)
+ kmod.err = 1
+ return True
- for kmod_dep in kmod.depends_on:
- num_updated = num_updated + update_allowed(kmod_dep, visited)
- for kmod_dep in kmod.is_dependency_for:
- num_updated = num_updated + update_allowed(kmod_dep, visited)
+def propagate(kmod_list: KModList, seed_kmods=None):
+ """Run prune_allowed() across kmods until no more changes occur.
- return num_updated
+ When seed_kmods is None, starts with all kmods in topological order.
+ When seed_kmods is given, starts with their immediate neighbors only.
+
+ Each time prune_allowed() removes a package from a kmod's allowed_list,
+ that kmod's neighbors are re-queued, since the change may make some of
+ their packages incompatible too.
+ """
+ if seed_kmods is None:
+ queue = deque(kmod_list.get_topo_order())
+ else:
+ queue = deque()
+ for kmod in seed_kmods:
+ for neighbor in kmod.depends_on | kmod.is_dependency_for:
+ queue.append(neighbor)
+ in_queue = set(queue)
+
+ while queue:
+ kmod = queue.popleft()
+ in_queue.discard(kmod)
+ if prune_allowed(kmod):
+ for neighbor in kmod.depends_on | kmod.is_dependency_for:
+ if neighbor not in in_queue:
+ queue.append(neighbor)
+ in_queue.add(neighbor)
def apply_initial_labels(pkg_list: KModPackageList, kmod_list: KModList, treat_default_as_wants=False):
log.debug('')
for cur_rule in ['needs', 'wants', 'default']:
- for package_name, rule_type, rule in pkg_list.rules:
+ for package_name, rule_type, rule, ignore_deps in pkg_list.rules:
pkg_obj = pkg_list.get(package_name)
if not pkg_obj:
@@ -415,164 +500,95 @@ def apply_initial_labels(pkg_list: KModPackageList, kmod_list: KModList, treat_d
rule_type = 'wants'
if 'needs' == rule_type:
- # kmod_matching is already in topo_order
kmod_matching = get_kmods_matching_re(kmod_list, rule)
for kmod in kmod_matching:
if kmod.assigned_to_pkg and kmod.assigned_to_pkg != pkg_obj:
log.error('%s: can not be required by 2 pkgs %s %s', kmod.name, kmod.assigned_to_pkg, pkg_obj.name)
else:
kmod.assigned_to_pkg = pkg_obj
- kmod.allowed_list = set([pkg_obj])
- kmod.rule_specifity = len(kmod_matching)
+ kmod.allowed_list = {pkg_obj}
log.debug('%s: needed by %s', kmod.name, [pkg_obj.name])
-
- if 'wants' == rule_type:
- # kmod_matching is already in topo_order
+ if ignore_deps:
+ for dep in kmod.depends_on:
+ dep.is_dependency_for.discard(kmod)
+ for parent in kmod.is_dependency_for:
+ parent.depends_on.discard(kmod)
+ kmod.depends_on.clear()
+ kmod.is_dependency_for.clear()
+ log.debug('%s: deps severed (ignore_deps)', kmod.name)
+
+ elif 'wants' == rule_type:
kmod_matching = get_kmods_matching_re(kmod_list, rule)
for kmod in kmod_matching:
- if kmod.allowed_list is None:
- kmod.allowed_list = set(pkg_obj.all_depends_on)
- kmod.allowed_list.add(pkg_obj)
+ if not kmod.assigned_to_pkg and not kmod.preferred_pkg:
+ kmod.allowed_list = {pkg_obj} | pkg_obj.all_depends_on
kmod.preferred_pkg = pkg_obj
- kmod.rule_specifity = len(kmod_matching)
- log.debug('%s: wanted by %s, init allowed to %s', kmod.name, [pkg_obj.name], [pkg.name for pkg in kmod.allowed_list])
+ log.debug('%s: wanted by %s, allowed: %s', kmod.name, [pkg_obj.name], [p.name for p in kmod.allowed_list])
+ elif kmod.assigned_to_pkg:
+ log.debug('%s: ignoring wants by %s, assigned to %s', kmod.name, pkg_obj.name, kmod.assigned_to_pkg.name)
else:
- if kmod.assigned_to_pkg:
- log.debug('%s: ignoring wants by %s, already assigned to %s', kmod.name, pkg_obj.name, kmod.assigned_to_pkg.name)
- else:
- # rule specifity may not be good idea, so just log it
- # e.g. .*test.* may not be more specific than arch/x86/.*
- log.debug('already have wants for %s %s, new rule: %s', kmod.name, kmod.preferred_pkg, rule)
-
- if 'default' == rule_type:
- pkg_obj.default = True
-
-
-def settle(kmod_list: KModList) -> None:
- kmod_topo_order = list(kmod_list.get_topo_order())
-
- for i in range(0, 25):
- log.debug('settle start %s', i)
-
- ret = 0
- for kmod in kmod_topo_order:
- visited: set[KMod] = set()
- ret = ret + update_allowed(kmod, visited)
- log.debug('settle %s updated nodes: %s', i, ret)
-
- if ret == 0:
- break
-
- kmod_topo_order.reverse()
-
-
-# phase 1 - propagate initial labels
-def propagate_labels_1(pkg_list: KModPackageList, kmod_list: KModList):
- log.info('')
- settle(kmod_list)
+ log.debug('already have wants for %s %s, new rule: %s', kmod.name, kmod.preferred_pkg, rule)
+ elif 'default' == rule_type:
+ pkg_obj.default = True
-def pick_closest_to_preffered(preferred_pkg: KModPackage, allowed_set: set[KModPackage]):
- for child in preferred_pkg.all_depends_on_list:
- if child in allowed_set:
- return child
- return None
+def resolve_preferred(kmod_list: KModList):
+ """Resolve kmods that have a preferred_pkg (set by 'wants' rules).
-# phase 2 - if some kmods allow more than one pkg, pick wanted package
-def propagate_labels_2(pkg_list: KModPackageList, kmod_list: KModList):
+ For each kmod with multiple allowed packages and a preferred_pkg,
+ use pick_best() to select the preferred package (or closest match)
+ and narrow allowed_list to just that one. Then propagate the change
+ to neighbors.
+ """
log.info('')
- ret = 0
for kmod in kmod_list.get_topo_order():
- update_linked = False
-
- if kmod.allowed_list is None and kmod.preferred_pkg:
- log.error('%s: has no allowed list but has preferred_pkg %s', kmod.name, kmod.preferred_pkg.name)
- kmod.err = 1
-
- if kmod.allowed_list and kmod.preferred_pkg:
- chosen_pkg = None
- if kmod.preferred_pkg in kmod.allowed_list:
- chosen_pkg = kmod.preferred_pkg
- else:
- chosen_pkg = pick_closest_to_preffered(kmod.preferred_pkg, kmod.allowed_list)
-
- if chosen_pkg is not None:
- kmod.allowed_list = set([chosen_pkg])
- log.debug('%s: making to prefer %s (preffered is %s), allowed: %s', kmod.name, chosen_pkg.name,
- kmod.preferred_pkg.name, [pkg.name for pkg in kmod.allowed_list])
- update_linked = True
-
- visited: set[KMod] = set()
- ret = ret + update_allowed(kmod, visited, update_linked)
-
- log.debug('updated nodes: %s', ret)
- settle(kmod_list)
-
-
-# Is this the best pick? ¯\_(ツ)_/¯
-def pick_topmost_allowed(allowed_set: set[KModPackage]) -> KModPackage:
- topmost = next(iter(allowed_set))
- for pkg in allowed_set:
- if len(pkg.all_depends_on) > len(topmost.all_depends_on):
- topmost = pkg
-
- return topmost
-
-
-# phase 3 - assign everything else that remained
-def propagate_labels_3(pkg_list: KModPackageList, kmod_list: KModList):
+ if kmod.err or not kmod.allowed_list or len(kmod.allowed_list) <= 1:
+ continue
+ if not kmod.preferred_pkg:
+ continue
+ chosen = pick_best(kmod.allowed_list, kmod.preferred_pkg)
+ if chosen:
+ kmod.allowed_list = {chosen}
+ log.debug('%s: resolved to preferred %s', kmod.name, chosen.name)
+ propagate(kmod_list, [kmod])
+
+
+def resolve_remaining(pkg_list: KModPackageList, kmod_list: KModList):
+ """Final pass: resolve kmods that still have multiple allowed packages
+ after resolve_preferred().
+
+ Walks kmods in reverse topological order (dependents before dependencies),
+ using pick_best() with the default package as target. Falls back to
+ pick_best() without a target if the default package doesn't match.
+ Each resolution is propagated to neighbors.
+ """
log.info('')
- ret = 0
- kmod_topo_order = list(kmod_list.get_topo_order())
- # do reverse topo order to cover children faster
- kmod_topo_order.reverse()
-
default_pkg = None
- default_name = ''
for pkg_obj in pkg_list:
if pkg_obj.default:
if default_pkg:
log.error('Already have default pkg: %s / %s', default_pkg.name, pkg_obj.name)
else:
default_pkg = pkg_obj
- default_name = default_pkg.name
-
- for kmod in kmod_topo_order:
- update_linked = False
- chosen_pkg = None
-
- if kmod.allowed_list is None:
- if default_pkg:
- chosen_pkg = default_pkg
- else:
- log.error('%s not assigned and there is no default', kmod.name)
- elif len(kmod.allowed_list) > 1:
- if default_pkg:
- if default_pkg in kmod.allowed_list:
- chosen_pkg = default_pkg
- else:
- chosen_pkg = pick_closest_to_preffered(default_pkg, kmod.allowed_list)
- if chosen_pkg:
- log.debug('closest is %s', chosen_pkg.name)
- if not chosen_pkg:
- # multiple pkgs are allowed, but none is preferred or default
- chosen_pkg = pick_topmost_allowed(kmod.allowed_list)
- log.debug('topmost is %s', chosen_pkg.name)
-
- if chosen_pkg:
- kmod.allowed_list = set([chosen_pkg])
- log.debug('%s: making to prefer %s (default: %s)', kmod.name, [chosen_pkg.name], default_name)
- update_linked = True
-
- visited: set[KMod] = set()
- ret = ret + update_allowed(kmod, visited, update_linked)
- log.debug('updated nodes: %s', ret)
- settle(kmod_list)
-
-
-def load_config(config_pathname: str, kmod_list: KModList, variants=[]):
+ for kmod in reversed(list(kmod_list.get_topo_order())):
+ if kmod.err or not kmod.allowed_list or len(kmod.allowed_list) <= 1:
+ continue
+ chosen = None
+ if default_pkg:
+ chosen = pick_best(kmod.allowed_list, default_pkg)
+ if not chosen:
+ chosen = pick_best(kmod.allowed_list)
+ if chosen:
+ kmod.allowed_list = {chosen}
+ log.debug('%s: resolved to %s', kmod.name, chosen.name)
+ propagate(kmod_list, [kmod])
+
+
+def load_config(config_pathname: str, kmod_list: KModList, variants=None):
+ if variants is None:
+ variants = []
kmod_pkg_list = KModPackageList()
with open(config_pathname, 'r') as file:
@@ -591,6 +607,8 @@ def load_config(config_pathname: str, kmod_list: KModList, variants=[]):
pkg_dep_list = []
for pkg_dep_name in depends_on:
pkg_dep = kmod_pkg_list.get(pkg_dep_name)
+ if pkg_dep is None:
+ raise Exception('Package %s depends on unknown package %s' % (pkg_name, pkg_dep_name))
pkg_dep_list.append(pkg_dep)
pkg_obj = kmod_pkg_list.get(pkg_name)
@@ -604,9 +622,15 @@ def load_config(config_pathname: str, kmod_list: KModList, variants=[]):
for rule_dict in rules_list:
if_variant_in = rule_dict.get('if_variant_in')
exact_pkg = rule_dict.get('exact_pkg')
+ ignore_deps = rule_dict.get('ignore_deps', False)
+
+ if ignore_deps and exact_pkg is not True:
+ raise Exception(
+ 'ignore_deps requires exact_pkg to be True'
+ )
for key, value in rule_dict.items():
- if key in ['if_variant_in', 'exact_pkg']:
+ if key in ['if_variant_in', 'exact_pkg', 'ignore_deps']:
continue
if if_variant_in is not None:
@@ -626,8 +650,8 @@ def load_config(config_pathname: str, kmod_list: KModList, variants=[]):
rule_type = 'default'
rule = '.*'
- log.debug('found rule: %s', (package_name, rule_type, rule))
- kmod_pkg_list.rules.append((package_name, rule_type, rule))
+ log.debug('found rule: %s', (package_name, rule_type, rule, ignore_deps))
+ kmod_pkg_list.rules.append((package_name, rule_type, rule, ignore_deps))
log.info('loaded config, rules: %s', len(kmod_pkg_list.rules))
return kmod_pkg_list
@@ -677,12 +701,22 @@ def make_pictures(pkg_list: KModPackageList, kmod_list: KModList, filename: str,
safe_run_command('dot -Tsvg %s.dot > %s.svg' % (filename, filename))
-def sort_kmods(depmod_pathname: str, config_str: str, variants=[], do_pictures=''):
+def sort_kmods(depmod_pathname: str, config_str: str, variants=None, do_pictures=''):
+ if variants is None:
+ variants = []
log.info('%s %s', depmod_pathname, config_str)
kmod_list = KModList()
kmod_list.load_depmod_file(depmod_pathname)
pkg_list = load_config(config_str, kmod_list, variants)
+ all_pkgs = set(pkg_list)
+
+ for pkg in pkg_list:
+ pkg.self_and_below = {pkg} | pkg.all_depends_on
+ pkg.self_and_above = {pkg} | pkg.get_all_deps_for()
+
+ for kmod in kmod_list.name_to_kmod_map.values():
+ kmod.allowed_list = set(all_pkgs)
basename = os.path.splitext(config_str)[0]
@@ -691,12 +725,11 @@ def sort_kmods(depmod_pathname: str, config_str: str, variants=[], do_pictures='
make_pictures(pkg_list, kmod_list, basename + "_0", print_allowed=False)
try:
-
- propagate_labels_1(pkg_list, kmod_list)
+ propagate(kmod_list)
if '1' in do_pictures:
make_pictures(pkg_list, kmod_list, basename + "_1")
- propagate_labels_2(pkg_list, kmod_list)
- propagate_labels_3(pkg_list, kmod_list)
+ resolve_preferred(kmod_list)
+ resolve_remaining(pkg_list, kmod_list)
finally:
if 'f' in do_pictures:
make_pictures(pkg_list, kmod_list, basename + "_f")
@@ -742,13 +775,13 @@ def print_report(pkg_list: KModPackageList, kmod_list: KModList):
bad_parent_list = []
for kmod_parent in kmod.is_dependency_for:
- if not is_pkg_child_to_any(kmod.preferred_pkg, kmod_parent.allowed_list):
+ if not (kmod.preferred_pkg.self_and_above & kmod_parent.allowed_list):
bad_parent_list.append(kmod_parent)
bad_child_list = []
for kmod_child in kmod.depends_on:
- if not is_pkg_parent_to_any(kmod.preferred_pkg, kmod_child.allowed_list):
- bad_child_list.append(kmod_parent)
+ if not (kmod.preferred_pkg.self_and_below & kmod_child.allowed_list):
+ bad_child_list.append(kmod_child)
log.info('%s: wanted by %s but ended up in %s', kmod.name, [kmod.preferred_pkg.name], [pkg.name for pkg in kmod.allowed_list])
if bad_parent_list:
@@ -829,7 +862,6 @@ class FiltermodTests(unittest.TestCase):
self._is_kmod_pkg('kmod3', 'modules')
self._is_kmod_pkg('kmod4', 'modules-other')
-
def test2(self):
self.pkg_list, self.kmod_list = sort_kmods(get_td('test2.dep'), get_td('test2.yaml'),
do_pictures=FiltermodTests.do_pictures)
@@ -866,7 +898,7 @@ class FiltermodTests(unittest.TestCase):
self._is_kmod_pkg('kmod8', 'modules-partner')
self._is_kmod_pkg('kmod9', 'modules-partner')
- def _check_preffered_pkg(self, kmodname, pkgname):
+ def _check_preferred_pkg(self, kmodname, pkgname):
kmod = self.kmod_list.get(kmodname)
self.assertIsNotNone(kmod)
self.assertEqual(kmod.preferred_pkg.name, pkgname)
@@ -875,9 +907,9 @@ class FiltermodTests(unittest.TestCase):
self.pkg_list, self.kmod_list = sort_kmods(get_td('test5.dep'), get_td('test5.yaml'),
do_pictures=FiltermodTests.do_pictures)
- self._check_preffered_pkg('kmod2', 'modules')
- self._check_preffered_pkg('kmod3', 'modules-partner')
- self._check_preffered_pkg('kmod4', 'modules-partner')
+ self._check_preferred_pkg('kmod2', 'modules')
+ self._check_preferred_pkg('kmod3', 'modules-partner')
+ self._check_preferred_pkg('kmod4', 'modules-partner')
def test6(self):
self.pkg_list, self.kmod_list = sort_kmods(get_td('test6.dep'), get_td('test6.yaml'),
@@ -897,21 +929,167 @@ class FiltermodTests(unittest.TestCase):
self._is_kmod_pkg('kmod3', 'modules-other')
self._is_kmod_pkg('kmod4', 'modules')
+ def test8_needs_exact_pkg(self):
+ """needs (exact_pkg) locks kmod to a specific package, deps adjust accordingly"""
+ self.pkg_list, self.kmod_list = sort_kmods(get_td('test8.dep'), get_td('test8.yaml'),
+ do_pictures=FiltermodTests.do_pictures)
-def do_rpm_mapping_test(config_pathname, kmod_rpms):
- kmod_dict = {}
+ self._is_kmod_pkg('kmod2', 'modules')
+ self._is_kmod_pkg('kmod1', 'modules-extra')
+ self._is_kmod_pkg('kmod3', 'modules')
- def get_kmods_matching_re(pkgname, param_re):
- matched = []
- param_re = '^kernel/' + param_re
- pattern = re.compile(param_re)
+ kmod2 = self.kmod_list.get('kmod2')
+ self.assertEqual(kmod2.assigned_to_pkg.name, 'modules')
- for kmod_pathname, kmod_rec in kmod_dict.items():
- m = pattern.match(kmod_pathname)
- if m:
- matched.append(kmod_pathname)
+ def test9_needs_overrides_wants(self):
+ """needs takes priority over wants on the same kmod"""
+ self.pkg_list, self.kmod_list = sort_kmods(get_td('test9.dep'), get_td('test9.yaml'),
+ do_pictures=FiltermodTests.do_pictures)
+
+ self._is_kmod_pkg('kmod1', 'modules-core')
+ self._is_kmod_pkg('kmod2', 'modules-core')
- return matched
+ kmod1 = self.kmod_list.get('kmod1')
+ self.assertEqual(kmod1.assigned_to_pkg.name, 'modules-core')
+ self.assertIsNone(kmod1.preferred_pkg)
+
+ def test10_default_only(self):
+ """with only a default rule, all kmods go to the default package"""
+ self.pkg_list, self.kmod_list = sort_kmods(get_td('test10.dep'), get_td('test10.yaml'),
+ do_pictures=FiltermodTests.do_pictures)
+
+ self._is_kmod_pkg('kmod1', 'modules')
+ self._is_kmod_pkg('kmod2', 'modules')
+ self._is_kmod_pkg('kmod3', 'modules')
+
+ def test11_deep_chain(self):
+ """5-level dep chain with both ends constrained, middle gets default"""
+ self.pkg_list, self.kmod_list = sort_kmods(get_td('test11.dep'), get_td('test11.yaml'),
+ do_pictures=FiltermodTests.do_pictures)
+
+ self._is_kmod_pkg('kmod1', 'modules-extra')
+ self._is_kmod_pkg('kmod2', 'modules')
+ self._is_kmod_pkg('kmod3', 'modules')
+ self._is_kmod_pkg('kmod4', 'modules')
+ self._is_kmod_pkg('kmod5', 'modules-core')
+
+ def test12_diamond_deps(self):
+ """diamond in kmod deps: kmod1->kmod2->kmod4, kmod1->kmod3->kmod4"""
+ self.pkg_list, self.kmod_list = sort_kmods(get_td('test12.dep'), get_td('test12.yaml'),
+ do_pictures=FiltermodTests.do_pictures)
+
+ self._is_kmod_pkg('kmod1', 'modules-extra')
+ self._is_kmod_pkg('kmod2', 'modules')
+ self._is_kmod_pkg('kmod3', 'modules')
+ self._is_kmod_pkg('kmod4', 'modules-core')
+
+ def test13_disconnected_subgraphs(self):
+ """two independent subgraphs are assigned independently"""
+ self.pkg_list, self.kmod_list = sort_kmods(get_td('test13.dep'), get_td('test13.yaml'),
+ do_pictures=FiltermodTests.do_pictures)
+
+ self._is_kmod_pkg('kmod1', 'modules-extra')
+ self._is_kmod_pkg('kmod2', 'modules')
+ self._is_kmod_pkg('kmod3', 'modules-core')
+ self._is_kmod_pkg('kmod4', 'modules-core')
+
+ def test14_wants_overridden_by_constraint(self):
+ """kmod2 wants extra but kmod1's constraint forces it to core"""
+ self.pkg_list, self.kmod_list = sort_kmods(get_td('test14.dep'), get_td('test14.yaml'),
+ do_pictures=FiltermodTests.do_pictures)
+
+ self._is_kmod_pkg('kmod1', 'modules-core')
+ self._is_kmod_pkg('kmod2', 'modules-core')
+
+ kmod2 = self.kmod_list.get('kmod2')
+ self.assertEqual(kmod2.preferred_pkg.name, 'modules-extra')
+
+ def test15_deep_propagation_across_branches(self):
+ """constraint from kmod1 (extra branch) propagates 4 levels to override kmod6's partner preference"""
+ self.pkg_list, self.kmod_list = sort_kmods(get_td('test15.dep'), get_td('test15.yaml'),
+ do_pictures=FiltermodTests.do_pictures)
+
+ self._is_kmod_pkg('kmod1', 'modules-extra')
+ self._is_kmod_pkg('kmod2', 'modules')
+ self._is_kmod_pkg('kmod3', 'modules')
+ self._is_kmod_pkg('kmod4', 'modules')
+ self._is_kmod_pkg('kmod5', 'modules')
+ self._is_kmod_pkg('kmod6', 'modules-core')
+ self._is_kmod_pkg('kmod7', 'modules-extra')
+
+ kmod6 = self.kmod_list.get('kmod6')
+ self.assertEqual(kmod6.preferred_pkg.name, 'modules-partner')
+
+ def test16_complex_multi_branch_realistic(self):
+ """realistic scenario: 5 packages (2 branches), 11 kmods (net+storage subgraphs
+ joined by shared deps), needs/wants/default rules, cross-branch constraint override
+
+ Package hierarchy (depends-on): Kmod dependencies (A: B = A depends on B):
+
+ modules-extra ─┐ net_bridge ──► net_virt ──► net_base ──► crypto
+ ├─ modules ─┐ ▲
+ modules-internal ─┘ ├─ core net_ovs ───┬──► net_virt │
+ │ │ stor_base ◄── stor_raid ◄── stor_dm
+ modules-partner ───────────┘ helper ◄───┴───────────────────────────────────────────┘
+
+ partner_drv (standalone) internal_test (standalone)
+
+ Rules: Expected result:
+ net_bridge → needs extra net_bridge = extra (needs satisfied)
+ internal_test → needs internal internal_test = internal (needs satisfied)
+ net_ovs → wants extra net_ovs = extra (wants satisfied)
+ stor_dm → wants extra stor_dm = extra (wants satisfied)
+ helper → wants partner partner_drv = partner (wants satisfied)
+ partner_drv → wants partner helper = core (wants OVERRIDDEN: partner
+ default → modules unreachable from extra)
+ net_virt/net_base/stor_raid/stor_base/crypto = modules
+ """
+ self.pkg_list, self.kmod_list = sort_kmods(get_td('test16.dep'), get_td('test16.yaml'),
+ do_pictures=FiltermodTests.do_pictures)
+
+ # needs rules: hard-locked to exact package
+ self._is_kmod_pkg('kmod_net_bridge', 'modules-extra')
+ self._is_kmod_pkg('kmod_internal_test', 'modules-internal')
+
+ # wants rules satisfied: standalone or unconstrained
+ self._is_kmod_pkg('kmod_net_ovs', 'modules-extra')
+ self._is_kmod_pkg('kmod_stor_dm', 'modules-extra')
+ self._is_kmod_pkg('kmod_partner_drv', 'modules-partner')
+
+ # wants overridden by cross-branch constraint: helper wanted partner
+ # but net_ovs and stor_dm (both extra) depend on it, and partner is
+ # not in extra's dependency chain, so helper is forced to core
+ self._is_kmod_pkg('kmod_helper', 'modules-core')
+ helper = self.kmod_list.get('kmod_helper')
+ self.assertEqual(helper.preferred_pkg.name, 'modules-partner')
+
+ # default fallback: intermediate and shared kmods go to modules
+ self._is_kmod_pkg('kmod_net_virt', 'modules')
+ self._is_kmod_pkg('kmod_net_base', 'modules')
+ self._is_kmod_pkg('kmod_stor_raid', 'modules')
+ self._is_kmod_pkg('kmod_stor_base', 'modules')
+ self._is_kmod_pkg('kmod_crypto', 'modules')
+
+
+ def test17_ignore_deps(self):
+ """ignore_deps severs edges so test kmod doesn't drag real kmod across sibling pkgs"""
+ self.pkg_list, self.kmod_list = sort_kmods(get_td('test17.dep'), get_td('test17.yaml'),
+ do_pictures=FiltermodTests.do_pictures)
+
+ self._is_kmod_pkg('test_kunit.ko', 'modules-internal')
+ self._is_kmod_pkg('real.ko', 'modules-partner')
+ self._is_kmod_pkg('base.ko', 'modules')
+
+ test_kmod = self.kmod_list.get('test_kunit.ko')
+ self.assertEqual(test_kmod.assigned_to_pkg.name, 'modules-internal')
+ self.assertEqual(len(test_kmod.depends_on), 0)
+ self.assertEqual(len(test_kmod.is_dependency_for), 0)
+
+
+def do_rpm_mapping_test(config_pathname, kmod_rpms):
+ """Check that kmod-to-package assignments in built RPMs match config rules."""
+ import shlex
+ kmod_dict = {}
for kmod_rpm in kmod_rpms.split():
filename = os.path.basename(kmod_rpm)
@@ -920,15 +1098,14 @@ def do_rpm_mapping_test(config_pathname, kmod_rpms):
if not m:
raise Exception('Unrecognized rpm ' + kmod_rpm + ', expected a kernel-modules* rpm')
pkgname = 'modules-' + m.group(1)
- m = re.match(r'modules-([0-9.]+)', pkgname)
- if m:
+ if re.match(r'modules-([0-9.]+)', pkgname):
pkgname = 'modules'
tmpdir = os.path.join('tmp.filtermods', filename, pkgname)
if not os.path.exists(tmpdir):
log.info('creating tmp dir %s', tmpdir)
os.makedirs(tmpdir)
- safe_run_command('rpm2cpio %s | cpio -id' % (os.path.abspath(kmod_rpm)), cwddir=tmpdir)
+ safe_run_command('rpm2cpio %s | cpio -id' % (shlex.quote(os.path.abspath(kmod_rpm))), cwddir=tmpdir)
else:
log.info('using cached content of tmp dir: %s', tmpdir)
@@ -939,33 +1116,45 @@ def do_rpm_mapping_test(config_pathname, kmod_rpms):
continue
kmod_pathname = 'kernel/' + ret.group(1)
- if not kmod_pathname.endswith('.xz') and not kmod_pathname.endswith('.ko'):
+ if not re.search(r'\.ko(\.\w+)?$', kmod_pathname):
continue
if kmod_pathname in kmod_dict:
if pkgname not in kmod_dict[kmod_pathname]['target_pkgs']:
kmod_dict[kmod_pathname]['target_pkgs'].append(pkgname)
else:
- kmod_dict[kmod_pathname] = {}
- kmod_dict[kmod_pathname]['target_pkgs'] = [pkgname]
- kmod_dict[kmod_pathname]['pkg'] = None
- kmod_dict[kmod_pathname]['matched'] = False
+ kmod_dict[kmod_pathname] = {'target_pkgs': [pkgname], 'pkg': None, 'rule': None}
kmod_pkg_list = load_config(config_pathname, None)
- for package_name, rule_type, rule in kmod_pkg_list.rules:
- kmod_names = get_kmods_matching_re(package_name, rule)
+ default_pkg_name = None
+ for package_name, rule_type, rule, _ignore_deps in kmod_pkg_list.rules:
+ if rule_type == 'default':
+ default_pkg_name = package_name
+ continue
+
+ param_re = '^kernel/' + rule
+ pattern = re.compile(param_re)
+
+ for kmod_pathname, kmod_rec in kmod_dict.items():
+ if pattern.match(kmod_pathname):
+ if rule_type == 'needs' or kmod_rec['pkg'] is None:
+ kmod_rec['pkg'] = package_name
+ kmod_rec['rule'] = '%s: %s' % (rule_type, rule)
- for kmod_pathname in kmod_names:
- kmod_rec = kmod_dict[kmod_pathname]
+ for kmod_pathname, kmod_rec in kmod_dict.items():
+ if kmod_rec['pkg'] is None:
+ kmod_rec['pkg'] = default_pkg_name
+ kmod_rec['rule'] = 'default'
- if not kmod_rec['matched']:
- kmod_rec['matched'] = True
- kmod_rec['pkg'] = package_name
for kmod_pathname, kmod_rec in kmod_dict.items():
- if kmod_rec['pkg'] not in kmod_rec['target_pkgs']:
- log.warning('kmod %s wanted by config in %s, in tree it is: %s', kmod_pathname, [kmod_rec['pkg']], kmod_rec['target_pkgs'])
+ if kmod_rec['pkg'] is None:
+ log.warning('kmod %s not matched by any config rule and no default package, in tree it is: %s', kmod_pathname, kmod_rec['target_pkgs'])
+ elif kmod_rec['pkg'] not in kmod_rec['target_pkgs']:
+ if kmod_rec['rule'] == 'default':
+ log.info('kmod %s wanted by config in %s (rule: %s), in tree it is: %s', kmod_pathname, [kmod_rec['pkg']], kmod_rec['rule'], kmod_rec['target_pkgs'])
+ else:
+ log.warning('kmod %s wanted by config in %s (rule: %s), in tree it is: %s', kmod_pathname, [kmod_rec['pkg']], kmod_rec['rule'], kmod_rec['target_pkgs'])
elif len(kmod_rec['target_pkgs']) > 1:
- # if set(kmod_rec['target_pkgs']) != set(['modules', 'modules-core']):
log.warning('kmod %s multiple matches in tree: %s/%s', kmod_pathname, [kmod_rec['pkg']], kmod_rec['target_pkgs'])
@@ -1018,7 +1207,7 @@ def main():
parser.add_argument('-q', '--quiet', dest='quiet',
help='be more quiet', action='count', default=0)
parser.add_argument('-l', '--log-filename', dest='log_filename',
- help='log filename', default='filtermods.log')
+ help='log filename', default='')
subparsers = parser.add_subparsers(dest='cmd')
@@ -1071,7 +1260,7 @@ def main():
if options.cmd == "selftest":
options.verbose = options.verbose - 2
options.verbose = max(options.verbose - options.quiet, 0)
- levels = [NOTSET, CRITICAL, ERROR, WARN, INFO, DEBUG]
+ levels = [NOTSET, CRITICAL, ERROR, WARNING, INFO, DEBUG]
stdout_log_level = levels[min(options.verbose, len(levels) - 1)]
log = setup_logging(options.log_filename, stdout_log_level)
diff --git a/kernel-aarch64-16k-debug-fedora.config b/kernel-aarch64-16k-debug-fedora.config
index 9743b2b..889455f 100644
--- a/kernel-aarch64-16k-debug-fedora.config
+++ b/kernel-aarch64-16k-debug-fedora.config
@@ -7508,7 +7508,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -7517,7 +7518,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-aarch64-16k-fedora.config b/kernel-aarch64-16k-fedora.config
index 02b5b1a..76b06ca 100644
--- a/kernel-aarch64-16k-fedora.config
+++ b/kernel-aarch64-16k-fedora.config
@@ -7477,7 +7477,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -7486,7 +7487,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-aarch64-64k-debug-rhel.config b/kernel-aarch64-64k-debug-rhel.config
index 675f302..82642f6 100644
--- a/kernel-aarch64-64k-debug-rhel.config
+++ b/kernel-aarch64-64k-debug-rhel.config
@@ -6136,7 +6136,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -6145,7 +6146,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-aarch64-64k-rhel.config b/kernel-aarch64-64k-rhel.config
index 532950b..2aae0f5 100644
--- a/kernel-aarch64-64k-rhel.config
+++ b/kernel-aarch64-64k-rhel.config
@@ -6110,7 +6110,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -6119,7 +6120,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-aarch64-debug-fedora.config b/kernel-aarch64-debug-fedora.config
index db4eac9..5217aaa 100644
--- a/kernel-aarch64-debug-fedora.config
+++ b/kernel-aarch64-debug-fedora.config
@@ -7507,7 +7507,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -7516,7 +7517,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-aarch64-debug-rhel.config b/kernel-aarch64-debug-rhel.config
index c6fc96e..337f96c 100644
--- a/kernel-aarch64-debug-rhel.config
+++ b/kernel-aarch64-debug-rhel.config
@@ -6133,7 +6133,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -6142,7 +6143,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-aarch64-fedora.config b/kernel-aarch64-fedora.config
index 2932655..668c05f 100644
--- a/kernel-aarch64-fedora.config
+++ b/kernel-aarch64-fedora.config
@@ -7476,7 +7476,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -7485,7 +7486,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-aarch64-rhel.config b/kernel-aarch64-rhel.config
index dab1778..19cc57e 100644
--- a/kernel-aarch64-rhel.config
+++ b/kernel-aarch64-rhel.config
@@ -6107,7 +6107,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -6116,7 +6117,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-aarch64-rt-64k-debug-fedora.config b/kernel-aarch64-rt-64k-debug-fedora.config
index 46c6d9c..793f963 100644
--- a/kernel-aarch64-rt-64k-debug-fedora.config
+++ b/kernel-aarch64-rt-64k-debug-fedora.config
@@ -7521,7 +7521,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -7530,7 +7531,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-aarch64-rt-64k-debug-rhel.config b/kernel-aarch64-rt-64k-debug-rhel.config
index 2b2d535..3ddf489 100644
--- a/kernel-aarch64-rt-64k-debug-rhel.config
+++ b/kernel-aarch64-rt-64k-debug-rhel.config
@@ -6181,7 +6181,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -6190,7 +6191,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-aarch64-rt-64k-fedora.config b/kernel-aarch64-rt-64k-fedora.config
index 9b4b20f..967a43e 100644
--- a/kernel-aarch64-rt-64k-fedora.config
+++ b/kernel-aarch64-rt-64k-fedora.config
@@ -7490,7 +7490,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -7499,7 +7500,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-aarch64-rt-64k-rhel.config b/kernel-aarch64-rt-64k-rhel.config
index 8e3a4b9..a4d651e 100644
--- a/kernel-aarch64-rt-64k-rhel.config
+++ b/kernel-aarch64-rt-64k-rhel.config
@@ -6155,7 +6155,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -6164,7 +6165,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-aarch64-rt-debug-fedora.config b/kernel-aarch64-rt-debug-fedora.config
index 0902587..09bfa1e 100644
--- a/kernel-aarch64-rt-debug-fedora.config
+++ b/kernel-aarch64-rt-debug-fedora.config
@@ -7517,7 +7517,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -7526,7 +7527,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-aarch64-rt-debug-rhel.config b/kernel-aarch64-rt-debug-rhel.config
index 1ca77d9..0ccb8bd 100644
--- a/kernel-aarch64-rt-debug-rhel.config
+++ b/kernel-aarch64-rt-debug-rhel.config
@@ -6177,7 +6177,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -6186,7 +6187,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-aarch64-rt-fedora.config b/kernel-aarch64-rt-fedora.config
index fa9d067..2718e66 100644
--- a/kernel-aarch64-rt-fedora.config
+++ b/kernel-aarch64-rt-fedora.config
@@ -7486,7 +7486,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -7495,7 +7496,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-aarch64-rt-rhel.config b/kernel-aarch64-rt-rhel.config
index cf76614..49ae56d 100644
--- a/kernel-aarch64-rt-rhel.config
+++ b/kernel-aarch64-rt-rhel.config
@@ -6151,7 +6151,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
# CONFIG_RV_MON_NRP is not set
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -6160,7 +6161,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-ppc64le-debug-fedora.config b/kernel-ppc64le-debug-fedora.config
index 57106b2..e5fc9f4 100644
--- a/kernel-ppc64le-debug-fedora.config
+++ b/kernel-ppc64le-debug-fedora.config
@@ -5979,7 +5979,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -5988,7 +5989,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-ppc64le-debug-rhel.config b/kernel-ppc64le-debug-rhel.config
index 90efe44..9df186f 100644
--- a/kernel-ppc64le-debug-rhel.config
+++ b/kernel-ppc64le-debug-rhel.config
@@ -5598,7 +5598,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -5607,7 +5608,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-ppc64le-fedora.config b/kernel-ppc64le-fedora.config
index 5c17e05..695c05c 100644
--- a/kernel-ppc64le-fedora.config
+++ b/kernel-ppc64le-fedora.config
@@ -5947,7 +5947,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -5956,7 +5957,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-ppc64le-rhel.config b/kernel-ppc64le-rhel.config
index 6a90a56..27144b8 100644
--- a/kernel-ppc64le-rhel.config
+++ b/kernel-ppc64le-rhel.config
@@ -5574,7 +5574,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -5583,7 +5584,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-riscv64-debug-fedora.config b/kernel-riscv64-debug-fedora.config
index b51bd53..ec92d99 100644
--- a/kernel-riscv64-debug-fedora.config
+++ b/kernel-riscv64-debug-fedora.config
@@ -6101,7 +6101,8 @@ CONFIG_RUST_KVEC_KUNIT_TEST=y
CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -6111,7 +6112,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-riscv64-debug-rhel.config b/kernel-riscv64-debug-rhel.config
index 076701f..f77c762 100644
--- a/kernel-riscv64-debug-rhel.config
+++ b/kernel-riscv64-debug-rhel.config
@@ -5670,7 +5670,8 @@ CONFIG_RUST_KVEC_KUNIT_TEST=y
CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -5680,7 +5681,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-riscv64-fedora.config b/kernel-riscv64-fedora.config
index 76f6f27..46280cb 100644
--- a/kernel-riscv64-fedora.config
+++ b/kernel-riscv64-fedora.config
@@ -6069,7 +6069,8 @@ CONFIG_RUST_KVEC_KUNIT_TEST=y
CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -6079,7 +6080,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-riscv64-rhel.config b/kernel-riscv64-rhel.config
index 5c1d55e..3ffe526 100644
--- a/kernel-riscv64-rhel.config
+++ b/kernel-riscv64-rhel.config
@@ -5646,7 +5646,8 @@ CONFIG_RUST_KVEC_KUNIT_TEST=y
CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -5656,7 +5657,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-riscv64-rt-debug-fedora.config b/kernel-riscv64-rt-debug-fedora.config
index 6b0d4b9..addeaf5 100644
--- a/kernel-riscv64-rt-debug-fedora.config
+++ b/kernel-riscv64-rt-debug-fedora.config
@@ -6111,7 +6111,8 @@ CONFIG_RUST_KVEC_KUNIT_TEST=y
CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -6121,7 +6122,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-riscv64-rt-fedora.config b/kernel-riscv64-rt-fedora.config
index f89b8b4..b3df0e6 100644
--- a/kernel-riscv64-rt-fedora.config
+++ b/kernel-riscv64-rt-fedora.config
@@ -6079,7 +6079,8 @@ CONFIG_RUST_KVEC_KUNIT_TEST=y
CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -6089,7 +6090,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-s390x-debug-fedora.config b/kernel-s390x-debug-fedora.config
index b542a66..3098add 100644
--- a/kernel-s390x-debug-fedora.config
+++ b/kernel-s390x-debug-fedora.config
@@ -5912,7 +5912,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -5921,7 +5922,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-s390x-debug-rhel.config b/kernel-s390x-debug-rhel.config
index e65d3ac..7ddbeb0 100644
--- a/kernel-s390x-debug-rhel.config
+++ b/kernel-s390x-debug-rhel.config
@@ -5540,7 +5540,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_RTAPP=y
@@ -5549,7 +5550,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-s390x-fedora.config b/kernel-s390x-fedora.config
index 78ac543..93c9bfc 100644
--- a/kernel-s390x-fedora.config
+++ b/kernel-s390x-fedora.config
@@ -5880,7 +5880,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -5889,7 +5890,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-s390x-rhel.config b/kernel-s390x-rhel.config
index 286ab0f..8303bcd 100644
--- a/kernel-s390x-rhel.config
+++ b/kernel-s390x-rhel.config
@@ -5516,7 +5516,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -5525,7 +5526,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-s390x-zfcpdump-rhel.config b/kernel-s390x-zfcpdump-rhel.config
index 7c98d8d..74123a6 100644
--- a/kernel-s390x-zfcpdump-rhel.config
+++ b/kernel-s390x-zfcpdump-rhel.config
@@ -5529,7 +5529,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
# CONFIG_RV_MON_RTAPP is not set
@@ -5538,7 +5539,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-x86_64-debug-fedora.config b/kernel-x86_64-debug-fedora.config
index 7810387..e92e01a 100644
--- a/kernel-x86_64-debug-fedora.config
+++ b/kernel-x86_64-debug-fedora.config
@@ -6422,7 +6422,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -6432,7 +6433,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-x86_64-debug-rhel.config b/kernel-x86_64-debug-rhel.config
index a575421..20b47eb 100644
--- a/kernel-x86_64-debug-rhel.config
+++ b/kernel-x86_64-debug-rhel.config
@@ -5860,7 +5860,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -5870,7 +5871,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-x86_64-fedora.config b/kernel-x86_64-fedora.config
index d4c789c..fb3f7cf 100644
--- a/kernel-x86_64-fedora.config
+++ b/kernel-x86_64-fedora.config
@@ -6391,7 +6391,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -6401,7 +6402,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-x86_64-rhel.config b/kernel-x86_64-rhel.config
index 01cccd0..c5af7d7 100644
--- a/kernel-x86_64-rhel.config
+++ b/kernel-x86_64-rhel.config
@@ -5835,7 +5835,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -5845,7 +5846,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-x86_64-rt-debug-fedora.config b/kernel-x86_64-rt-debug-fedora.config
index 8f02bca..5613e30 100644
--- a/kernel-x86_64-rt-debug-fedora.config
+++ b/kernel-x86_64-rt-debug-fedora.config
@@ -6432,7 +6432,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -6442,7 +6443,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-x86_64-rt-debug-rhel.config b/kernel-x86_64-rt-debug-rhel.config
index 98eef20..1645f84 100644
--- a/kernel-x86_64-rt-debug-rhel.config
+++ b/kernel-x86_64-rt-debug-rhel.config
@@ -5904,7 +5904,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -5914,7 +5915,7 @@ CONFIG_RV_MON_SCO=y
CONFIG_RV_MON_SLEEP=y
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_STS=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
diff --git a/kernel-x86_64-rt-fedora.config b/kernel-x86_64-rt-fedora.config
index afbe3e3..8cb0287 100644
--- a/kernel-x86_64-rt-fedora.config
+++ b/kernel-x86_64-rt-fedora.config
@@ -6401,7 +6401,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
CONFIG_RUST_PHYLIB_ABSTRACTIONS=y
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -6411,7 +6412,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel-x86_64-rt-rhel.config b/kernel-x86_64-rt-rhel.config
index 5340bb9..6fe64ce 100644
--- a/kernel-x86_64-rt-rhel.config
+++ b/kernel-x86_64-rt-rhel.config
@@ -5879,7 +5879,8 @@ CONFIG_RUST_OVERFLOW_CHECKS=y
# CONFIG_RUST_PHYLIB_ABSTRACTIONS is not set
CONFIG_RUST_STR_KUNIT_TEST=y
CONFIG_RUST=y
-# CONFIG_RV_MON_DEADLINE is not set
+CONFIG_RV_MON_DEADLINE=y
+CONFIG_RV_MON_NOMISS=y
CONFIG_RV_MON_NRP=y
CONFIG_RV_MON_OPID=y
CONFIG_RV_MON_PAGEFAULT=y
@@ -5889,7 +5890,7 @@ CONFIG_RV_MON_SCO=y
# CONFIG_RV_MON_SLEEP is not set
CONFIG_RV_MON_SNROC=y
CONFIG_RV_MON_SSSW=y
-# CONFIG_RV_MON_STALL is not set
+CONFIG_RV_MON_STALL=y
CONFIG_RV_MON_WWNR=y
CONFIG_RV_PER_TASK_MONITORS=3
CONFIG_RV_REACTORS=y
diff --git a/kernel.changelog b/kernel.changelog
index 392e705..8c4e58b 100644
--- a/kernel.changelog
+++ b/kernel.changelog
@@ -1,7 +1,35 @@
-* Mon Jul 20 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.34]
+* Wed Jul 22 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.248951ddc14d.37]
- automotive: enable HUGETLBFS to workaround build error (Scott Weaver)
Resolves:
+* Wed Jul 22 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.248951ddc14d.36]
+- redhat/configs: Enable deadline and stall monitors (Gabriele Monaco)
+- Linux v7.2.0-0.rc4.248951ddc14d
+Resolves:
+
+* Tue Jul 21 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.b95f03f04d47.35]
+- redhat/kernel.spec: fix build for rtonly (Jan Stancek)
+Resolves:
+
+* Tue Jul 21 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.b95f03f04d47.34]
+- redhat: filtermods.py: document exact_pkg and ignore_deps rule attributes (Jan Stancek)
+- redhat: filtermods.py: make pick_best() deterministic on tied packages (Jan Stancek)
+- redhat: filtermods.py: add ignore_deps rule option (Jan Stancek)
+- redhat: filtermods.py: don't create logfile automatically (Jan Stancek)
+- redhat: filtermods.py: clean up logging imports (Jan Stancek)
+- redhat: filtermods.py: strip lines when parsing depmod file (Jan Stancek)
+- redhat: filtermods.py: fix typo in _check_preffered_pkg (Jan Stancek)
+- redhat: filtermods.py: error on unknown package dependency (Jan Stancek)
+- redhat: filtermods.py: avoid mutable default arguments (Jan Stancek)
+- redhat: filtermods.py: handle .zst and .gz compressed modules (Jan Stancek)
+- redhat: filtermods.py: fix Exception string formatting (Jan Stancek)
+- redhat: filtermods.py: detect dependency cycles in get_topo_order() (Jan Stancek)
+- redhat: filtermods.py: fix do_rpm_mapping_test() (Jan Stancek)
+- redhat: filtermods.py: simplify algorithm (Jan Stancek)
+- redhat: filtermods.py: add new tests (Jan Stancek)
+- Linux v7.2.0-0.rc4.b95f03f04d47
+Resolves:
+
* Mon Jul 20 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.33]
- Linux v7.2.0-0.rc4
Resolves:
diff --git a/kernel.spec b/kernel.spec
index 153d2bb..49f9af6 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -190,13 +190,13 @@ Summary: The Linux kernel
%define specrpmversion 7.2.0
%define specversion 7.2.0
%define patchversion 7.2
-%define pkgrelease 0.rc4.34
+%define pkgrelease 0.rc4.260722g248951ddc14d.37
%define kversion 7
-%define tarfile_release 7.2-rc4
+%define tarfile_release 7.2-rc4-61-g248951ddc14d
# This is needed to do merge window version magic
%define patchlevel 2
# This allows pkg_release to have configurable %%{?dist} tag
-%define specrelease 0.rc4.34%{?buildid}%{?dist}
+%define specrelease 0.rc4.260722g248951ddc14d.37%{?buildid}%{?dist}
# This defines the kabi tarball version
%define kabiversion 7.2.0
@@ -459,6 +459,7 @@ Summary: The Linux kernel
%define with_debug 0
%ifarch s390x ppc64le riscv64
%define with_debuginfo 0
+%define with_base 0
%endif
%define with_vdso_install 0
%define with_perf 0
@@ -4962,9 +4963,34 @@ fi\
#
#
%changelog
-* Mon Jul 20 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.34]
+* Wed Jul 22 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.248951ddc14d.37]
- automotive: enable HUGETLBFS to workaround build error (Scott Weaver)
+* Wed Jul 22 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.248951ddc14d.36]
+- redhat/configs: Enable deadline and stall monitors (Gabriele Monaco)
+- Linux v7.2.0-0.rc4.248951ddc14d
+
+* Tue Jul 21 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.b95f03f04d47.35]
+- redhat/kernel.spec: fix build for rtonly (Jan Stancek)
+
+* Tue Jul 21 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.b95f03f04d47.34]
+- redhat: filtermods.py: document exact_pkg and ignore_deps rule attributes (Jan Stancek)
+- redhat: filtermods.py: make pick_best() deterministic on tied packages (Jan Stancek)
+- redhat: filtermods.py: add ignore_deps rule option (Jan Stancek)
+- redhat: filtermods.py: don't create logfile automatically (Jan Stancek)
+- redhat: filtermods.py: clean up logging imports (Jan Stancek)
+- redhat: filtermods.py: strip lines when parsing depmod file (Jan Stancek)
+- redhat: filtermods.py: fix typo in _check_preffered_pkg (Jan Stancek)
+- redhat: filtermods.py: error on unknown package dependency (Jan Stancek)
+- redhat: filtermods.py: avoid mutable default arguments (Jan Stancek)
+- redhat: filtermods.py: handle .zst and .gz compressed modules (Jan Stancek)
+- redhat: filtermods.py: fix Exception string formatting (Jan Stancek)
+- redhat: filtermods.py: detect dependency cycles in get_topo_order() (Jan Stancek)
+- redhat: filtermods.py: fix do_rpm_mapping_test() (Jan Stancek)
+- redhat: filtermods.py: simplify algorithm (Jan Stancek)
+- redhat: filtermods.py: add new tests (Jan Stancek)
+- Linux v7.2.0-0.rc4.b95f03f04d47
+
* Mon Jul 20 2026 Fedora Kernel Team <kernel-team@fedoraproject.org> [7.2.0-0.rc4.33]
- Linux v7.2.0-0.rc4
diff --git a/sources b/sources
index c304c51..201207b 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
-SHA512 (linux-7.2-rc4.tar.xz) = 95c16f559babef156de8b785a0cac14d4b7d522b4141111ec1b409e40b67d970e1ba5b4b66b8ba7409b05985fec04652d1caa7f1e6ad8c0ad4bf8f38e1c939b3
-SHA512 (kernel-abi-stablelists-7.2.0.tar.xz) = 81c30ba59269e71f8fac334604549630f2a8281a0946efa9b532ce4ec6706379ded4672ed4ae7916a499ebbc1f1000979e2527fb05b49a610ec055ee39fd7fd7
-SHA512 (kernel-kabi-dw-7.2.0.tar.xz) = bf880002eb61ae0c19a5692db25c281152d08404e60023770660fe3bbbd57055ae1a7a0ec770e57a871bd3d8a531d401951743b95731cb93ff26a0623f9bd217
+SHA512 (linux-7.2-rc4-61-g248951ddc14d.tar.xz) = 9c7d9fb51f8c2ba295ed8eac7153dfacfef2ea436092d6c17993ddc457b152ba28a70aaa7e6a459882290b573b75b3294b1e49a2a70a40b928afa171ee9659f7
+SHA512 (kernel-abi-stablelists-7.2.0.tar.xz) = 9568a33b9fe7aa02a891aff1435d1e742b726c4f1de0be15ded9cd7fdf5262dd2748bfeb3943d5fc246f173f0644e4821ebc34b361816fbe00c252960b6f9428
+SHA512 (kernel-kabi-dw-7.2.0.tar.xz) = a970ff64c3d463eac55aace1420cbf357115137e1ff78cb75b85816115f18f4626678c32290fb44631cb979a3f9fd1ab3ad24dc6c5112a68eb134b2c2979cfca
reply other threads:[~2026-07-22 18:47 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178474607973.1.3762349852201778661.rpms-kernel-6d7b12a9c6b0@fedoraproject.org \
--to=jforbes@fedoraproject.org \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox