Skip to content
  • Dave Young's avatar
    x86 early_ioremap: Increase FIX_BTMAPS_SLOTS to 8 · 3eddc69f
    Dave Young authored
    3.16 kernel boot fail with earlyprintk=efi, it keeps scrolling at the
    bottom line of screen.
    
    Bisected, the first bad commit is below:
    commit 86dfc6f3
    
    
    Author: Lv Zheng <lv.zheng@intel.com>
    Date:   Fri Apr 4 12:38:57 2014 +0800
    
        ACPICA: Tables: Fix table checksums verification before installation.
    
    I did some debugging by enabling both serial and efi earlyprintk, below is
    some debug dmesg, seems early_ioremap fails in scroll up function due to
    no free slot, see below dmesg output:
    
      WARNING: CPU: 0 PID: 0 at mm/early_ioremap.c:116 __early_ioremap+0x90/0x1c4()
      __early_ioremap(ed00c800, 00000c80) not found slot
      Modules linked in:
      CPU: 0 PID: 0 Comm: swapper Not tainted 3.17.0-rc1+ #204
      Hardware name: Hewlett-Packard HP Z420 Workstation/1589, BIOS J61 v03.15 05/09/2013
      Call Trace:
        dump_stack+0x4e/0x7a
        warn_slowpath_common+0x75/0x8e
        ? __early_ioremap+0x90/0x1c4
        warn_slowpath_fmt+0x47/0x49
        __early_ioremap+0x90/0x1c4
        ? sprintf+0x46/0x48
        early_ioremap+0x13/0x15
        early_efi_map+0x24/0x26
        early_efi_scroll_up+0x6d/0xc0
        early_efi_write+0x1b0/0x214
        call_console_drivers.constprop.21+0x73/0x7e
        console_unlock+0x151/0x3b2
        ? vprintk_emit+0x49f/0x532
        vprintk_emit+0x521/0x532
        ? console_unlock+0x383/0x3b2
        printk+0x4f/0x51
        acpi_os_vprintf+0x2b/0x2d
        acpi_os_printf+0x43/0x45
        acpi_info+0x5c/0x63
        ? __acpi_map_table+0x13/0x18
        ? acpi_os_map_iomem+0x21/0x147
        acpi_tb_print_table_header+0x177/0x186
        acpi_tb_install_table_with_override+0x4b/0x62
        acpi_tb_install_standard_table+0xd9/0x215
        ? early_ioremap+0x13/0x15
        ? __acpi_map_table+0x13/0x18
        acpi_tb_parse_root_table+0x16e/0x1b4
        acpi_initialize_tables+0x57/0x59
        acpi_table_init+0x50/0xce
        acpi_boot_table_init+0x1e/0x85
        setup_arch+0x9b7/0xcc4
        start_kernel+0x94/0x42d
        ? early_idt_handlers+0x120/0x120
        x86_64_start_reservations+0x2a/0x2c
        x86_64_start_kernel+0xf3/0x100
    
    Quote reply from Lv.zheng about the early ioremap slot usage in this case:
    
    """
    In early_efi_scroll_up(), 2 mapping entries will be used for the src/dst screen buffer.
    In drivers/acpi/acpica/tbutils.c, we've improved the early table loading code in acpi_tb_parse_root_table().
    We now need 2 mapping entries:
    1. One mapping entry is used for RSDT table mapping. Each RSDT entry contains an address for another ACPI table.
    2. For each entry in RSDP, we need another mapping entry to map the table to perform necessary check/override before installing it.
    
    When acpi_tb_parse_root_table() prints something through EFI earlyprintk console, we'll have 4 mapping entries used.
    The current 4 slots setting of early_ioremap() seems to be too small for such a use case.
    """
    
    Thus increase the slot to 8 in this patch to fix this issue.
    boot-time mappings become 512 page with this patch.
    
    Signed-off-by: default avatarDave Young <dyoung@redhat.com>
    Cc: <stable@vger.kernel.org> # v3.16
    Signed-off-by: default avatarMatt Fleming <matt.fleming@intel.com>
    3eddc69f