~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/include/uapi/README

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/include/uapi/README (Architecture sparc) and /tools/include/uapi/README (Architecture mips)


  1 Why we want a copy of kernel headers in tools?      1 Why we want a copy of kernel headers in tools?
  2 ==============================================      2 ==============================================
  3                                                     3 
  4 There used to be no copies, with tools/ code u      4 There used to be no copies, with tools/ code using kernel headers
  5 directly. From time to time tools/perf/ broke       5 directly. From time to time tools/perf/ broke due to legitimate kernel
  6 hacking. At some point Linus complained about       6 hacking. At some point Linus complained about such direct usage. Then we
  7 adopted the current model.                          7 adopted the current model.
  8                                                     8 
  9 The way these headers are used in perf are not      9 The way these headers are used in perf are not restricted to just
 10 including them to compile something.               10 including them to compile something.
 11                                                    11 
 12 There are sometimes used in scripts that conve     12 There are sometimes used in scripts that convert defines into string
 13 tables, etc, so some change may break one of t     13 tables, etc, so some change may break one of these scripts, or new MSRs
 14 may use some different #define pattern, etc.       14 may use some different #define pattern, etc.
 15                                                    15 
 16 E.g.:                                              16 E.g.:
 17                                                    17 
 18   $ ls -1 tools/perf/trace/beauty/*.sh | head      18   $ ls -1 tools/perf/trace/beauty/*.sh | head -5
 19   tools/perf/trace/beauty/arch_errno_names.sh      19   tools/perf/trace/beauty/arch_errno_names.sh
 20   tools/perf/trace/beauty/drm_ioctl.sh             20   tools/perf/trace/beauty/drm_ioctl.sh
 21   tools/perf/trace/beauty/fadvise.sh               21   tools/perf/trace/beauty/fadvise.sh
 22   tools/perf/trace/beauty/fsconfig.sh              22   tools/perf/trace/beauty/fsconfig.sh
 23   tools/perf/trace/beauty/fsmount.sh               23   tools/perf/trace/beauty/fsmount.sh
 24   $                                                24   $
 25   $ tools/perf/trace/beauty/fadvise.sh             25   $ tools/perf/trace/beauty/fadvise.sh
 26   static const char *fadvise_advices[] = {         26   static const char *fadvise_advices[] = {
 27         [0] = "NORMAL",                            27         [0] = "NORMAL",
 28         [1] = "RANDOM",                            28         [1] = "RANDOM",
 29         [2] = "SEQUENTIAL",                        29         [2] = "SEQUENTIAL",
 30         [3] = "WILLNEED",                          30         [3] = "WILLNEED",
 31         [4] = "DONTNEED",                          31         [4] = "DONTNEED",
 32         [5] = "NOREUSE",                           32         [5] = "NOREUSE",
 33   };                                               33   };
 34   $                                                34   $
 35                                                    35 
 36 The tools/perf/check-headers.sh script, part o     36 The tools/perf/check-headers.sh script, part of the tools/ build
 37 process, points out changes in the original fi     37 process, points out changes in the original files.
 38                                                    38 
 39 So its important not to touch the copies in to     39 So its important not to touch the copies in tools/ when doing changes in
 40 the original kernel headers, that will be done     40 the original kernel headers, that will be done later, when
 41 check-headers.sh inform about the change to th     41 check-headers.sh inform about the change to the perf tools hackers.
 42                                                    42 
 43 Another explanation from Ingo Molnar:              43 Another explanation from Ingo Molnar:
 44 It's better than all the alternatives we tried     44 It's better than all the alternatives we tried so far:
 45                                                    45 
 46  - Symbolic links and direct #includes: this w     46  - Symbolic links and direct #includes: this was the original approach but
 47    was pushed back on from the kernel side, wh     47    was pushed back on from the kernel side, when tooling modified the
 48    headers and broke them accidentally for ker     48    headers and broke them accidentally for kernel builds.
 49                                                    49 
 50  - Duplicate self-defined ABI headers like gli     50  - Duplicate self-defined ABI headers like glibc: double the maintenance
 51    burden, double the chance for mistakes, plu     51    burden, double the chance for mistakes, plus there's no tech-driven
 52    notification mechanism to look at new kerne     52    notification mechanism to look at new kernel side changes.
 53                                                    53 
 54 What we are doing now is a third option:           54 What we are doing now is a third option:
 55                                                    55 
 56  - A software-enforced copy-on-write mechanism     56  - A software-enforced copy-on-write mechanism of kernel headers to
 57    tooling, driven by non-fatal warnings on th     57    tooling, driven by non-fatal warnings on the tooling side build when
 58    kernel headers get modified:                    58    kernel headers get modified:
 59                                                    59 
 60     Warning: Kernel ABI header differences:        60     Warning: Kernel ABI header differences:
 61       diff -u tools/include/uapi/drm/i915_drm.     61       diff -u tools/include/uapi/drm/i915_drm.h include/uapi/drm/i915_drm.h
 62       diff -u tools/include/uapi/linux/fs.h in     62       diff -u tools/include/uapi/linux/fs.h include/uapi/linux/fs.h
 63       diff -u tools/include/uapi/linux/kvm.h i     63       diff -u tools/include/uapi/linux/kvm.h include/uapi/linux/kvm.h
 64       ...                                          64       ...
 65                                                    65 
 66    The tooling policy is to always pick up the     66    The tooling policy is to always pick up the kernel side headers as-is,
 67    and integate them into the tooling build. T     67    and integate them into the tooling build. The warnings above serve as a
 68    notification to tooling maintainers that th     68    notification to tooling maintainers that there's changes on the kernel
 69    side.                                           69    side.
 70                                                    70 
 71 We've been using this for many years now, and      71 We've been using this for many years now, and it might seem hacky, but
 72 works surprisingly well.                           72 works surprisingly well.
 73                                                    73 
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php