Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751946AbaG1S5F (ORCPT ); Mon, 28 Jul 2014 14:57:05 -0400 Received: from mail-ie0-f179.google.com ([209.85.223.179]:50130 "EHLO mail-ie0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750960AbaG1S5A (ORCPT ); Mon, 28 Jul 2014 14:57:00 -0400 MIME-Version: 1.0 In-Reply-To: <20140728184107.GR15536@arm.com> References: <20140722153623.25088.37742.stgit@buzz> <20140722153635.25088.14197.stgit@buzz> <20140728181456.GO15536@arm.com> <20140728184107.GR15536@arm.com> Date: Mon, 28 Jul 2014 22:57:00 +0400 Message-ID: Subject: Re: [PATCH 2/2] ARM: LPAE: reduce damage caused by idmap to virtual memory layout From: Konstantin Khlebnikov To: Will Deacon Cc: Konstantin Khlebnikov , Vitaly Andrianov , Russell King , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , Cyril Chemparathy Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jul 28, 2014 at 10:41 PM, Will Deacon wrote: > On Mon, Jul 28, 2014 at 07:25:14PM +0100, Konstantin Khlebnikov wrote: >> On Mon, Jul 28, 2014 at 10:14 PM, Will Deacon wrote: >> > On Tue, Jul 22, 2014 at 04:36:35PM +0100, Konstantin Khlebnikov wrote: >> >> idmap layout combines both phisical and virtual addresses. >> >> Everything works fine if ram physically lays below PAGE_OFFSET. >> >> Otherwise idmap starts punching huge holes in virtual memory layout. >> >> It maps ram by 2MiB sections, but when it allocates new pmd page it >> >> cuts 1GiB at once. >> >> >> >> This patch makes a copy of all affected pmds from init_mm. >> >> Only few (usually one) 2MiB sections will be lost. >> >> This is not eliminates problem but makes it 512 times less likely. >> > >> > I'm struggling to understand your commit message, but making a problem `512 >> > times less likely' does sound like a bit of a hack to me. Can't we fix this >> > properly instead? >> >> Yep, my comment sucks. >> >> Usually idmap looks like this: >> >> |0x00000000 -- --- | >> TASK_SIZE -- --- 0xFFFFFFFF | >> >> But when that physical memory chunk starts from 0xE8000000 or even >> 0xF2000000 evenything becomes very complicated. > > Why? As long as we don't clobber the kernel text (which would require > PHYS_OFFSET to be at a really weird alignment and very close to > PAGE_OFFSET), then you should be alright. Sure, you'll lose things like your > stack and the vmalloc area etc, but you're running in the idmap, so don't > use those things. Yep, we have piece of hardware with really weird aligned PHYS_OFFSET, mostly all ram is above 4gb and we was lucky enough to get into the trouble. It seems keystone has all memory above 4gb but small piece is mapped below especially for booting. I suppose it's below PAGE_OFFSET so Cyril hadn't seen that problem. Also I seen comment somewhere in the code which tells that idrmap pgd is always below 4gb which isn't quite true. Moreover, I had some experiments with mapping ram to random places in qemu and seen that kernel cannot boot if PHYS_OFFSET isn't alligned to 128mb which is strange. So, it seems there is plenty bugs anound. > > soft_restart is an example of code that deals with these issues. Which code > is causing you problems? That was booting of secondary cpus, all of them. > > Will -- 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/