Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752601Ab2HCRXE (ORCPT ); Fri, 3 Aug 2012 13:23:04 -0400 Received: from mailrelay006.isp.belgacom.be ([195.238.6.172]:27905 "EHLO mailrelay006.isp.belgacom.be" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751290Ab2HCRXB (ORCPT ); Fri, 3 Aug 2012 13:23:01 -0400 X-Belgacom-Dynamic: yes X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av8EAN4HHFBXQCed/2dsb2JhbABFuSqBCIIgAQEEAScvIgEFCwsUBAkWDwkDAgECASceBg0BBQIBAYgDCr0Qi0gVhm8DmyWKMoJhgVU Message-ID: <501C0877.7010303@computer.org> Date: Fri, 03 Aug 2012 19:20:55 +0200 From: Jan Ceuleers User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120714 Thunderbird/14.0 MIME-Version: 1.0 To: Piotr Gluszenia Slawinski CC: linux-kernel@vger.kernel.org, linux-mm@kvack.org, David Miller Subject: Re: bootmem code - reboots after 'uncompressing linux' on old computers References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2947 Lines: 80 On 08/03/2012 03:37 AM, Piotr Gluszenia Slawinski wrote: > Hello. > while bisecting old pcmcia bug i've noticed kernels ~2.6.36 > and up do not boot on 586 machines with small amounts of ram (16M) Copying David Miller. Not trimming the rest of the message for David's benefit; no further comments from me. > suprisingly 3.5 kernel booted fine. > > i've bisected the problem and found fix : > > solidstate linux # git bisect good > 4e1c2b284461fd8aa8d7b295a1e911fc4390755b is the first bad commit > commit 4e1c2b284461fd8aa8d7b295a1e911fc4390755b > Author: David Miller > Date: Wed Apr 25 16:10:50 2012 -0400 > > mm: nobootmem: Correct alloc_bootmem semantics. > > The comments above __alloc_bootmem_node() claim that the code will > first try the allocation using 'goal' and if that fails it will > try again but with the 'goal' requirement dropped. > > Unfortunately, this is not what the code does, so fix it to do so. > > This is important for nobootmem conversions to architectures such > as sparc where MAX_DMA_ADDRESS is infinity. > > On such architectures all of the allocations done by generic spots, > such as the sparse-vmemmap implementation, will pass in: > > __pa(MAX_DMA_ADDRESS) > > as the goal, and with the limit given as "-1" this will always fail > unless we add the appropriate fallback logic here. > > Signed-off-by: David S. Miller > Acked-by: Yinghai Lu > Signed-off-by: Linus Torvalds > > :040000 040000 5c42bbd13a81426248901205b051968bab14e6ff 3e7fad8afb42036c6bbb1fcf5fcf12c87bbba9e2 M mm > > > kernels before 3.6.39 do not have nobootmem.c , but they still have same bug! > > this patch fixes the problem for them (useful for bisecting, etc, imho should be merged into 2.6.35-stable branch) : > > > diff --git a/mm/bootmem.c b/mm/bootmem.c > index 13b0caa..b0ccada 100644 > --- a/mm/bootmem.c > +++ b/mm/bootmem.c > @@ -848,6 +848,7 @@ void * __init __alloc_bootmem_node(pg_data_t *pgdat, unsigned long size, > return kzalloc_node(size, GFP_NOWAIT, pgdat->node_id); > > #ifdef CONFIG_NO_BOOTMEM > +again: > ptr = __alloc_memory_core_early(pgdat->node_id, size, align, > goal, -1ULL); > if (ptr) > @@ -859,6 +860,10 @@ void * __init __alloc_bootmem_node(pg_data_t *pgdat, unsigned long size, > ptr = ___alloc_bootmem_node(pgdat->bdata, size, align, goal, 0); > #endif > > + if (!ptr && goal) { > + goal = 0; > + goto again; > + } > return ptr; > } > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/