On Tue, Jun 21, 2022 at 02:58:46PM +1000, Jonathan Gray wrote:
> Intel CPUs used to have strings like
> cpu0: Intel(R) Pentium(R) M processor 1200MHz ("GenuineIntel" 686-class) 1.20
> GHz
> cpu0: Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz, 2494.61 MHz, 06-3d-04
> recent CPUs use
> cpu0: 11th Gen Intel(R) Core(TM) i5-1130G7 @ 1.10GHz, 30009.37 MHz, 06-8c-01
> cpu0: 12th Gen Intel(R) Core(TM) i5-12400, 4390.71 MHz, 06-97-02
> cpu0: 12th Gen Intel(R) Core(TM) i7-1260P, 1995.55 MHz, 06-9a-03
>
> Index: patterns.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/fw_update/patterns.c,v
> retrieving revision 1.3
> diff -u -p -r1.3 patterns.c
> --- patterns.c 10 Mar 2022 07:12:13 -0000 1.3
> +++ patterns.c 21 Jun 2022 04:31:24 -0000
> @@ -94,7 +94,7 @@ main(void)
> printf("%s\n", "bwfm");
> printf("%s\n", "bwi");
> printf("%s\n", "intel");
> - printf("%s\n", "intel ^cpu0: Intel");
> + printf("%s\n", "intel ^cpu0:*Intel(R)");
> printf("%s\n", "inteldrm");
> print_devices("inteldrm", i915_devices, nitems(i915_devices));
> printf("%s\n", "ipw");
>
If I properly understood the way patterns file is used in fw_update, having a
'*' in the middle of the searched string could be hasardous and will result in
possible false positive (installing a firmware whereas not need).
With the pattern "intel ^cpu0:*Intel(R)", the search is done using:
_d="intel"
_m="^cpu0:*Intel(R)"
_nl=$(echo) # newline: \n
[ "$_m" ] || _m="${_nl}${_d}[0-9] at " # no change
[ "$_m" = "${_m#^}" ] || _m="${_nl}${_m#^}" # changed to
_m="\ncpu0:*Intel(R)"
if [[ ${_dmesgtail} = *$_m* ]] ; then
echo "$_d"
fi
The final searched string (glob) is "*\ncpu0:*Intel(R)*".
It means that if the dmesg contains "\ncpu0:" and "Intel(R)" (in this order,
but
not necessary on the same line) it will match.
On dmesglog, I found only few candidates for "Intel(R)" string not on a "cpuX:"
line:
bios0: Intel(R) Client Systems NUC8i5BEH
ugen0 at uhub2 port 2 "Intel Corporation Intel(R) Centrino(R)
Wireless-N + WiMAX 6150" rev 2.00/0.00 addr 3
ugen0 at uhub2 port 6 "Intel(R) Corporation Intel(R) Centrino(R)
Advanced-N + WiMAX 6250" rev 2.00/0.00 addr 4
uhidev0 at uhub2 port 1 configuration 1 interface 0 "Intel Corporation
Intel(R) Sensor Solution" rev 2.00/0.01 addr 3
the bios0 entry is *before* cpu0, so it will not match. But the others entries
will match (assuming the dmesg contains a cpu0: line, which somehow expected).
Below an alternative diff to match the Intel cpu without using '*':
diff 5177244f5c04ec0ff6b9b724b540740d62d2dcfa /home/semarie/repos/openbsd/src
blob - d7cbab70c1654d8dc6ca067cea55b440fd70d426
file + usr.sbin/fw_update/patterns.c
--- usr.sbin/fw_update/patterns.c
+++ usr.sbin/fw_update/patterns.c
@@ -95,6 +95,7 @@ main(void)
printf("%s\n", "bwi");
printf("%s\n", "intel");
printf("%s\n", "intel ^cpu0: Intel");
+ printf("%s\n", "intel ^cpu0: [0-9][0-9]th Gen Intel");
printf("%s\n", "inteldrm");
print_devices("inteldrm", i915_devices, nitems(i915_devices));
printf("%s\n", "ipw");
Comments ?
--
Sebastien Marie