From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751609AbdF0AuP (ORCPT ); Mon, 26 Jun 2017 20:50:15 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:35124 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751454AbdF0AuJ (ORCPT ); Mon, 26 Jun 2017 20:50:09 -0400 Subject: Re: [PATCH] ARM: memblock limit must be pmd-aligned To: Laura Abbott , linux@armlinux.org.uk Cc: ard.biesheuvel@linaro.org, nicolas.pitre@linaro.org, tixy@linaro.org, f.fainelli@gmail.com, keescook@chromium.org, marc.zyngier@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org References: <20170626172315.26369-1-opendmb@gmail.com> <48116220-b89b-7413-ea62-c78dfb0594a2@redhat.com> From: Doug Berger Message-ID: <129544df-5461-a877-84c9-9889bd5e9dc0@gmail.com> Date: Mon, 26 Jun 2017 17:50:03 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 MIME-Version: 1.0 In-Reply-To: <48116220-b89b-7413-ea62-c78dfb0594a2@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/26/2017 04:43 PM, Laura Abbott wrote: > On 06/26/2017 10:23 AM, Doug Berger wrote: >> There is a path through the adjust_lowmem_bounds() routine where if all >> memory regions start and end on pmd-aligned addresses the memblock_limit >> will be set to arm_lowmem_limit. >> >> However, since arm_lowmem_limit can be affected by the vmalloc early >> parameter, the value of arm_lowmem_limit may not be pmd-aligned. This >> commit corrects this oversight such that memblock_limit is always rounded >> down to pmd-alignment. >> >> The pmd containing arm_lowmem_limit is cleared by prepare_page_table() >> and without this commit it is possible for early_alloc() to allocate >> unmapped memory in that range when mapping the lowmem. >> > > Do you have an example system or configuration where you see this > crash? I have observed this crash occur on systems like the bcm7445 when a customer uses the vmalloc boot parameter to specify an odd number of Megabytes of VMALLOC space (e.g. vmalloc=751m). This seems to be a popular way for them to set the low memory boundary. As long as vmalloc is a multiple of the pmd (e.g. 2MB) there isn't a problem, so documenting this constraint is another possible solution. However, educating the user is more difficult in this case than working around a questionable value to allow the boot to succeed. -Doug > > Thanks, > Laura > >> Signed-off-by: Doug Berger >> --- >> arch/arm/mm/mmu.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c >> index 31af3cb59a60..2ae4f9c9d757 100644 >> --- a/arch/arm/mm/mmu.c >> +++ b/arch/arm/mm/mmu.c >> @@ -1226,7 +1226,7 @@ void __init adjust_lowmem_bounds(void) >> if (memblock_limit) >> memblock_limit = round_down(memblock_limit, PMD_SIZE); >> if (!memblock_limit) >> - memblock_limit = arm_lowmem_limit; >> + memblock_limit = round_down(arm_lowmem_limit, PMD_SIZE); >> >> if (!IS_ENABLED(CONFIG_HIGHMEM) || cache_is_vipt_aliasing()) { >> if (memblock_end_of_DRAM() > arm_lowmem_limit) { >> >