Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp512449ybl; Thu, 22 Aug 2019 00:10:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqwQJ/2WsgPVs1Nv7zuH28bPQpdAhWgK/6S6tWkRq/9Ogp4EJcmQSnYU3m45NtriR7Bnz/ke X-Received: by 2002:a63:f926:: with SMTP id h38mr32279818pgi.80.1566457810697; Thu, 22 Aug 2019 00:10:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566457810; cv=none; d=google.com; s=arc-20160816; b=exaIGDjneKucOkQeKgXS2AvYFg2ctxAiw1Cc+EGtHHpCQDJhjEGtAAFMx1hPjjliGD yqDfuQSlFhWf0v/mSB4r8h1HKv0V+xZWVDc7ppU1NNzG+QSrQAgi7Q5/CspQgOnkfGca bFnxS3e1VwBfXOD2s1XfVwNDqH8yaHOvAFTZ8oMfSFqRCY+hUdO+DJNtQnaAjoov2INM Y9EId38d3kHz7Cee02P8FsLdeeztazQFul1j7ZIeXp51/L4VYgMjiuCfOL4ZGGBVUdrp RMIC2DpxFyqVHIDJIHiovpPPxaTvP6FsJMRx7bhQPgTRcjKZfw9g5/RUlz9Q8bSFHzSx DwyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=CiMrxH8Gt5JqK2uyEB2GoUe1c7zMq8bWNGPXsYgidV4=; b=sX66A6d7dRQzeLSMHwR7uiktD7Ekkkf2RDqqPH1wLnzxnXmhl9IbQWu/U/0RXJiNEF bRx9Ri2R2avugfzTrWW7G0jatZKg7JB+83ivv6qEQ7HiriTc7SByZlHUsZXDPjfCD00x PSF0m+5tCXzt00sv82ubvUNbQZHUMU2IM9YrkKeL8/XUG+Z047dFFmx45wT6TZ+38ynG XkfpNwRDWup+j2uhrBMtxdjU/HhTnacxJFwY3AIRMhi2BZ6Xx20Tptxz/zbQyHX/3M4f 9BWrnEJZtrli++DVgc/tVwCpBwo612L1SblNQiXp7J7AJCsR5lgnMqqkp2uSi/mhQk7C HE3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IoVKbHiz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j16si17770025pfh.0.2019.08.22.00.09.55; Thu, 22 Aug 2019 00:10:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=IoVKbHiz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731788AbfHVGrC (ORCPT + 99 others); Thu, 22 Aug 2019 02:47:02 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:44933 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730847AbfHVGrC (ORCPT ); Thu, 22 Aug 2019 02:47:02 -0400 Received: by mail-qt1-f195.google.com with SMTP id 44so6324605qtg.11 for ; Wed, 21 Aug 2019 23:47:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=CiMrxH8Gt5JqK2uyEB2GoUe1c7zMq8bWNGPXsYgidV4=; b=IoVKbHizFjYoCYCvT4CCkXOM23WvHv7K77ZyHJaPwNCm+lOMDDebTTybNmTF+guhDO HuQHKqJNJPeEbVBtdObOCo4ho97PgUXlVSwWnBcqjfb+f4vKJAAjOWpF4pkOxqumh1xz 7Sx6M9pJOxlvxVQYLoNXQpaRqu82sKt5yxVx2fePB8z03vuzNO8nf4gfqTGXcss0do/m y9La9YOkoRozJYT0OWlB+4izCKV+4/08EAVepe5QhuKi9HB/2gRgWSFAFfyZ8wzrkMNC ZLn4BZS55uGf+TNSuMkWe+Z7t9DQt/rcyIqWAljuFMNBIbPMJBLaFoQevHXrWOOuXGeY 0teQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=CiMrxH8Gt5JqK2uyEB2GoUe1c7zMq8bWNGPXsYgidV4=; b=dV0LCVw4jAopQeAHYV4Fo8EqizA7vKg4YjvKC3ID7x/7N73Erjuc+YovI3eCteAwS/ AD89DOAwuHffFt11SOJvpxXGMqzRsbOG/bfiQtqSVl7fraMB+QdYAM2QSd/NuPQpEPyb 6x6+Z0tp54j0FR2FqZNQRQIKWhAlS3LZdujZ7sNHNKMiZothxnNeBooIorJ8QdBQpw8+ AoMcIf+YIU8XNpbJE9i01N41ZzuIcayJb6Kcos7anbSCPSAcKB6B3+Vnhwxco+8kMdii XrjhY8lK9v2gWcm5wPrnbVFyx2PSaEh+hpGp47q89y16HqKmYLEtnvRCStpMnaZaxraK mhMQ== X-Gm-Message-State: APjAAAW8Tz1tnFcs5Vvan9tykyuZXFI/ZdcsUb1RQYLpSGN4fbvq/f+9 eCFor4PUsJo7Rb/TuWUrDB15TGgGSfVIDKR8e70Gmg== X-Received: by 2002:aed:21b6:: with SMTP id l51mr35436677qtc.184.1566456421037; Wed, 21 Aug 2019 23:47:01 -0700 (PDT) MIME-Version: 1.0 References: <20190822034425.25899-1-clin@suse.com> <20190822035920.GA27154@linux-8mug> <20190822064406.GC18872@rapoport-lnx> In-Reply-To: <20190822064406.GC18872@rapoport-lnx> From: Ard Biesheuvel Date: Thu, 22 Aug 2019 09:46:50 +0300 Message-ID: Subject: Re: [PATCH] arm: skip nomap memblocks while finding the lowmem/highmem boundary To: Mike Rapoport Cc: Chester Lin , "linux@armlinux.org.uk" , "akpm@linux-foundation.org" , "geert@linux-m68k.org" , "tglx@linutronix.de" , "mark.rutland@arm.com" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "guillaume.gardet@arm.com" , Gary Lin , Joey Lee Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 22 Aug 2019 at 09:44, Mike Rapoport wrote: > > On Thu, Aug 22, 2019 at 03:59:42AM +0000, Chester Lin wrote: > > On Thu, Aug 22, 2019 at 11:45:34AM +0800, Chester Lin wrote: > > > adjust_lowmem_bounds() checks every memblocks in order to find the boundary > > > between lowmem and highmem. However some memblocks could be marked as NOMAP > > > so they are not used by kernel, which should be skipped while calculating > > > the boundary. > > > > > > Signed-off-by: Chester Lin > > > --- > > > arch/arm/mm/mmu.c | 3 +++ > > > 1 file changed, 3 insertions(+) > > > > > > diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c > > > index 426d9085396b..b86dba44d828 100644 > > > --- a/arch/arm/mm/mmu.c > > > +++ b/arch/arm/mm/mmu.c > > > @@ -1181,6 +1181,9 @@ void __init adjust_lowmem_bounds(void) > > > phys_addr_t block_start = reg->base; > > > phys_addr_t block_end = reg->base + reg->size; > > > > > > + if (memblock_is_nomap(reg)) > > > + continue; > > > + > > > if (reg->base < vmalloc_limit) { > > > if (block_end > lowmem_limit) > > > /* > > > -- > > > 2.22.0 > > > > > > > Hi Russell, Mike and Ard, > > > > Per the discussion in the thread "[PATH] efi/arm: fix allocation failure ...", > > (https://lkml.org/lkml/2019/8/21/163), I presume that the change to disregard > > NOMAP memblocks in adjust_lowmem_bounds() should be separated as a single patch. > > > > Please let me know if any suggestion, thank you. > > Let's add this one to the series: > > From 06a986e79d60c310c804b3e550bd50316597aec5 Mon Sep 17 00:00:00 2001 > From: Mike Rapoport > Date: Thu, 22 Aug 2019 09:27:40 +0300 > Subject: [PATCH] arm: ensure that usable memory in bank 0 starts from a > PMD-aligned address > > The calculation of memblock_limit in adjust_lowmem_bounds() assumes that > bank 0 starts from a PMD-aligned address. However, the beginning of the > first bank may be NOMAP memory and the start of usable memory > will be not aligned to PMD boundary. In such case the memblock_limit will > be set to the end of the NOMAP region, which will prevent any memblock > allocations. > > Mark the region between the end of the NOMAP area and the next PMD-aligned > address as NOMAP as well, so that the usable memory will start at > PMD-aligned address. > > Signed-off-by: Mike Rapoport Acked-by: Ard Biesheuvel > --- > arch/arm/mm/mmu.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c > index 4495a26..25da9b2 100644 > --- a/arch/arm/mm/mmu.c > +++ b/arch/arm/mm/mmu.c > @@ -1177,6 +1177,22 @@ void __init adjust_lowmem_bounds(void) > */ > vmalloc_limit = (u64)(uintptr_t)vmalloc_min - PAGE_OFFSET + PHYS_OFFSET; > > + /* > + * The first usable region must be PMD aligned. Mark its start > + * as MEMBLOCK_NOMAP if it isn't > + */ > + for_each_memblock(memory, reg) { > + if (!memblock_is_nomap(reg)) { > + if (!IS_ALIGNED(reg->base, PMD_SIZE)) { > + phys_addr_t len; > + > + len = round_up(reg->base, PMD_SIZE) - reg->base; > + memblock_mark_nomap(reg->base, len); > + } > + break; > + } > + } > + > for_each_memblock(memory, reg) { > phys_addr_t block_start = reg->base; > phys_addr_t block_end = reg->base + reg->size; > -- > 2.7.4 > > > -- > Sincerely yours, > Mike. >