Wind River Support Network


LIN1021-989 : qemu: guest kernel panic due to deadlock with host

Created: Jul 28, 2021    Updated: Sep 8, 2021
Resolved Date: Aug 9, 2021
Found In Version:
Fix Version:
Severity: Standard
Applicable for: Wind River Linux LTS 21
Component/s: Userspace


Avoid  guest deadlocks with heavy I/O, some of the threads are deadlocked on /var/db/login-locks,  some process inside the OS has accessed this file and not released it because of which the deadlock has happened.

Steps to Reproduce

Build LTS19 OVP Host image,

LTS19 RCPL0015

Setup Project:

$ ./wrlinux-x/ --dl-layers --distros wrlinux-ovp --machines intel-x86-64 --templates feature/initramfs,feature/kdump,feature/kexec,feature/sysklogd,feature/dpdk,feature/package-management 

Source bitbake build env.

$ . ./environment-setup-x86_64-wrlinuxsdk-linux

$ . ./oe-init-build-env

Set PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-rt" in conf/local.conf

Build images.

$ bitbake wrlinux-image-ovp-kvm

-> Deploy LTS19 OVP Host image to Intel-x86-64 target and boot.


-> On LTS19 Host OS console : 

1) Download FreeBSD-11.2-RELEASE-amd64.qcow2 from FreeBSD website and convert it to raw image :  


root@intel-x86-64:~# qemu-img convert -p -f qcow2 -O raw -o preallocation=off FreeBSD-11.2-RELEASE-amd64.qcow2 FreeBSD-11.2-RELEASE-amd64.img

2) Use attached freebsd_11_2_reproducer.xml file to create a guest VM using virsh.

root@intel-x86-64:~# uname -a
Linux intel-x86-64 5.2.60-rt15-yocto-preempt-rt #1 SMP PREEMPT RT Wed Feb 3 15:42:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

root@intel-x86-64:~# virsh create freebsd_11_2_reproducer.xml

virsh list
 Id Name State
 1 vjunos0 running


3) Access guest VM serial console : 

root@intel-x86-64:~# virsh console vjunos0

-> Once in Guest VM, use below script to reproduce the issue.

root@freebsd:~ # uname -a
FreeBSD freebsd 11.2-RELEASE FreeBSD 11.2-RELEASE #0 r335510: Fri Jun 22 04:32:14 UTC 2018 amd64
root@freebsd:~ #

root@freebsd:~ # cat

helper() {
 if test -n "${child}"; then
 kill -9 ${child}
 exit 1

sysctl debug.deadlkres.blktime_threshold=60
sysctl debug.deadlkres.slptime_threshold=60

trap 'helper' SIGINT

( iter=1; while true; do echo "Iteration: ${iter}"; iter=$(( iter + 1 )); dd if=/dev/zero of=/root/zero.bin bs=8M count=128; sleep 1; done ) &

while true; do
 ls -l /root/zero.bin
 sleep 5
root@freebsd:~ #
root@freebsd:~ # chmod a+x
root@freebsd:~ # ./
Live chat