December 2021 ClangBuiltLinux Work

Occasionally, I will forget to link something from the mailing list in this post. To see my full mailing list activity (patches, reviews, and reports), you can view it on lore.kernel.org.

Linux kernel patches

  • Android patches: Android is one of the biggest downstream consumers of our work. Making sure that it stays working is incredibly important so that it can reach real users.

  • Build errors: This is a collection of patches that either fix build errors specific to clang or generally, in certain scenarios. We are slowly getting to the point where there are few build errors that are clang specific, which is good, as breakage is more likely to be dealt with by other people so that we can focus on other issues.

    • MIPS: Loongson64: Use three arguments for slti (v1, v2)

    • MIPS: Loongson2ef: Remove unnecessary {as,cc}-option calls (v1)

    • x86/extable: Fix extable_type_reg macro with Clang LTO (v1)

    • Fix build errors with do_exit() to make_task_dead() transition (v1)

    • iwlwifi: mvm: Use div_s64 instead of do_div in iwl_mvm_ftm_rtt_smoothing() (v1)

  • Other fixes: These are fixes that do not fit into a specific category. The first one was noticed while I was building kernels on a powerful arm64 server and the second came up during testing another patch.

    • x86/boot/compressed: Move CLANG_FLAGS to beginning of KBUILD_CFLAGS (v1, v2)

    • ARM: davinci: da850-evm: Avoid NULL pointer dereference (v1)

  • -Wbitwise-instead-of-logical: A new warning in LLVM exposed a few places in the kernel where bitwise operations were being used with boolean expressions with side effects, which may be undesirable. This was one of the last ones in the tree, which is important for keeping the warning enabled.

    • soc/tegra: fuse: Fix bitwise vs. logical OR warning (v2)
  • -Wframe-larger-than=: The kernel cares about stack usage quite a bit so it enables -Wframe-larger-than= to warn about large amounts of stack usage. These warnings have been present for a while but until -Werror was enabled, there were often larger fires to fight, as these warnings are usually in configurations that are not going to run in the real world. Getting them cleaned up now is very important for Android so that they can enable -Werror for all configurations that they care about.

    • staging: greybus: fix stack size warning with UBSAN (v2)

    • cxl/core: Remove cxld_const_init in cxl_decoder_alloc() (v1)

  • -Wtypedef-redefinition: Trying to typedef something twice is almost always a bug. GCC does not warn on this but clang does so we need to clean these warnings up.

    • media: atomisp: Do not define input_system_cfg2400_t twice (v1)

LLVM patches

Patch review and input

For the next sections, I link directly to my first response in the thread when possible but there are times where the link is to the main post. My responses can be seen inline by going to the bottom of the thread and clicking on my name.

Reviewing patches that are submitted is incredibly important, as it helps ensure good code quality due to catching mistakes before the patches get accepted and it can help get patches accepted faster, as some maintainers will blindly pick up patches that have been reviewed by someone that they trust.

Issue triage and reporting

The unfortunate thing about working at the intersection of two projects is we will often find bugs that are not strictly related to the project, which require some triage and reporting back to the original author of the breakage so that they can be fixed and not impact our own testing. Some of these bugs fall into that category while others are issues strictly related to this project.

Tooling improvements

Behind the scenes

  • Every day that there is a new linux-next release, I rebase and build a few different kernel trees then boot and runtime test them on several different machines, including a Raspberry Pi 3 and 4, HP desktop, ASUS laptop, and Hyper-V and VMware platforms on my workstation. This is not always visible because I do not report anything unless there is something broken but it can take up to a few hours each day, depending on the amount of churn and issues uncovered.

  • As I brought up last month, I finalized containerizing certain aspects of my environment scripts so that no matter what machine I am working on, I can have consistent access to recent versions of compilers and other development tools, independent of the host operating system. I believe this is extremely important for reproducing issues as well as avoiding issues such as broken dependencies or upgrades because all the tools are in a container, which is a lot easier to reset and start over from than the host operating system.

  • LLVM moved from bugs.llvm.org to GitHub Issues, which necessitated updating any LLVM bug links in our issue tracker (similar to what I did for Linux kernel mailing list links in October). To ensure this does not happen again in the future, I documented best practices for links in our wiki.

Special thanks to:

comments powered by Disqus