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