Re: [PATCH v4 4/4] selftests/kho: add LoongArch vmtest support
George Guo <[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 | <[email protected]> |
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. 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