tools/perf: pmu-events: Fix reproducibility
authorBen Hutchings <ben@decadent.org.uk>
Sun, 25 Aug 2019 12:49:41 +0000 (13:49 +0100)
committerSalvatore Bonaccorso <carnil@debian.org>
Mon, 8 May 2023 20:16:50 +0000 (21:16 +0100)
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 <ben@decadent.org.uk>
Gbp-Pq: Topic bugfix/all
Gbp-Pq: Name tools-perf-pmu-events-fix-reproducibility.patch

tools/perf/pmu-events/jevents.py

index 0daa3e007528f2d92763d2f2142c1be2cb894c75..96c7ea04013928306bef872af8781bd7a74cd256 100755 (executable)
@@ -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)