perf tools: Add tools/include/uapi/README
Write down the reason why we keep a copy of headers to the README file instead of adding it to every commit messages. Suggested-by: Jani Nikula <jani.nikula@linux.intel.com> Original-by: Arnaldo Carvalho de Melo <acme@kernel.org> Original-by: Ingo Molnar <mingo@kernel.org> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
parent
de9c2c66ad
commit
fbc05142cc
73
tools/include/uapi/README
Normal file
73
tools/include/uapi/README
Normal file
@ -0,0 +1,73 @@
|
||||
Why we want a copy of kernel headers in tools?
|
||||
==============================================
|
||||
|
||||
There used to be no copies, with tools/ code using kernel headers
|
||||
directly. From time to time tools/perf/ broke due to legitimate kernel
|
||||
hacking. At some point Linus complained about such direct usage. Then we
|
||||
adopted the current model.
|
||||
|
||||
The way these headers are used in perf are not restricted to just
|
||||
including them to compile something.
|
||||
|
||||
There are sometimes used in scripts that convert defines into string
|
||||
tables, etc, so some change may break one of these scripts, or new MSRs
|
||||
may use some different #define pattern, etc.
|
||||
|
||||
E.g.:
|
||||
|
||||
$ ls -1 tools/perf/trace/beauty/*.sh | head -5
|
||||
tools/perf/trace/beauty/arch_errno_names.sh
|
||||
tools/perf/trace/beauty/drm_ioctl.sh
|
||||
tools/perf/trace/beauty/fadvise.sh
|
||||
tools/perf/trace/beauty/fsconfig.sh
|
||||
tools/perf/trace/beauty/fsmount.sh
|
||||
$
|
||||
$ tools/perf/trace/beauty/fadvise.sh
|
||||
static const char *fadvise_advices[] = {
|
||||
[0] = "NORMAL",
|
||||
[1] = "RANDOM",
|
||||
[2] = "SEQUENTIAL",
|
||||
[3] = "WILLNEED",
|
||||
[4] = "DONTNEED",
|
||||
[5] = "NOREUSE",
|
||||
};
|
||||
$
|
||||
|
||||
The tools/perf/check-headers.sh script, part of the tools/ build
|
||||
process, points out changes in the original files.
|
||||
|
||||
So its important not to touch the copies in tools/ when doing changes in
|
||||
the original kernel headers, that will be done later, when
|
||||
check-headers.sh inform about the change to the perf tools hackers.
|
||||
|
||||
Another explanation from Ingo Molnar:
|
||||
It's better than all the alternatives we tried so far:
|
||||
|
||||
- Symbolic links and direct #includes: this was the original approach but
|
||||
was pushed back on from the kernel side, when tooling modified the
|
||||
headers and broke them accidentally for kernel builds.
|
||||
|
||||
- Duplicate self-defined ABI headers like glibc: double the maintenance
|
||||
burden, double the chance for mistakes, plus there's no tech-driven
|
||||
notification mechanism to look at new kernel side changes.
|
||||
|
||||
What we are doing now is a third option:
|
||||
|
||||
- A software-enforced copy-on-write mechanism of kernel headers to
|
||||
tooling, driven by non-fatal warnings on the tooling side build when
|
||||
kernel headers get modified:
|
||||
|
||||
Warning: Kernel ABI header differences:
|
||||
diff -u tools/include/uapi/drm/i915_drm.h include/uapi/drm/i915_drm.h
|
||||
diff -u tools/include/uapi/linux/fs.h include/uapi/linux/fs.h
|
||||
diff -u tools/include/uapi/linux/kvm.h include/uapi/linux/kvm.h
|
||||
...
|
||||
|
||||
The tooling policy is to always pick up the kernel side headers as-is,
|
||||
and integate them into the tooling build. The warnings above serve as a
|
||||
notification to tooling maintainers that there's changes on the kernel
|
||||
side.
|
||||
|
||||
We've been using this for many years now, and it might seem hacky, but
|
||||
works surprisingly well.
|
||||
|
Loading…
Reference in New Issue
Block a user