brintos

brintos / linux-shallow public Read only

0
0
Text · 2.7 KiB · 7147b1b Raw
74 lines · plain
1Why we want a copy of kernel headers in tools?2==============================================3 4There used to be no copies, with tools/ code using kernel headers5directly. From time to time tools/perf/ broke due to legitimate kernel6hacking. At some point Linus complained about such direct usage. Then we7adopted the current model.8 9The way these headers are used in perf are not restricted to just10including them to compile something.11 12There are sometimes used in scripts that convert defines into string13tables, etc, so some change may break one of these scripts, or new MSRs14may use some different #define pattern, etc.15 16E.g.:17 18  $ ls -1 tools/perf/trace/beauty/*.sh | head -519  tools/perf/trace/beauty/arch_errno_names.sh20  tools/perf/trace/beauty/drm_ioctl.sh21  tools/perf/trace/beauty/fadvise.sh22  tools/perf/trace/beauty/fsconfig.sh23  tools/perf/trace/beauty/fsmount.sh24  $25  $ tools/perf/trace/beauty/fadvise.sh26  static const char *fadvise_advices[] = {27        [0] = "NORMAL",28        [1] = "RANDOM",29        [2] = "SEQUENTIAL",30        [3] = "WILLNEED",31        [4] = "DONTNEED",32        [5] = "NOREUSE",33  };34  $35 36The tools/perf/check-headers.sh script, part of the tools/ build37process, points out changes in the original files.38 39So its important not to touch the copies in tools/ when doing changes in40the original kernel headers, that will be done later, when41check-headers.sh inform about the change to the perf tools hackers.42 43Another explanation from Ingo Molnar:44It's better than all the alternatives we tried so far:45 46 - Symbolic links and direct #includes: this was the original approach but47   was pushed back on from the kernel side, when tooling modified the48   headers and broke them accidentally for kernel builds.49 50 - Duplicate self-defined ABI headers like glibc: double the maintenance51   burden, double the chance for mistakes, plus there's no tech-driven52   notification mechanism to look at new kernel side changes.53 54What we are doing now is a third option:55 56 - A software-enforced copy-on-write mechanism of kernel headers to57   tooling, driven by non-fatal warnings on the tooling side build when58   kernel headers get modified:59 60    Warning: Kernel ABI header differences:61      diff -u tools/include/uapi/drm/i915_drm.h include/uapi/drm/i915_drm.h62      diff -u tools/include/uapi/linux/fs.h include/uapi/linux/fs.h63      diff -u tools/include/uapi/linux/kvm.h include/uapi/linux/kvm.h64      ...65 66   The tooling policy is to always pick up the kernel side headers as-is,67   and integate them into the tooling build. The warnings above serve as a68   notification to tooling maintainers that there's changes on the kernel69   side.70 71We've been using this for many years now, and it might seem hacky, but72works surprisingly well.73 74