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
>

Reply via email to