From patchwork Wed Jun 11 17:32:45 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laura Abbott X-Patchwork-Id: 4337641 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id B1B92BEEAA for ; Wed, 11 Jun 2014 17:35:50 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id B4A3B202F0 for ; Wed, 11 Jun 2014 17:35:49 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B8E112018A for ; Wed, 11 Jun 2014 17:35:48 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1WumOj-00033D-0H; Wed, 11 Jun 2014 17:33:17 +0000 Received: from smtp.codeaurora.org ([198.145.11.231]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1WumOc-0002tX-NH for linux-arm-kernel@lists.infradead.org; Wed, 11 Jun 2014 17:33:11 +0000 Received: from smtp.codeaurora.org (localhost [127.0.0.1]) by smtp.codeaurora.org (Postfix) with ESMTP id 83A2A13F545; Wed, 11 Jun 2014 17:32:48 +0000 (UTC) Received: by smtp.codeaurora.org (Postfix, from userid 486) id 71AD513F564; Wed, 11 Jun 2014 17:32:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from [10.42.111.116] (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: lauraa@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 64E1713F545; Wed, 11 Jun 2014 17:32:47 +0000 (UTC) Message-ID: <539892BD.8020403@codeaurora.org> Date: Wed, 11 Jun 2014 10:32:45 -0700 From: Laura Abbott User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: Geert Uytterhoeven , Russell King Subject: Re: BUG: Bad page state in process swapper pfn:00000 References: In-Reply-To: X-Virus-Scanned: ClamAV using ClamSMTP X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140611_103310_835995_23D733A7 X-CRM114-Status: GOOD ( 22.52 ) X-Spam-Score: -0.7 (/) Cc: Grant Likely , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , Linux-sh list X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Hi, Thanks for the bisect. On 6/11/2014 4:40 AM, Geert Uytterhoeven wrote: > With current mainline, I get an early crash on r8a7791/koelsch: > > BUG: Bad page state in process swapper pfn:00000 > page:ee20b000 count:0 mapcount:0 mapping:66756200 index:0x65726566 > page flags: 0x74656b63(locked|error|lru|active|owner_priv_1|arch_1|private|writeback|head|swapcache > |reclaim|mlocked) > page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set > bad because of flags: > page flags: 0x212861(locked|lru|active|private|writeback|swapcache|mlocked) > > I bisected it to > > commit 1c2f87c22566cd057bc8cde10c37ae9da1a1bb76 > Author: Laura Abbott > Date: Sun Apr 13 22:54:58 2014 +0100 > > ARM: 8025/1: Get rid of meminfo > > memblock is now fully integrated into the kernel and is the prefered > method for tracking memory. Rather than reinvent the wheel with > meminfo, migrate to using memblock directly instead of meminfo as > an intermediate. > > Acked-by: Jason Cooper > Acked-by: Catalin Marinas > Acked-by: Santosh Shilimkar > Acked-by: Kukjin Kim > Tested-by: Marek Szyprowski > Tested-by: Leif Lindholm > Signed-off-by: Laura Abbott > Signed-off-by: Russell King > > As this is a quite intrusive change, it cannot be reverted on top of mainline. > > The commit before (1c8c3cf0b5239388e712508a85821f4718f4d889) > does work. Dmesg difference between them: > > Uncompressing Linux... done, booting the kernel. > Booting Linux on physical CPU 0x0 > -Linux version 3.15.0-rc1-koelsch-reference-00027-g1c8c3cf0b523-dirty > (geert@ramsan) (gcc version 4.6.3 (GCC) ) #174 SMP Wed Jun 11 13:19:00 > CEST 2014 > +Linux version 3.15.0-rc1-koelsch-reference-00028-g1c2f87c22566-dirty > (geert@ramsan) (gcc version 4.6.3 (GCC) ) #175 SMP Wed Jun 11 13:20:28 > CEST 2014 > CPU: ARMv7 Processor [413fc0f2] revision 2 (ARMv7), cr=10c5347d > CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache > -Ignoring memory at 0x200000000 outside 32-bit physical address space > Machine model: Koelsch > bootconsole [earlycon0] enabled > debug: ignoring loglevel setting. > -Truncating RAM at 40000000-bfffffff to -6f7fffff (vmalloc region overlap). > +Truncating RAM at 0x00000000-0xc0000000 to -0x6f800000 I'm guessing this is the issue right there. memory@40000000 { device_type = "memory"; reg = <0 0x40000000 0 0x40000000>; }; memory@200000000 { device_type = "memory"; reg = <2 0x00000000 0 0x40000000>; }; Those are the memory nodes from r8a7791-koelsch.dts. It looks like the memory outside 32-bit address range is not being dropped. It was suggested to drop early_init_dt_add_memory_arch which called arm_add_memory and just use the generic of code directly but the problem is arm_add_memory does additional bounds checking. It looks like early_init_dt_add_memory_arch in drivers/of/fdt.c checks for overflow on u64 types but not for overflow on phys_addr_t (32 bits) which is what memblock_add actually uses. For a quick test, can you try bringing back early_init_dt_add_memory_arch and see if that fixes the problem: Thanks, Laura diff --git a/arch/arm/kernel/devtree.c b/arch/arm/kernel/devtree.c index e94a157..ea9ce92 100644 --- a/arch/arm/kernel/devtree.c +++ b/arch/arm/kernel/devtree.c @@ -27,6 +27,10 @@ #include #include +void __init early_init_dt_add_memory_arch(u64 base, u64 size) +{ + arm_add_memory(base, size); +} #ifdef CONFIG_SMP extern struct of_cpu_method __cpu_method_of_table[];