aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/hwpmc
Commit message (Collapse)AuthorAgeFilesLines
* pmc: Import Intel Granite Rapids eventsBojan Novković8 days1-0/+5
| | | | | | | | | | Reviewed by: mhorne Sponsored by: Klara, Inc. Obtained from: Intel perfmon (JSON event definitions) Differential Revision: https://reviews.freebsd.org/D55081 MFC after: 2 days (cherry picked from commit a3ff85e11925ba1e25465c8ba633356f405f9214)
* pmc: add alderlaken modelAnaëlle CAZUC2025-12-111-0/+4
| | | | | | | | | | | | This commit adds alderlaken CPU model to hwpmc/libpmc. JSON event definitions are imported from Intel perfmon version 1.16. Reviewed by: mhorne MFC after: 1 week Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D49229 (cherry picked from commit ca3e47b0ea68664c7e10e1c3e28c5ac7d9932c21)
* pmc: add emerald rapids modelAnaëlle CAZUC2025-12-111-0/+4
| | | | | | | | | | | | This commit adds emerald rapids CPU model to hwpmc/libpmc. JSON event definitions are imported from Intel perfmon version 1.06. Reviewed by: mhorne MFC after: 1 week Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D49228 (cherry picked from commit 51a01f3debff8abf63c7cc21db9523c8feb53823)
* pmc: add alderlake modelAnaëlle CAZUC2025-12-111-0/+3
| | | | | | | | | | | | | | The commit 601925180df4 added the models 6-B7, 6-BA, 6-BF to libpmc, but they must also be added to the hwpmc module to allow pmc to work on those CPUs. Reviewed by: mhorne MFC after: 1 week Fixes: 601925180df4 ("libpmc: add more alderlake models") Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D49255 (cherry picked from commit 057dae35ffc6b17dacc84fa21921e93a17ce12b0)
* hwpmc: On attach, fix allowing a PMC's owner to attach it to itselfOlivier Certner2025-09-181-1/+1
| | | | | | | | | | | | | | | | The returned value in this case was wrong, and would basically prevent some PMC's owner process to attach that PMC to itself although the security checks underneath would have allowed it. Now that this early return has been fixed, its block basically becomes a performance short-circuit which has no effect from a functional standpoint. Fixes: ebccf1e3a6b1 ("Bring a working snapshot of hwpmc(4), ...") MFC after: 9 days Sponsored by: The FreeBSD Foundation (cherry picked from commit 1c40b15971f09c0c0676ae476b88b32166eae8ac)
* hwpmc: On attach, ensure owner is a target effective GID's memberOlivier Certner2025-09-181-11/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | This restores a check that existed prior to commit be1f7435ef218b1d ("kern: start tracking cr_gid outside of cr_groups[]"). While here, improve pmc_can_attach()'s style by changing the type of 'decline_attach' to 'bool', fixing tests on it, adding missing parentheses to 'return' statements, and by changing its return value type to 'bool'. Fixes: be1f7435ef218b1d ("kern: start tracking cr_gid outside of cr_groups[]") MFC after: 9 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52252 (cherry picked from commit 1c3c698ba4c40485ebbbd157cb49172cfa7de9b2) MFC to 14 does not fix any bug, but just applies some style changes needed by next MFC. In pmc_can_attach(): Start index of the loop on groups was changed to 1 in order to avoid a (harmless) duplicated groupmember() call with 'tc->cr_gid', which in 14 is still an alias of 'tc->cr_groups[0]'. We chose to MFC the addition of that latter call to minimize differences with what is in -CURRENT and 15.
* hwpmc: Restore line lost in previous commitAlexander Motin2024-12-011-0/+1
| | | | | | MFC after: 3 days (cherry picked from commit de852d78ff58643d91bb672571757ef73ca74c39)
* hwpmc: Fix whitespace in logging macrosMark Johnston2024-11-281-66/+70
| | | | | | | MFC after: 1 week Sponsored by: Klara, Inc. (cherry picked from commit 3c29734502c330fc8f8e345213791722aeaf55c1)
* dev/hwpmc: Fix the dmc620 MD4 macroAndrew Turner2024-07-151-1/+1
| | | | | | | | | | Add braces to the dmc620 MD4 macro to fix the GCC build. Reviewed by: brooks, imp, jhb Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D45266 (cherry picked from commit 131c1718c6331e87f139b42b4ad0e57b6a71ea44)
* pmc: better distinguish pmu-events allocation pathMitchell Horne2023-09-116-4/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Background: The pm_ev field of struct pmc_op_pmcallocate and struct pmc traditionally contains the index of the chosen event, corresponding to the __PMC_EVENTS array in pmc_events.h. This is a static list of events, maintained by FreeBSD. In the usual case, libpmc translates the user supplied event name (string) into the pm_ev index, which is passed as an argument to the allocation syscall. On the kernel side, the allocation method for the relevant hwpmc class translates the given index into the event code that will be written to an event selection register. In 2018, a new source of performance event definitions was introduced: the pmu-events json files, which are maintained by the Linux kernel. The result was better coverage for newer Intel processors with a reduced maintenance burden for libpmc/hwpmc. Intel and AMD CPUs were unconditionally switched to allocate events from pmu-events instead of the traditional scheme (959826ca1bb0a, 81eb4dcf9e0d). Under the pmu-events scheme, the pm_ev field contains an index corresponding to the selected event from the pmu-events table, something which the kernel has no knowledge of. The configuration for the performance counting registers is instead passed via class-dependent fields (struct pmc_md_op_pmcallocate). In 2021 I changed the allocation logic so that it would attempt to pull from the pmu-events table first, and fall-back to the traditional method (dfb4fb41166bc3). Later, pmu-events support for arm64 and power8 CPUs was added (28dd6730a5d6 and b48a2770d48b). The problem that remains is that the pm_ev field is overloaded, without a definitive way to determine whether the event allocation came from the pmu-events table or FreeBSD's statically-defined PMC events. This resulted in a recent fix, 21f7397a61f7. Change: To disambiguate these two supported but separate use-cases, add a new flag, PMC_F_EV_PMU, to be set as part of the allocation, indicating that the event index came from pmu-events. This is useful in two ways: 1. On the kernel side, we can validate the syscall arguments better. Some classes support only the traditional event scheme (e.g. hwpmc_armv7), while others support only the pmu-events method (e.g. hwpmc_core for Intel). We can now check for this. The hwpmc_arm64 class supports both methods, so the new flag supersedes the existing MD flag, PM_MD_EVENT_RAW. 2. The flag will be tracked in struct pmc for the duration of its lifetime, meaning it is communicated back to userspace. This allows libpmc to perform the reverse index-to-event-name translation without speculating about the meaning of the index value. Adding the flag is a backwards-incompatible ABI change. We recently bumped the major version of the hwpmc module, so this breakage is acceptable. Reviewed by: jkoshy MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40753 (cherry picked from commit c190fb35f35cc163b61e582a49115680b0d49dcc)
* hwpmc: on process exit, ensure that the owned log is closedKonstantin Belousov2023-08-211-3/+5
| | | | | | | | Tested by: pho (previous version) Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D41521
* PMC_OP_CONFIGURELOG: cleanup logging process if aborting due to pm_flagsKonstantin Belousov2023-08-211-0/+1
| | | | | | Reported by: pho Fixes: 8e63e787abbd69d29e55e2e0b2aa0aa624339f3b Sponsored by: The FreeBSD Foundation
* sys: Remove $FreeBSD$: one-line .c patternWarner Losh2023-08-1621-42/+0
| | | | Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
* sys: Remove $FreeBSD$: two-line .h patternWarner Losh2023-08-1614-28/+0
| | | | Remove /^\s*\*\n \*\s+\$FreeBSD\$$\n/
* hwpmc_armv7: plug memory leakMitchell Horne2023-08-031-1/+9
| | | | | | | | | | | Free allocated per-CPU structures in the pcpu_fini and finalize methods. While here, add debug trace entries to these methods. Reviewed by: jkoshy, andrew MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D41269
* hwpmc_arm64: plug memory leakMitchell Horne2023-08-031-1/+9
| | | | | | | | | | | Free allocated per-CPU structures in the pcpu_fini and finalize methods. While here, add debug trace entries to these methods. Reviewed by: jkoshy, andrew MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D41268
* pmc_events.h: update top-level commentMitchell Horne2023-07-101-5/+3
| | | | | | | | It points to non-existent documentation. The wiki page still contains a useful overview, so keep this link. MFC after: 3 days Sponsored by: The FreeBSD Foundation
* hwpmc: add 'flags' local to pmc_op_do_pmcallocate()Mitchell Horne2023-06-241-6/+7
| | | | | | | Similar to the other allocation parameters. No functional change. MFC after: 3 days Sponsored by: The FreeBSD Foundation
* hwpmc: flatten conditional in pmc_process_exit()Mitchell Horne2023-06-141-99/+88
| | | | | | | | | | | | Use a goto to clarify the control flow when there is no process descriptor. This wins back a level of indentation. No functional change intended. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40518
* hwpmc: split out PMC_OP_PMCRWMitchell Horne2023-06-141-115/+114
| | | | | | | | | | | | Split out the functional logic from the syscall handler into a helper function. This keeps it separate from the syscall control-flow logic, resulting in better readability overall. It also wins back a level of indentation. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40294
* hwpmc: split out PMC_OP_PMCRELEASEMitchell Horne2023-06-141-28/+38
| | | | | | | | | | | | Split out the functional logic from the syscall handler into a helper function. This keeps it separate from the syscall control-flow logic, resulting in better readability overall. It also wins back a level of indentation. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40293
* hwpmc: split out PMC_OP_PMCALLOCATEMitchell Horne2023-06-141-265/+256
| | | | | | | | | | | | | | | | | | | | Split out the large chunk of functional logic from the syscall handler into a helper function. This keeps it separate from the syscall control-flow logic, resulting in better readability overall. It also wins back a level of indentation. Flip the return values of the pmc_can_allocate_row() and pmc_can_allocate_rowindex() functions to boolean types, like their naming implies. We weren't actually using the error codes they were returning. While here, make some small style cleanups. No functional change intended. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40292
* hwpmc: split out PMC_OP_PMCATTACH/PMC_OP_PMCDETACHMitchell Horne2023-06-141-87/+103
| | | | | | | | | | | | | | | | Begin splitting out the large chunks of functional logic from the syscall handler into separate helper functions. This keeps it separate from the syscall control-flow logic, resulting in better readability overall. It also wins back a level of indentation. For this and the similar changes to follow, try to keep copyin() and copyout() calls outside of the helper functions. The changes are intended to have no functional impact, but do address style issues. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40291
* hwpmc: split out PMC_FN_PROCESS_EXECMitchell Horne2023-06-141-112/+120
| | | | | | | | | | | | Move the functionality into a separate helper function. All other actions in pmc_hook_handler() already have this. While here make some small style improvements. Restructure one for loop. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40333
* hwpmc_mod.c: misc style cleanupMitchell Horne2023-06-141-236/+212
| | | | | | | | | | | | | | | | | | | | Everything else I found worthy of adjustment. - Order local variable declarations per style(9) - Make use of __unused annotations rather than cast to void - Remove unnecessary casts - Add (void) casts to PMC class methods where the return value is ignored - A couple instances of reordering statements for clarity - Prefer bool type where applicable - unsigned int -> u_int - Use uintmax_t/%j in printf calls - Formatting of comments Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40517
* hwpmc_mod.c: prototype styleMitchell Horne2023-06-141-9/+9
| | | | | | | | | Improve alphabetical organization, grouping, and whitespace. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40516
* hwpmc_mod.c: conditional and loop styleMitchell Horne2023-06-141-160/+187
| | | | | | | | | | | | | - Explicitly check the value in conditional statements, per style(9) - Add braces around more loops and conditionals, wherever it appears (to me) to aid legibility - Expand some assignments within if statements - Fix formatting around list-type FOREACH macros Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40515
* hwpmc_mod.c: whitespace style cleanupMitchell Horne2023-06-141-291/+169
| | | | | | | | | | | | | | | Handle a few things related to spacing: - Remove redundant/superfluous blank lines (and add a couple where helpful) - Add spacing around binary operators - Remove spacing after casts and before goto labels - Adjustments for line width of 80 chars - Tab/space character issues Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40514
* hwpmc_mod.c: return statement styleMitchell Horne2023-06-141-42/+38
| | | | | | | Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D40513
* pmc: Rework PROCEXEC event to support PIEsJessica Clarke2023-05-302-7/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the PROCEXEC event only reports a single address, entryaddr, which is the entry point of the interpreter in the typical dynamic case, and used solely to calculate the base address of the interpreter. For PDEs this is fine, since the base address is known from the program headers, but for PIEs the base address varies at run time based on where the kernel chooses to load it, and so pmcstat has no way of knowing the real address ranges for the executable. This was less of an issue in the past since PIEs were rare, but now they're on by default on 64-bit architectures it's more of a problem. To solve this, pass through what was picked for et_dyn_addr by the kernel, and use that as the offset for the executable's start address just as is done for everything in the kernel. Since we're changing this interface, sanitise the way we determine the interpreter's base address by passing it through directly rather than indirectly via the entry point and having to subtract off whatever the ELF header's e_entry is (and anything that wants the entry point in future can still add that back on as needed; this merely changes the interface to directly provide the underlying variables involved). This will be followed up by a bump to the pmc major version. Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D39595
* pmc: Provide full path to modules from kernel linkerJessica Clarke2023-05-301-1/+1
| | | | | | | | | | | | | | | | | This unifies the user object and kernel module paths in libpmcstat, allows modules loaded from non-standard locations (e.g. from a user's home directory when testing) to be found and, since buffer is what all the warnings here use (they were never updated when buffer_modules were added to pick based on where the file was found) has the side-effect of ensuring the messages are correct. This includes obsoleting the now-superfluous -k option in pmcstat. This change breaks the hwpmc ABI and will be followed by a bump to the pmc major version. Reviewed by: jhb, jkoshy, mhorne Differential Revision: https://reviews.freebsd.org/D40048
* pmc: Initialise and check the pm_flags field for CONFIGURELOGJessica Clarke2023-05-301-0/+6
| | | | | | | | | | Whilst the former is not breaking, the latter is, and so this will be followed by a bump to the pmc major version. This will allow the flags to actually be usable in future, as otherwise we cannot distinguish uninitialised stack junk from a deliberately-initialised value. Reviewed by: jhb, mhorne Differential Revision: https://reviews.freebsd.org/D40049
* spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSDWarner Losh2023-05-1221-21/+21
| | | | | | | | | The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of BSD-2-Clause. Discussed with: pfg MFC After: 3 days Sponsored by: Netflix
* hwpmc: pass pmc pointer to more class methodsMitchell Horne2023-05-0613-329/+87
| | | | | | | | | | | | In many cases this avoids an extra lookup, since the callers always have pm at hand. We can also eliminate several assertions, mostly for pm != NULL. The class methods are an internal interface, and the callers already handle such a scenario. No functional change intended. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39915
* hwpmc: unused/diagused annotations in tsc classMitchell Horne2023-05-061-19/+8
| | | | | | | | | These are preferred over casts to void. No functional change. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39914
* hwpmc: remove stub pmd_switch_{in,out} methodsMitchell Horne2023-05-064-64/+8
| | | | | | | | | | | Most platforms (non-x86) don't require these methods and implement stub versions. If we initialize the pmc_mdep structure to always point to the generic versions, then we can purge the duplicate stubs. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39913
* hwpmc: remove pmd_pcpu_{init,fini} callbacksMitchell Horne2023-05-063-11/+0
| | | | | | | | | These are unused on all platforms. Reviewed by: jkoshy, emaste MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39912
* hwpmc_logging: less macro magic for type namesMitchell Horne2023-05-061-24/+33
| | | | | | | | | | | | Provide the log type names in their entirely, rather than relying on the macro to prepend the prefix. This improves their searchability; for example, if I see PMCLOG_TYPE_PMCALLOCATE in libpmc I will now be able to find where that is emitted in the kernel with a simple grep. Reviewed by: jkoshy, emaste MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39911
* hwpmc: don't use deprecated copystr(9)Mitchell Horne2023-05-0610-78/+24
| | | | | | | | | | It is just wrapper around strlcpy(), but results in more complicated code. Clean this up to use strlcpy() or snprintf() as appropriate. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39910
* hwpmc: use kstack_contains()Mitchell Horne2023-05-063-69/+45
| | | | | | | | | | | | | | This existing helper function is preferable to the hand-rolled calculation of the kstack bounds. Make some small style improvements while here. Notably, rename every instance of "r", the return address, to "ra". Tidy the includes in the affected files. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39909
* hwpmc: simplify arm64 kernel stack unwindingMitchell Horne2023-05-061-21/+10
| | | | | | | | | | | Use the unwind_frame() function, which properly validates the frame pointer and uses ADDR_MAKE_CANONICAL() for the pc, required when PAC is enabled. Reviewed by: andrew, markj, jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39934
* hwpmc: trim obsolete Intel CPU and class defsMitchell Horne2023-05-061-1/+1
| | | | | | | | | No functional change. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39904
* pmc_events.h: event list formattingMitchell Horne2023-05-061-24/+24
| | | | | | | | | | Improve the legibility of the list. Bump overall indentation, fix some whitespace, and sort the IAF block. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39903
* pmc_events.h: update event list commentMitchell Horne2023-05-061-4/+4
| | | | | | | | | | | | This comment is no longer in sync with the contents of __PMC_EVENTS(). Update to reflect the removal of various Intel event definitions from this list; these event definitions now come from Linux and live in lib/libpmc/pmu-events/. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39902
* hwpmc: remove remaining UCP event definitionsMitchell Horne2023-05-062-33/+0
| | | | | | | | | | | | | | | | | | | | | | Although this block has remained in __PMC_EVENTS(), there is no handling of UCP in libpmc/libpmc.c, so it is not possible to select one of these events. It should therefore be impossible to trigger the code removed from ucp_start_pmc(). Note that the GQ_SNOOP_MSF MSR exists only for Nehalem and Westmere architectures, and the related events do not exist for later generations. The Uncore support in hwpmc has severely atrophied in general. We have uncore event definitions in pmu-events, but the kernel support was written against Intel Performance Measurement Architecture version 2, and is disabled for processor generations later than Westmere. Nehalem and Westmere lack uncore event definitions in pmu-events. I'd be surprised if Uncore support is usable on any machine in its current state. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39901
* hwpmc: drop vestigial IAP event definitionsMitchell Horne2023-05-061-16/+0
| | | | | | | | | These are maintained elsewhere. No functional change. Reviewed by: jkoshy MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39900
* hwpmc: Fix a typoMark Johnston2023-05-011-1/+1
| | | | MFC after: 1 week
* hwpmc: Don't wrap entire files in #ifdef DEV_ACPI.John Baldwin2023-03-012-14/+1
| | | | | | | | | | | A subsequent commit will instead use existing infrastructure to exclude the files from hwpmc.ko for non-ACPI builds. Note that the original commit left the files as optional in sys/conf/files.arm64. This reverts commit 751d88119fdc1dff71d1390c7768942a9b857bc6. Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D38736
* Fix the SPDX-License-Identifier in DMC-620 filesAndrew Turner2022-12-224-4/+4
| | | | | | | | | | | The SPDX-License-Identifier was wrong in the Arm CoreLink DMC-620 driver files. It used the incorrect FreeBSD variant of the BSD-2-Clause identifier. According to [1] all files should use BSD-2-Clause. [1] https://tools.spdx.org/app/check_license/ Reported by: emaste Sponsored by: Arm Ltd
* Fix the SPDX-License-Identifier in CMN-600 filesAndrew Turner2022-12-222-2/+2
| | | | | | | | | | | The SPDX-License-Identifier was wrong in the Arm CoreLink CMN-600 driver files. It used the incorrect FreeBSD variant of the BSD-2-Clause identifier. According to [1] all files should use BSD-2-Clause. [1] https://tools.spdx.org/app/check_license/ Reported by: emaste Sponsored by: Arm Ltd