x86/EISA: Use memremap() to probe for the EISA BIOS signature
authorMaciej W. Rozycki <macro@orcam.me.uk>
Sat, 24 Aug 2024 22:17:10 +0000 (23:17 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sun, 25 Aug 2024 12:29:38 +0000 (14:29 +0200)
The area at the 0x0FFFD9 physical location in the PC memory space is
regular memory, traditionally ROM BIOS and more recently a copy of BIOS
code and data in RAM, write-protected.

Therefore use memremap() to get access to it rather than ioremap(),
avoiding issues in virtualization scenarios and complementing changes such
as commit f7750a795687 ("x86, mpparse, x86/acpi, x86/PCI, x86/dmi, SFI: Use
memremap() for RAM mappings") or commit 5997efb96756 ("x86/boot: Use
memremap() to map the MPF and MPC data").

Reported-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/alpine.DEB.2.21.2408242025210.30766@angie.orcam.me.uk
Closes: https://lore.kernel.org/r/20240822095122.736522-1-kirill.shutemov@linux.intel.com

arch/x86/kernel/eisa.c

index 53935b4d62e30560d806d2c70d8aee209ec9f9df..5a4f99a098bf02192d7d2d60aacb42f324a6fa34 100644 (file)
 
 static __init int eisa_bus_probe(void)
 {
-       void __iomem *p;
+       void *p;
 
        if ((xen_pv_domain() && !xen_initial_domain()) || cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
                return 0;
 
-       p = ioremap(0x0FFFD9, 4);
+       p = memremap(0x0FFFD9, 4, MEMREMAP_WB);
        if (p && readl(p) == 'E' + ('I' << 8) + ('S' << 16) + ('A' << 24))
                EISA_bus = 1;
-       iounmap(p);
+       memunmap(p);
        return 0;
 }
 subsys_initcall(eisa_bus_probe);