From: Ben Hutchings Date: Sun, 25 Aug 2019 13:49:41 +0100 Subject: tools/perf: pmu-events: Fix reproducibility Forwarded: https://lore.kernel.org/lkml/20190825131329.naqzd5kwg7mw5d3f@decadent.org.uk/T/#u jevents.py enumerates files and outputs the corresponding C structs in the order they are found. This makes it sensitive to directory ordering, so that the perf executable is not reproducible. To avoid this, sort the entries returned by os.scandir() before processing them. References: https://tests.reproducible-builds.org/debian/dbdtxt/bullseye/i386/linux_4.19.37-6.diffoscope.txt.gz Signed-off-by: Ben Hutchings --- --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -663,7 +663,7 @@ def main() -> None: def ftw(path: str, parents: Sequence[str], action: Callable[[Sequence[str], os.DirEntry], None]) -> None: """Replicate the directory/file walking behavior of C's file tree walk.""" - for item in os.scandir(path): + for item in sorted(os.scandir(path), key=(lambda item: item.name)): action(parents, item) if item.is_dir(): ftw(item.path, parents + [item.name], action)