Skip to content

Commit 586efce

Browse files
authored
Add logic to PR checker to detect kernel upgrade for OOT module specs (#11983)
1 parent d7bc078 commit 586efce

10 files changed

Lines changed: 64 additions & 6 deletions

File tree

SPECS/fwctl/fwctl.spec

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
# SOFTWARE.
3131
#
3232

33+
%global last-known-kernel 6.6.64.2
34+
3335
%{!?_name: %define _name fwctl}
3436
%{!?_version: %define _version 24.10}
3537
%{!?_release: %define _release OFED.24.10.0.6.7.1}

SPECS/iser/iser.spec

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#
2727
#
2828

29+
%global last-known-kernel 6.6.64.2
30+
2931
%if 0%{azl}
3032
%global target_kernel_version_full %(/bin/rpm -q --queryformat '%{VERSION}-%{RELEASE}' kernel-headers)
3133
%else

SPECS/isert/isert.spec

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#
2727
#
2828

29+
%global last-known-kernel 6.6.64.2
30+
2931
%if 0%{azl}
3032
%global target_kernel_version_full %(/bin/rpm -q --queryformat '%{VERSION}-%{RELEASE}' kernel-headers)
3133
%else

SPECS/knem/knem.spec

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
# KMP is disabled by default
2727
%{!?KMP: %global KMP 0}
2828

29+
%global last-known-kernel 6.6.64.2
30+
2931
%if 0%{azl}
3032
%global target_kernel_version_full %(/bin/rpm -q --queryformat '%{VERSION}-%{RELEASE}' kernel-headers)
3133
%else

SPECS/mft_kernel/mft_kernel.spec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
%global last-known-kernel 6.6.64.2
12

23
%if 0%{azl}
34
%global target_kernel_version_full %(/bin/rpm -q --queryformat '%{VERSION}-%{RELEASE}' kernel-headers)

SPECS/mlnx-nfsrdma/mlnx-nfsrdma.spec

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#
2727
#
2828

29+
%global last-known-kernel 6.6.64.2
30+
2931
%if 0%{azl}
3032
%global target_kernel_version_full %(/bin/rpm -q --queryformat '%{VERSION}-%{RELEASE}' kernel-headers)
3133
%else

SPECS/mlnx-ofa_kernel/mlnx-ofa_kernel.spec

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
# and/or other materials provided with the distribution.
2626
#
2727
#
28+
%global last-known-kernel 6.6.64.2
2829

2930
%if 0%{azl}
3031
%global target_kernel_version_full %(/bin/rpm -q --queryformat '%{VERSION}-%{RELEASE}' kernel-headers)
@@ -147,7 +148,7 @@ Requires: ofed-scripts
147148
BuildRequires: %kernel_module_package_buildreqs
148149
BuildRequires: /usr/bin/perl
149150
%endif
150-
%description
151+
%description
151152
InfiniBand "verbs", Access Layer and ULPs.
152153
Utilities rpm.
153154
The driver sources are located at: http://www.mellanox.com/downloads/ofed/mlnx-ofa_kernel-24.10-0.7.0.tgz
@@ -324,7 +325,7 @@ export NAME=%{name}
324325
export VERSION=%{version}
325326
export PREFIX=%{_prefix}
326327
mkdir -p %{buildroot}/%{_prefix}/src/ofa_kernel/%{_arch}
327-
for flavor in %flavors_to_build; do
328+
for flavor in %flavors_to_build; do
328329
export KSRC=%{kernel_source $flavor}
329330
export KVERSION=%{kernel_release $KSRC}
330331
cd $PWD/obj/$flavor

SPECS/srp/srp.spec

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#
2727
#
2828

29+
%global last-known-kernel 6.6.64.2
30+
2931
%if 0%{azl}
3032
%global target_kernel_version_full %(/bin/rpm -q --queryformat '%{VERSION}-%{RELEASE}' kernel-headers)
3133
%else

SPECS/xpmem/xpmem.spec

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
%{!?KMP: %global KMP 0}
22

3+
%global last-known-kernel 6.6.64.2
4+
35
%if 0%{azl}
46
%global target_kernel_version_full %(/bin/rpm -q --queryformat '%{VERSION}-%{RELEASE}' kernel-headers)
57
%else
@@ -248,4 +250,3 @@ fi
248250
* Tue Dec 17 2024 Binu Jose Philip <bphilip@microsoft.com>
249251
- Initial Azure Linux import from NVIDIA (license: GPLv2)
250252
- License verified
251-

toolkit/scripts/check_entangled_specs.py

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,21 @@
124124
])
125125
]
126126

127+
# OOT kernel module specs to match the `last-known-kernel` with kernel-headers `version`
128+
oot_kmodule_matching_groups = [
129+
frozenset([
130+
"SPECS/fwctl/fwctl.spec",
131+
"SPECS/iser/iser.spec",
132+
"SPECS/isert/isert.spec",
133+
"SPECS/knem/knem.spec",
134+
"SPECS/mft_kernel/mft_kernel.spec",
135+
"SPECS/mlnx-nfsrdma/mlnx-nfsrdma.spec",
136+
"SPECS/mlnx-ofa_kernel/mlnx-ofa_kernel.spec",
137+
"SPECS/srp/srp.spec",
138+
"SPECS/xpmem/xpmem.spec"
139+
])
140+
]
141+
127142
def check_spec_tags(base_path: str, tags: List[str], groups: List[FrozenSet]) -> Set[FrozenSet]:
128143
"""Returns spec sets which violate matching rules for given tags. """
129144
err_groups = set()
@@ -141,6 +156,21 @@ def check_spec_tags(base_path: str, tags: List[str], groups: List[FrozenSet]) ->
141156
return err_groups
142157

143158

159+
def check_oot_kmodules(base_path: str, tag: str, groups: List[FrozenSet]) -> Set[FrozenSet]:
160+
"""Returns OOT kernel modules which violate matching with kernel-headers version. """
161+
err_groups = set()
162+
163+
kernel_headers_spec = Spec.from_file(path.join(base_path, "SPECS/kernel-headers/kernel-headers.spec"))
164+
kernel_headers_version = get_tag_value(kernel_headers_spec, 'version')
165+
166+
for group in groups:
167+
for spec_filename in group:
168+
parsed_spec = Spec.from_file(path.join(base_path, spec_filename))
169+
tag_value = get_tag_value(parsed_spec, tag)
170+
if tag_value != kernel_headers_version:
171+
err_groups.add(spec_filename)
172+
return err_groups
173+
144174
def check_mstflintver_match_groups(base_path: str) -> Set[FrozenSet]:
145175
return check_spec_tags(base_path, ['mstflintver'], mstflintver_matching_groups)
146176

@@ -153,16 +183,23 @@ def check_version_release_match_groups(base_path: str) -> Set[FrozenSet]:
153183
def check_version_match_groups(base_path: str) -> Set[FrozenSet]:
154184
return check_spec_tags(base_path, ['epoch', 'version'], version_matching_groups)
155185

186+
def check_oot_kmodule_matching_groups(base_path: str) -> Set[FrozenSet]:
187+
return check_oot_kmodules(base_path, 'last-known-kernel', oot_kmodule_matching_groups)
156188

157189
def check_matches(base_path: str):
158190
version_match_errors = check_version_match_groups(base_path)
159191
version_release_match_errors = check_version_release_match_groups(base_path)
160192
sdkver_match_errors = check_sdkver_match_groups(base_path)
161193
mstflintver_match_errors = check_mstflintver_match_groups(base_path)
194+
oot_kmodule_match_errors = check_oot_kmodule_matching_groups(base_path)
162195

163196
printer = pprint.PrettyPrinter()
164197

165-
if len(version_match_errors) or len(version_release_match_errors) or len(sdkver_match_errors) or len(mstflintver_match_errors):
198+
if len(version_match_errors) or \
199+
len(version_release_match_errors) or \
200+
len(sdkver_match_errors) or \
201+
len(mstflintver_match_errors) or \
202+
len(oot_kmodule_match_errors):
166203
print('The current repository state violates a spec entanglement rule!')
167204

168205
if len(version_match_errors):
@@ -182,13 +219,19 @@ def check_matches(base_path: str):
182219
'\nPlease update the following sets of specs to have the same "sdkver" global variables:')
183220
for e in sdkver_match_errors:
184221
printer.pprint(e)
185-
222+
186223
if len(mstflintver_match_errors):
187224
print(
188225
'\nPlease update the following sets of specs to have the same "mstflintver" global variables:')
189226
for e in mstflintver_match_errors:
190227
printer.pprint(e)
191-
228+
229+
if len(oot_kmodule_match_errors):
230+
print(
231+
'\nPlease update the following sets of specs to match the "last-known-kernel" global variable with kernel-headers "version":')
232+
for e in oot_kmodule_match_errors:
233+
printer.pprint(e)
234+
192235
sys.exit(1)
193236

194237

0 commit comments

Comments
 (0)