Messages in this thread Patch in this message | | | From | Mateusz Jończyk <> | Subject | [PATCH RESEND v2] x86: warn on native_io_delay() before DMI scan | Date | Sun, 17 Oct 2021 21:25:58 +0200 |
| |
Writing to IO port 0x80 in native_io_delay() causes system lockups on some laptops. This is handled by io_delay_init(), which scans DMI info and changes io_delay_type on these laptops.
Therefore, calling native_io_delay() / outb_p() / inb_p() / etc. before io_delay_init() may cause problems there and may constitute a kernel bug. Warn if this happens.
Signed-off-by: Mateusz Jończyk <mat.jonczyk@o2.pl> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Borislav Petkov <bp@alien8.de> ---
v2: make io_delay_dmi_scanned static
arch/x86/kernel/io_delay.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/arch/x86/kernel/io_delay.c b/arch/x86/kernel/io_delay.c index fdb6506ceaaa..d6deca551a5c 100644 --- a/arch/x86/kernel/io_delay.c +++ b/arch/x86/kernel/io_delay.c @@ -29,6 +29,7 @@ #endif int io_delay_type __read_mostly = DEFAULT_IO_DELAY_TYPE; +static int io_delay_dmi_scanned __read_mostly; static int __initdata io_delay_override; @@ -37,6 +38,8 @@ static int __initdata io_delay_override; */ void native_io_delay(void) { + WARN_ON_ONCE(!io_delay_dmi_scanned); + switch (io_delay_type) { default: case IO_DELAY_TYPE_0X80: @@ -123,6 +126,8 @@ void __init io_delay_init(void) { if (!io_delay_override) dmi_check_system(io_delay_0xed_port_dmi_table); + + io_delay_dmi_scanned = 1; } static int __init io_delay_param(char *s) -- 2.25.1
| |