From patchwork Tue Aug 26 09:06:41 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Young X-Patchwork-Id: 4779171 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id EE29E9F2A9 for ; Tue, 26 Aug 2014 09:05:57 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A230020103 for ; Tue, 26 Aug 2014 09:05:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1CEEE201C0 for ; Tue, 26 Aug 2014 09:05:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933928AbaHZJFk (ORCPT ); Tue, 26 Aug 2014 05:05:40 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51828 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932634AbaHZJFh (ORCPT ); Tue, 26 Aug 2014 05:05:37 -0400 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s7Q95FgV011167 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 26 Aug 2014 05:05:16 -0400 Received: from darkstar.nay.redhat.com (dhcp-16-138.nay.redhat.com [10.66.16.138]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s7Q956Fa024064 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO); Tue, 26 Aug 2014 05:05:08 -0400 Date: Tue, 26 Aug 2014 17:06:41 +0800 From: Dave Young To: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Andrew Morton , matt.fleming@intel.com, linux-efi@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, devel@acpica.org, lenb@kernel.org, rafael.j.wysocki@intel.com, robert.moore@intel.com Subject: [PATCH RFC] x86 early_ioremap: increase FIX_BTMAPS_SLOTS to 8 Message-ID: <20140826090641.GA16550@darkstar.nay.redhat.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 86dfc6f339886559d80ee0d4bd20fe5ee90450f0 Author: Lv Zheng 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: [snip] [ 0.000000] RAMDISK: [mem 0x3e1b0000-0x3e982fff] [ 0.000000] ACPI: Early table checksum verification disabled [ 0.000000] ACPI: RSDP 0x00000000DB752000 000024 (v02 HPQOEM) [ 0.000000] ACPI: XSDT 0x00000000DB752088 00008C (v01 HPQOEM SLIC-WKS 01072009 AMI 00010013) [ 0.000000] ACPI: FACP 0x00000000DB759590 00010C (v05 HPQOEM SLIC-WKS 01072009 AMI 00010013) [ 0.000000] ------------[ cut here ]------------ [ 0.000000] WARNING: CPU: 0 PID: 0 at mm/early_ioremap.c:116 __early_ioremap+0x90/0x1c4() [ 0.000000] __early_ioremap(ed00c800, 00000c80) not found slot [ 0.000000] Modules linked in: [ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 3.17.0-rc1+ #204 [ 0.000000] Hardware name: Hewlett-Packard HP Z420 Workstation/1589, BIOS J61 v03.15 05/09/2013 [ 0.000000] 0000000000000000 ffffffff8173b970 ffffffff814bb919 ffffffff8173b9b8 [ 0.000000] ffffffff8173b9a8 ffffffff810638c9 ffffffff8184ee81 ffffffffff538000 [ 0.000000] 0000000000000c80 0000000000000003 0000000000000c80 ffffffff8173ba08 [ 0.000000] Call Trace: [ 0.000000] [] dump_stack+0x4e/0x7a [ 0.000000] [] warn_slowpath_common+0x75/0x8e [ 0.000000] [] ? __early_ioremap+0x90/0x1c4 [ 0.000000] [] warn_slowpath_fmt+0x47/0x49 [ 0.000000] [] __early_ioremap+0x90/0x1c4 [ 0.000000] [] ? sprintf+0x46/0x48 [ 0.000000] [] early_ioremap+0x13/0x15 [ 0.000000] [] early_efi_map+0x24/0x26 [ 0.000000] [] early_efi_scroll_up+0x6d/0xc0 [ 0.000000] [] early_efi_write+0x1b0/0x214 [ 0.000000] [] call_console_drivers.constprop.21+0x73/0x7e [ 0.000000] [] console_unlock+0x151/0x3b2 [ 0.000000] [] ? vprintk_emit+0x49f/0x532 [ 0.000000] [] vprintk_emit+0x521/0x532 [ 0.000000] [] ? console_unlock+0x383/0x3b2 [ 0.000000] [] printk+0x4f/0x51 [ 0.000000] [] acpi_os_vprintf+0x2b/0x2d [ 0.000000] [] acpi_os_printf+0x43/0x45 [ 0.000000] [] acpi_info+0x5c/0x63 [ 0.000000] [] ? __acpi_map_table+0x13/0x18 [ 0.000000] [] ? acpi_os_map_iomem+0x21/0x147 [ 0.000000] [] acpi_tb_print_table_header+0x177/0x186 [ 0.000000] [] acpi_tb_install_table_with_override+0x4b/0x62 [ 0.000000] [] acpi_tb_install_standard_table+0xd9/0x215 [ 0.000000] [] ? early_ioremap+0x13/0x15 [ 0.000000] [] ? __acpi_map_table+0x13/0x18 [ 0.000000] [] acpi_tb_parse_root_table+0x16e/0x1b4 [ 0.000000] [] acpi_initialize_tables+0x57/0x59 [ 0.000000] [] acpi_table_init+0x50/0xce [ 0.000000] [] acpi_boot_table_init+0x1e/0x85 [ 0.000000] [] setup_arch+0x9b7/0xcc4 [ 0.000000] [] start_kernel+0x94/0x42d [ 0.000000] [] ? early_idt_handlers+0x120/0x120 [ 0.000000] [] x86_64_start_reservations+0x2a/0x2c [ 0.000000] [] x86_64_start_kernel+0xf3/0x100 [ 0.000000] ---[ end trace 48732c7db414b8fe ]--- [ 0.000000] ------------[ cut here ]------------ [ 0.000000] WARNING: CPU: 0 PID: 0 at mm/early_ioremap.c:116 __early_ioremap+0x90/0x1c4() [ 0.000000] __early_ioremap(ed00c800, 00000c80) not found slot [ 0.000000] Modules linked in: [ 0.000000] CPU: 0 PID: 0 Comm: swapper Tainted: G W 3.17.0-rc1+ #204 [ 0.000000] Hardware name: Hewlett-Packard HP Z420 Workstation/1589, BIOS J61 v03.15 05/09/2013 [ 0.000000] 0000000000000000 ffffffff8173b970 ffffffff814bb919 ffffffff8173b9b8 [ 0.000000] ffffffff8173b9a8 ffffffff810638c9 ffffffff8184ee81 ffffffffff538000 [ 0.000000] 0000000000000c80 0000000000000003 0000000000000c80 ffffffff8173ba08 [ 0.000000] Call Trace: [ 0.000000] [] dump_stack+0x4e/0x7a [ 0.000000] [] warn_slowpath_common+0x75/0x8e [ 0.000000] [] ? __early_ioremap+0x90/0x1c4 [ 0.000000] [] warn_slowpath_fmt+0x47/0x49 [ 0.000000] [] __early_ioremap+0x90/0x1c4 [ 0.000000] [] early_ioremap+0x13/0x15 [ 0.000000] [] early_efi_map+0x24/0x26 [ 0.000000] [] early_efi_scroll_up+0x6d/0xc0 [ 0.000000] [] early_efi_write+0x1b0/0x214 [ 0.000000] [] call_console_drivers.constprop.21+0x73/0x7e [ 0.000000] [] console_unlock+0x1fa/0x3b2 [ 0.000000] [] vprintk_emit+0x521/0x532 [ 0.000000] [] ? console_unlock+0x383/0x3b2 [ 0.000000] [] printk+0x4f/0x51 [ 0.000000] [] acpi_os_vprintf+0x2b/0x2d [ 0.000000] [] acpi_os_printf+0x43/0x45 [ 0.000000] [] acpi_info+0x5c/0x63 [ 0.000000] [] ? __acpi_map_table+0x13/0x18 [ 0.000000] [] ? acpi_os_map_iomem+0x21/0x147 [ 0.000000] [] acpi_tb_print_table_header+0x177/0x186 [ 0.000000] [] acpi_tb_install_table_with_override+0x4b/0x62 [ 0.000000] [] acpi_tb_install_standard_table+0xd9/0x215 [ 0.000000] [] ? early_ioremap+0x13/0x15 [ 0.000000] [] ? __acpi_map_table+0x13/0x18 [ 0.000000] [] acpi_tb_parse_root_table+0x16e/0x1b4 [ 0.000000] [] acpi_initialize_tables+0x57/0x59 [ 0.000000] [] acpi_table_init+0x50/0xce [ 0.000000] [] acpi_boot_table_init+0x1e/0x85 [ 0.000000] [] setup_arch+0x9b7/0xcc4 [ 0.000000] [] start_kernel+0x94/0x42d [ 0.000000] [] ? early_idt_handlers+0x120/0x120 [ 0.000000] [] x86_64_start_reservations+0x2a/0x2c 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: Dave Young --- I'm not sure if this is ok in 32bit, review and comments are appreciated. arch/x86/include/asm/fixmap.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Index: linux/arch/x86/include/asm/fixmap.h =================================================================== --- linux.orig/arch/x86/include/asm/fixmap.h +++ linux/arch/x86/include/asm/fixmap.h @@ -106,14 +106,14 @@ enum fixed_addresses { __end_of_permanent_fixed_addresses, /* - * 256 temporary boot-time mappings, used by early_ioremap(), + * 512 temporary boot-time mappings, used by early_ioremap(), * before ioremap() is functional. * - * If necessary we round it up to the next 256 pages boundary so + * If necessary we round it up to the next 512 pages boundary so * that we can have a single pgd entry and a single pte table: */ #define NR_FIX_BTMAPS 64 -#define FIX_BTMAPS_SLOTS 4 +#define FIX_BTMAPS_SLOTS 8 #define TOTAL_FIX_BTMAPS (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS) FIX_BTMAP_END = (__end_of_permanent_fixed_addresses ^