Re: [PATCH v4 4/4] selftests/kho: add LoongArch vmtest support

Huacai Chen <[email protected]>
Newsgroups org.infradead.lists.kexec,dev.linux.lists.loongarch,org.kernel.vger.linux-efi,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kvack.linux-mm
Message-ID <CAAhV-H7XKFj93fSPcKAR9AR6Z4O28pC9va243hVccvPNOxH3qg@mail.gmail.com>
On Fri, Aug 14, 2026 at 12:03 AM George Guo <[email protected]> wrote:
>
> Hi Huacai,
>
> On Sun, 9 Aug 2026 at 12:16, Huacai Chen <[email protected]> wrote:
> > 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.
>
> I owe you an apology: I did not actually understand your question. I
> thought the commit message had already explained the reason (the
> i8042_flush() panic), so I treated it as answered and never addressed
> what you were really asking. Let me answer it directly now.
>
> You are right that this is not just a selftest detail. i8042 is built on
> every LoongArch kernel: arch/loongarch/Kconfig selects
> ARCH_MIGHT_HAVE_PC_SERIO, and KEYBOARD_ATKBD and MOUSE_PS2 (both default
> y) select SERIO_I8042 under it. So your "single kernel for host and
> guest" point is correct -- a normal defconfig kernel has i8042 built in.
>
> On the QEMU virtual machine there is no i8042, so PNP finds nothing and
> i8042_pnp_init() falls back to probing the i8042 status and data
> registers (I8042_STATUS_REG, I8042_DATA_REG) directly. On LoongArch those
> registers are memory-mapped, and on the virtual machine they are not backed
> by any device, so i8042_flush() takes a page fault and the kernel panics
> before userspace. A normal LoongArch defconfig kernel booted as a QEMU
> guest hits the same panic -- the "# CONFIG_SERIO_I8042 is not set" in
> loongarch.conf is only a workaround to let the KHO selftest boot, not a
> fix.
>
> The real fix is separate from the KHO series: make i8042 bail out on
> LoongArch when ACPI/PNP does not describe a controller, so the direct-port
> fallback never runs. I have prepared that as a standalone patch -- the
> relevant hunk is below -- and will send the full patch separately. The
> selftest workaround can be dropped once it lands.
You nearly answered nothing.

Does your employer use different kernels for host and guest in KylinOS?

Huacai

>
> diff --git a/drivers/input/serio/i8042-acpipnpio.h b/drivers/input/serio/i8042-acpipnpio.h
> --- a/drivers/input/serio/i8042-acpipnpio.h
> +++ b/drivers/input/serio/i8042-acpipnpio.h
> @@ -1633,8 +1633,14 @@ static int __init i8042_pnp_init(void)
>  #else
>                 pr_info("PNP: No PS/2 controller found.\n");
>  #if defined(__loongarch__)
> -               if (acpi_disabled == 0)
> -                       return -ENODEV;
> +               /*
> +                * LoongArch legacy I/O ports are memory-mapped and are not
> +                * safely probeable when no controller is present: a direct
> +                * probe faults on the QEMU virtual machine and on any FDT-based
> +                * boot.  Do not fall back to probing them directly; if ACPI/PNP
> +                * did not describe a controller, assume there is none.
> +                */
> +               return -ENODEV;
>  #else
>                 if (x86_platform.legacy.i8042 !=
>                                 X86_LEGACY_I8042_EXPECTED_PRESENT)
>
> Thanks,
> George
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.