Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752017AbdCIUJ0 (ORCPT ); Thu, 9 Mar 2017 15:09:26 -0500 Received: from bh-25.webhostbox.net ([208.91.199.152]:56739 "EHLO bh-25.webhostbox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751684AbdCIUJY (ORCPT ); Thu, 9 Mar 2017 15:09:24 -0500 Date: Thu, 9 Mar 2017 10:49:38 -0800 From: Guenter Roeck To: Tobias Klauser Cc: Sven Schmidt <4sschmid@informatik.uni-hamburg.de>, Sandra Loosemore , Arnd Bergmann , Andrew Morton , linux-kernel@vger.kernel.org, Ley Foon Tan , nios2-dev@lists.rocketboards.org Subject: Re: nios2 crash/hang in mainline due to 'lib: update LZ4 compressor module' Message-ID: <20170309184938.GB10719@roeck-us.net> References: <20170228155331.GC27998@distanz.ch> <58B5B934.5040807@codesourcery.com> <20170228181413.GC13455@roeck-us.net> <20170301185817.GA13543@bierbaron.springfield.local> <20170301194520.GA20160@roeck-us.net> <20170302163813.GE27998@distanz.ch> <1ad19c21-6f6e-4516-7df5-d3536df9f4ee@roeck-us.net> <20170307124609.GF27998@distanz.ch> <4f4fe40b-1e2e-f0b9-37bc-4743fded439d@roeck-us.net> <20170309144340.GH27998@distanz.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170309144340.GH27998@distanz.ch> User-Agent: Mutt/1.5.24 (2015-08-30) X-Authenticated_sender: guenter@roeck-us.net X-OutGoing-Spam-Status: No, score=-1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - bh-25.webhostbox.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - roeck-us.net X-Get-Message-Sender-Via: bh-25.webhostbox.net: authenticated_id: guenter@roeck-us.net X-Authenticated-Sender: bh-25.webhostbox.net: guenter@roeck-us.net X-Source: X-Source-Args: X-Source-Dir: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2836 Lines: 76 On Thu, Mar 09, 2017 at 03:43:40PM +0100, Tobias Klauser wrote: > On 2017-03-09 at 14:20:51 +0100, Guenter Roeck wrote: > > On 03/07/2017 04:46 AM, Tobias Klauser wrote: > > [ ... ] > > > > > > > >Linux version 4.11.0-rc1-dirty (tobiask@ziws08) (gcc version 7.0.1 20170226 (experimental) (GCC) ) #46 Tue Mar 7 13:40:53 CET 2017 > > >bootconsole [early0] enabled > > >Early console on uart16650 initialized at 0xf8001600 > > >OF: fdt: Error -11 processing FDT > > >Kernel panic - not syncing: setup_cpuinfo: No CPU found in devicetree! > > > > > >---[ end Kernel panic - not syncing: setup_cpuinfo: No CPU found in devicetree! > > > > > >Looks like the in-memory device tree somehow gets corrupted. Not sure > > >yet why and how this is linked to the Kconfig options selected but at > > >least we now have a possibility to use debug messages earlier on. > > > > > > > I think I found the problem. In unflatten_and_copy_device_tree(), with added > > debug information: > > > > OF: fdt: initial_boot_params=c861e400, dt=c861f000 size=28874 (0x70ca) > > > > ... and then initial_boot_params is copied to dt, which results in corrupted > > fdt since the memory overlaps. Looks like the initial_boot_params memory > > is not reserved and (re-)allocated by early_init_dt_alloc_memory_arch(). > > Thanks for the analysis. That certainly explains the issue. The > following patch solves the issue for me. Though I'm not entirely sure if > it is correct and that is all that is needed. Do we need to retain the > memory for initial_boot_params after bootmem is freed? > I don't know if it is correct either, but it matches what I came up with, and it does work for me as well. Feel free to add Tested-by: Guenter Roeck when you submit the patch for real. Thanks, Guenter > diff --git a/arch/nios2/kernel/prom.c b/arch/nios2/kernel/prom.c > index 099f5ce1f3cb..6869fe03f3ff 100644 > --- a/arch/nios2/kernel/prom.c > +++ b/arch/nios2/kernel/prom.c > @@ -48,6 +48,13 @@ void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align) > return alloc_bootmem_align(size, align); > } > > +int __init early_init_dt_reserve_memory_arch(phys_addr_t base, > + phys_addr_t size, bool nomap) > +{ > + reserve_bootmem(base, size, BOOTMEM_DEFAULT); > + return 0; > +} > + > void __init early_init_devtree(void *params) > { > __be32 *dtb = (u32 *)__dtb_start; > diff --git a/arch/nios2/kernel/setup.c b/arch/nios2/kernel/setup.c > index 6e57ffa5db27..6044d9be28b4 100644 > --- a/arch/nios2/kernel/setup.c > +++ b/arch/nios2/kernel/setup.c > @@ -201,6 +201,9 @@ void __init setup_arch(char **cmdline_p) > } > #endif /* CONFIG_BLK_DEV_INITRD */ > > + early_init_fdt_reserve_self(); > + early_init_fdt_scan_reserved_mem(); > + > unflatten_and_copy_device_tree(); > > setup_cpuinfo();