Files
cubelinux-kernel/tools/perf/pmu-events/models.py
T
Greg Kroah-Hartman 598cf27219 Linux 6.19.3
Link: https://lore.kernel.org/r/20260217200002.683975158@linuxfoundation.org
Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com>
Tested-by: Peter Schneider <pschneider1968@googlemail.com>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Tested-by: Salvatore Bonaccorso <carnil@debian.org>
Tested-by: Brett A C Sheffield <bacs@librecast.net>
Tested-by: Mark Brown <broonie@kernel.org>
Tested-by: Luna Jernberg <droidbittin@gmail.com>
Tested-by: Ronald Warsow <rwarsow@gmx.de>
Tested-by: Justin M. Forbes <jforbes@fedoraproject.org>
Tested-by: Ron Economos <re@w6rz.net>
Tested-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2026-02-19 16:33:27 +01:00

74 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python3
# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
"""List model names from mapfile.csv files."""
import argparse
import csv
import os
import re
from typing import List
def main() -> None:
def dir_path(path: str) -> str:
"""Validate path is a directory for argparse."""
if os.path.isdir(path):
return path
raise argparse.ArgumentTypeError(f'\'{path}\' is not a valid directory')
def find_archs(start_dir: str, arch: str) -> List[str]:
archs = []
for item in os.scandir(start_dir):
if not item.is_dir():
continue
if arch in (item.name, 'all'):
archs.append(item.name)
if len(archs) < 1:
raise IOError(f'Missing architecture directory \'{arch}\'')
return archs
def find_mapfiles(start_dir: str, archs: List[str]) -> List[str]:
result = []
for arch in archs:
for item in os.scandir(f'{start_dir}/{arch}'):
if item.is_dir():
continue
if item.name == 'mapfile.csv':
result.append(f'{start_dir}/{arch}/mapfile.csv')
return result
def find_cpuids(mapfiles: List[str], cpuids: str) -> List[str]:
result = []
for mapfile in mapfiles:
with open(mapfile, encoding='utf-8') as csvfile:
first = False
table = csv.reader(csvfile)
for row in table:
if not first or len(row) == 0 or row[0].startswith('#'):
first = True
continue
# Python regular expressions don't handle xdigit.
regex = row[0].replace('[[:xdigit:]]', '[0-9a-fA-F]')
for cpuid in cpuids.split(','):
if re.match(regex, cpuid):
result.append(row[2])
return result
ap = argparse.ArgumentParser()
ap.add_argument('arch', help='Architecture name like x86')
ap.add_argument('cpuid', default='all', help='List of cpuids to convert to model names')
ap.add_argument(
'starting_dir',
type=dir_path,
help='Root of tree containing architecture directories containing json files'
)
args = ap.parse_args()
archs = find_archs(args.starting_dir, args.arch)
mapfiles = find_mapfiles(args.starting_dir, archs)
models = find_cpuids(mapfiles, args.cpuid)
print(','.join(models))
if __name__ == '__main__':
main()