xref: /aosp_15_r20/external/mesa3d/docs/ci/kernel.rst (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard WorkerUpreving Linux Kernel
2*61046927SAndroid Build Coastguard Worker=====================
3*61046927SAndroid Build Coastguard Worker
4*61046927SAndroid Build Coastguard WorkerOccasionally, the GitLab CI needs a Linux Kernel update to enable new kernel
5*61046927SAndroid Build Coastguard Workerfeatures, device drivers, bug fixes etc to CI jobs.
6*61046927SAndroid Build Coastguard WorkerKernel uprevs in GitLab CI are relatively simple, but prone to lots of
7*61046927SAndroid Build Coastguard Workerside-effects since many devices from different platforms are involved in the
8*61046927SAndroid Build Coastguard Workerpipeline.
9*61046927SAndroid Build Coastguard Worker
10*61046927SAndroid Build Coastguard WorkerKernel repository
11*61046927SAndroid Build Coastguard Worker-----------------
12*61046927SAndroid Build Coastguard Worker
13*61046927SAndroid Build Coastguard WorkerThe Linux Kernel used in the GitLab CI is stored at the following repository:
14*61046927SAndroid Build Coastguard Workerhttps://gitlab.freedesktop.org/gfx-ci/linux
15*61046927SAndroid Build Coastguard Worker
16*61046927SAndroid Build Coastguard WorkerIt is common that Mesa kernel brings some patches that were not merged on the
17*61046927SAndroid Build Coastguard WorkerLinux mainline, that is why Mesa has its own kernel version which should be used
18*61046927SAndroid Build Coastguard Workeras the base for newer kernels.
19*61046927SAndroid Build Coastguard Worker
20*61046927SAndroid Build Coastguard WorkerSo, one should base the kernel uprev from the last tag used in the Mesa CI,
21*61046927SAndroid Build Coastguard Workerplease refer to ``.gitlab-ci/image-tags.yml`` ``KERNEL_TAG`` variable.
22*61046927SAndroid Build Coastguard WorkerEvery tag has a standard naming: ``vX.YZ-for-mesa-ci-<commit_short_SHA>``, which
23*61046927SAndroid Build Coastguard Workercan be created via the command:
24*61046927SAndroid Build Coastguard Worker
25*61046927SAndroid Build Coastguard Worker:code:`git tag vX.YZ-for-mesa-ci-$(git rev-parse --short HEAD)`
26*61046927SAndroid Build Coastguard Worker
27*61046927SAndroid Build Coastguard WorkerBuilding Kernel
28*61046927SAndroid Build Coastguard Worker---------------
29*61046927SAndroid Build Coastguard Worker
30*61046927SAndroid Build Coastguard WorkerThe kernel files are loaded from the artifacts uploaded to S3 from gfx-ci/linux.
31*61046927SAndroid Build Coastguard Worker
32*61046927SAndroid Build Coastguard WorkerUpdating Kconfigs
33*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^
34*61046927SAndroid Build Coastguard Worker
35*61046927SAndroid Build Coastguard WorkerWhen a Kernel uprev happens, it is worth compiling and cross-compiling the
36*61046927SAndroid Build Coastguard WorkerKernel locally, in order to update the Kconfigs accordingly.  Remember that the
37*61046927SAndroid Build Coastguard Workerresulting Kconfig is a merge between *Mesa CI Kconfig* and *Linux tree
38*61046927SAndroid Build Coastguard Workerdefconfig* made via ``merge_config.sh`` script located at Linux Kernel tree.
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard WorkerKconfigs location
41*61046927SAndroid Build Coastguard Worker"""""""""""""""""
42*61046927SAndroid Build Coastguard Worker
43*61046927SAndroid Build Coastguard Worker+------------+------------------------------------------------------+-------------------------------------+
44*61046927SAndroid Build Coastguard Worker| Platform   | Mesa CI Kconfig location                             | Linux tree defconfig                |
45*61046927SAndroid Build Coastguard Worker+============+======================================================+=====================================+
46*61046927SAndroid Build Coastguard Worker| arm        | kernel/configs/mesa3d-ci_arm.config\@gfx-ci/linux    | arch/arm/configs/multi_v7_defconfig |
47*61046927SAndroid Build Coastguard Worker+------------+------------------------------------------------------+-------------------------------------+
48*61046927SAndroid Build Coastguard Worker| arm64      | kernel/configs/mesa3d-ci_arm64.config\@gfx-ci/linux  | arch/arm64/configs/defconfig        |
49*61046927SAndroid Build Coastguard Worker+------------+------------------------------------------------------+-------------------------------------+
50*61046927SAndroid Build Coastguard Worker| x86-64     | kernel/configs/mesa3d-ci_x86_64.config\@gfx-ci/linux | arch/x86/configs/x86_64_defconfig   |
51*61046927SAndroid Build Coastguard Worker+------------+------------------------------------------------------+-------------------------------------+
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard WorkerUpdating image tags
54*61046927SAndroid Build Coastguard Worker-------------------
55*61046927SAndroid Build Coastguard Worker
56*61046927SAndroid Build Coastguard WorkerEvery kernel uprev should update 3 image tags, located at two files.
57*61046927SAndroid Build Coastguard Worker
58*61046927SAndroid Build Coastguard Worker:code:`.gitlab-ci/container/gitlab-ci.yml` tag
59*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
60*61046927SAndroid Build Coastguard Worker- **KERNEL_URL** for the location of the new kernel
61*61046927SAndroid Build Coastguard Worker
62*61046927SAndroid Build Coastguard Worker:code:`.gitlab-ci/image-tags.yml` tags
63*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
64*61046927SAndroid Build Coastguard Worker- **KERNEL_ROOTFS_TAG** to rebuild rootfs with the new kernel
65*61046927SAndroid Build Coastguard Worker- **DEBIAN_X86_TEST_GL_TAG** to ensure that the new rootfs is being used by the GitLab x86 jobs
66*61046927SAndroid Build Coastguard Worker
67*61046927SAndroid Build Coastguard WorkerDevelopment routine
68*61046927SAndroid Build Coastguard Worker-------------------
69*61046927SAndroid Build Coastguard Worker
70*61046927SAndroid Build Coastguard Worker1. Compile the newer kernel locally for each platform.
71*61046927SAndroid Build Coastguard Worker2. Compile device trees for ARM platforms
72*61046927SAndroid Build Coastguard Worker3. Update Kconfigs. Are new Kconfigs necessary? Is CONFIG_XYZ_BLA deprecated? Does the ``merge_config.sh`` override an important config?
73*61046927SAndroid Build Coastguard Worker4. Push a new development branch to `Kernel repository`_ based on the latest kernel tag used in GitLab CI
74*61046927SAndroid Build Coastguard Worker5. Hack ``build-kernel.sh`` script to clone kernel from your development branch
75*61046927SAndroid Build Coastguard Worker6. Update image tags. See `Updating image tags`_
76*61046927SAndroid Build Coastguard Worker7. Run the entire CI pipeline, all the automatic jobs should be green. If some job is red or taking too long, you will need to investigate it and probably ask for help.
77*61046927SAndroid Build Coastguard Worker
78*61046927SAndroid Build Coastguard WorkerWhen the Kernel uprev is stable
79*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
80*61046927SAndroid Build Coastguard Worker
81*61046927SAndroid Build Coastguard Worker1. Push a new tag to Mesa CI `Kernel repository`_
82*61046927SAndroid Build Coastguard Worker2. Update KERNEL_URL ``debian/x86_test-gl`` job definition
83*61046927SAndroid Build Coastguard Worker3. Open a merge request, if it is not opened yet
84*61046927SAndroid Build Coastguard Worker
85*61046927SAndroid Build Coastguard WorkerTips and Tricks
86*61046927SAndroid Build Coastguard Worker---------------
87*61046927SAndroid Build Coastguard Worker
88*61046927SAndroid Build Coastguard WorkerCompare pipelines
89*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^
90*61046927SAndroid Build Coastguard Worker
91*61046927SAndroid Build Coastguard WorkerTo have the most confidence that a kernel uprev does not break anything in Mesa,
92*61046927SAndroid Build Coastguard Workerit is suggested that one runs the entire CI pipeline to check if the update affected the manual CI jobs.
93*61046927SAndroid Build Coastguard Worker
94*61046927SAndroid Build Coastguard WorkerStep-by-step
95*61046927SAndroid Build Coastguard Worker""""""""""""
96*61046927SAndroid Build Coastguard Worker
97*61046927SAndroid Build Coastguard Worker1. Create a local branch in the same git ref (should be the main branch) before branching to the kernel uprev kernel.
98*61046927SAndroid Build Coastguard Worker2. Push this test branch
99*61046927SAndroid Build Coastguard Worker3. Run the entire pipeline against the test branch, even the manual jobs
100*61046927SAndroid Build Coastguard Worker4. Now do the same for the kernel uprev branch
101*61046927SAndroid Build Coastguard Worker5. Compare the job results. If a CI job turned red on your uprev branch, it means that the kernel update broke the test. Otherwise, it should be fine.
102*61046927SAndroid Build Coastguard Worker
103*61046927SAndroid Build Coastguard WorkerBare-metal custom kernels
104*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^
105*61046927SAndroid Build Coastguard Worker
106*61046927SAndroid Build Coastguard WorkerSome CI jobs have support to plug in a custom kernel by simply changing a variable.
107*61046927SAndroid Build Coastguard WorkerThis is great, since rebuilding the kernel and rootfs may takes dozens of minutes.
108*61046927SAndroid Build Coastguard Worker
109*61046927SAndroid Build Coastguard WorkerFor example, Freedreno jobs ``gitlab.yml`` manifest support a variable named
110*61046927SAndroid Build Coastguard Worker``BM_KERNEL``. If one puts a gz-compressed kernel URL there, the job will use that
111*61046927SAndroid Build Coastguard Workerkernel to boot the Freedreno bare-metal devices. The same works for ``BM_DTB`` in
112*61046927SAndroid Build Coastguard Workerthe case of device tree binaries.
113*61046927SAndroid Build Coastguard Worker
114*61046927SAndroid Build Coastguard WorkerCareful reading of the job logs
115*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
116*61046927SAndroid Build Coastguard Worker
117*61046927SAndroid Build Coastguard WorkerSometimes a job may turn to red for reasons unrelated to the kernel update, e.g.
118*61046927SAndroid Build Coastguard WorkerLAVA ``tftp`` timeout, problems with the freedesktop servers etc.
119*61046927SAndroid Build Coastguard WorkerSo it is important to see the reason why the job turned red, and retry it if an
120*61046927SAndroid Build Coastguard Workerinfrastructure error has happened.
121