Bonjour la Guilde !
J'ai un petit problème pour lequel je pense que l'aide d'un guru du
noyau Linux pourrait m'être utile... Il s'agit d'un warning un peu
inquiétant que j'ai rencontré en bootant Linux 6.5 sur un système
embarqué. Le système marche, donc ça n'a pas l'air critique, mais
j'aimerais savoir si je dois quand-même m'inquiéter et, le cas échéant,
comment gérer ça.
Pour le contexte, j'ai un SoM Acme Acqua[1] qui marche bien avec
Buildroot 2023.08[2]. J'ai voulu tester le dernier noyau stable sur
cette carte et j'ai vu, vers le début du boot, ce message :
------------[ cut here ]------------
WARNING: CPU: 0 PID: 0 at init/main.c:992 start_kernel+0x458/0x564
Interrupts were enabled early
CPU: 0 PID: 0 Comm: swapper Not tainted 6.5.2 #1
Hardware name: Atmel SAMA5
unwind_backtrace from show_stack+0x10/0x14
show_stack from dump_stack_lvl+0x24/0x2c
dump_stack_lvl from __warn+0x84/0xc4
__warn from warn_slowpath_fmt+0x98/0xc8
warn_slowpath_fmt from start_kernel+0x458/0x564
start_kernel from 0x0
---[ end trace 0000000000000000 ]---
Je trouve ça inquiétant car voir un backtrace au boot n'est pas banal.
De plus, le commit du noyau qui permet à ce message d'être affiché
semble impliquer que la situation est à peu près aussi problématique
qu'un meurtre sanguinaire[3] :
init: scream bloody murder if interrupts are enabled too early
Le problème ne semble pas spécifique à cette carte: je peux reproduire
le message avec un système virtuel basé sur qemu :
wget https://buildroot.org/downloads/buildroot-2023.08.tar.xz
tar -xJf buildroot-2023.08.tar.xz
cd buildroot-2023.08
sed -Ei -e 's/(LINUX_HEADERS_CUSTOM)_6_1=y/\1_6_5=y/' \
-e 's/(KERNEL_CUSTOM_VERSION_VALUE)="6.1.26"/\1="6.5.3"/' \
-e 's|(KERNEL_INTREE_DTS_NAME)="(versatile-pb)"|\1="arm/\2"|' \
configs/qemu_arm_versatile_defconfig
make qemu_arm_versatile_defconfig
make
output/images/start-qemu.sh --serial-only # arrêter avec Ctrl-a x
J'ai essayé un `git bisect` sur le noyau, et ça me dit que le coupable
est le commit cfeb6ae8bcb9[4], introduit entre v6.5-rc7 et v6.5 :
maple_tree: disable mas_wr_append() when other readers are possible
Bizarrement, ça ne semble avoir aucun rapport avec les interruptions...
Questions :
1. Est-ce aussi inquiétant que ça en a l'air ?
2. Ai-je découvert un bogue du noyau ?
3. Le cas échéant, quel est le canal approprié pour le faire remonter ?
Merci à ceux qui m'ont lu jusqu'ici !
Edgar.
[1]
https://www.acmesystems.it/acqua
[2]
https://buildroot.org/
[3]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f91eb62f71b3
[4]
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cfeb6ae8bcb9