Hi, George, On Fri, Aug 7, 2026 at 6:39 PM George Guo <[email protected]> wrote: > > From: George Guo <[email protected]> > > Add loongarch.conf to configure QEMU's LoongArch virtual machine (VM) > with a la464 CPU, enable the 8250 serial console, and set the kernel > image to vmlinux.efi. Extend vmtest.sh to recognise loongarch64 as a > supported target and map it to the 'loongarch' kernel arch name. > > QEMU's LoongArch VM provides no ACPI tables and relies on FDT to > describe hardware. Without 'earlycon' on the kernel command line, the > FDT is not scanned for a console UART, no output reaches the console, > and vmtest.sh's console log stays empty causing the test to always > fail. Add 'earlycon' to KERNEL_CMDLINE in loongarch.conf. > > QEMU's LoongArch VM has no i8042 PS/2 controller. When PNP detection > finds nothing, i8042_init() falls back to probing the ports directly. > On LoongArch the I/O ports are memory-mapped, and the i8042 port > addresses are not backed by any device on the VM, so i8042_flush() takes > a page fault and the kernel panics: > > i8042: PNP: No PS/2 controller found. > i8042: Probing ports directly. > CPU 0 Unable to handle kernel paging request at virtual address > ffff800000008064 > ERA: i8042_flush+0x50/0x198 > RA: i8042_init+0x2a8/0x35c > Kernel panic - not syncing: Attempted to kill init! You never answer me why in your test you should disable i8042 from V1 until V4. In normal use we use a single kernel for both host and guest.
Huacai > > Disable SERIO_I8042 and its dependents (KEYBOARD_ATKBD, MOUSE_PS2) in > the QEMU_KCONFIG fragment to prevent the driver from being built. > All three options are scoped to loongarch.conf; no other architecture > is affected. > > Wrap the QEMU invocation in run_qemu() with timeout(1) using a local > time limit so the test always terminates, even when QEMU does not exit > on its own. This is useful for every architecture; on LoongArch, for > example, QEMU provides no EFI runtime services and machine_restart() > falls through to an idle loop after kexec, so QEMU would never exit > otherwise. > > Co-developed-by: Kexin Liu <[email protected]> > Signed-off-by: Kexin Liu <[email protected]> > Signed-off-by: George Guo <[email protected]> > --- > tools/testing/selftests/kho/loongarch.conf | 11 +++++++++++ > tools/testing/selftests/kho/vmtest.sh | 22 +++++++++++++++------- > 2 files changed, 26 insertions(+), 7 deletions(-) > create mode 100644 tools/testing/selftests/kho/loongarch.conf > > diff --git a/tools/testing/selftests/kho/loongarch.conf > b/tools/testing/selftests/kho/loongarch.conf > new file mode 100644 > index 000000000000..e45fe1014cf3 > --- /dev/null > +++ b/tools/testing/selftests/kho/loongarch.conf > @@ -0,0 +1,11 @@ > +QEMU_CMD="qemu-system-loongarch64 -M virt -cpu la464" > +QEMU_KCONFIG=" > +CONFIG_SERIAL_8250=y > +CONFIG_SERIAL_8250_CONSOLE=y > +CONFIG_SPARSEMEM_MANUAL=y > +# CONFIG_KEYBOARD_ATKBD is not set > +# CONFIG_MOUSE_PS2 is not set > +# CONFIG_SERIO_I8042 is not set > +" > +KERNEL_IMAGE="vmlinux.efi" > +KERNEL_CMDLINE="console=ttyS0 earlycon kho_scratch=16M,16M,16M" > diff --git a/tools/testing/selftests/kho/vmtest.sh > b/tools/testing/selftests/kho/vmtest.sh > index 0014bd76e88d..de6aa59cf5a0 100755 > --- a/tools/testing/selftests/kho/vmtest.sh > +++ b/tools/testing/selftests/kho/vmtest.sh > @@ -21,7 +21,7 @@ Options: > -d) path to the kernel build directory > -j) number of jobs for compilation, similar to -j in make > -t) run test for target_arch, requires CROSS_COMPILE set > - supported targets: aarch64, x86_64 > + supported targets: aarch64, x86_64, loongarch64 > -h) display this help > EOF > } > @@ -111,12 +111,19 @@ function run_qemu() { > > cmdline="$cmdline kho=on panic=-1" > > - $qemu_cmd -m 1G -smp 2 -no-reboot -nographic -nodefaults \ > - -accel kvm -accel hvf -accel tcg \ > - -serial file:"$serial" \ > - -append "$cmdline" \ > - -kernel "$kernel" \ > - -initrd "$initrd" > + local qemu_args=( > + -m 1G -smp 2 -no-reboot -nographic -nodefaults > + -accel kvm -accel hvf -accel tcg > + -serial file:"$serial" > + -append "$cmdline" > + -kernel "$kernel" > + -initrd "$initrd" > + ) > + > + # Bound the QEMU run so the test always terminates, even when QEMU > + # does not exit on its own (e.g. no EFI runtime services after kexec). > + local qemu_timeout=60 > + timeout "$qemu_timeout" $qemu_cmd "${qemu_args[@]}" || true > > grep "KHO restore succeeded" "$serial" &> /dev/null || fail "KHO > failed" > } > @@ -127,6 +134,7 @@ function target_to_arch() { > case $target in > aarch64) echo "arm64" ;; > x86_64) echo "x86" ;; > + loongarch64) echo "loongarch" ;; > *) skip "architecture $target is not supported" > esac > } > -- > 2.53.0 >

