Re: [PATCH v4 4/4] selftests/kho: add LoongArch vmtest support
Huacai Chen <[email protected]>
| Newsgroups | dev.linux.lists.loongarch,org.infradead.lists.kexec,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