Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp823018imm; Thu, 26 Jul 2018 12:37:09 -0700 (PDT) X-Google-Smtp-Source: AAOMgpf0fjOxeT6gUsjPEoeVKdIQV/HC2J5cCYYlVjX3tqSC+2FsctQry10h4XVK7ZMgo07hcsXd X-Received: by 2002:a17:902:9693:: with SMTP id n19-v6mr3190407plp.212.1532633829761; Thu, 26 Jul 2018 12:37:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532633829; cv=none; d=google.com; s=arc-20160816; b=sOIXDULX4UDcRm41IpjT1VaX8IvoTo8+KzfuF82dnA6nFBjAj/e+dt9npZubY3YGwT YQAOuEns7+RryQmNRmkAZ4d860WNUxm7P1KV38cm2z0+f6kkGAqsfP4rtVnMu5K1Z4Mx Hy84Vj5br4mvSc88LR8MGCYWYNb9NolEP+8L38x9l9xwBC1B3IVzEk20i+FZOb1zNrap hw7E544boDhR0tw29yueOTByEcMUEoXo3TeFDaSeQTp8oOcAOBICbby0jQvKO5tsYA2L SAnPGhJPvyq0Vb4tbdLksy2rn1q23r3IH9ofC5JQT6NzDRUykeiwPP2ytaMX4lot2ldQ IWxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:to:from:dkim-signature:arc-authentication-results; bh=LoPUYfIjyFLnqtBz3bvdJXWWeJYIZbn3cn69IuFQuIE=; b=e6anQSo5qE7kgX97cQOEpaevBe7I/AhZ2I1UBWaGo9jbXJ2yjxMi+0awT8JtEcsaPP uItiuTvMOU1K301hZfVrmIrdCmzkN8ihS1H9mmGLWRn26dzCh30kiZVGIa2vYU/u0deV RKGdDyxOEa688/qbm0VIVECk4O6PDTZ5LQcka6W2CGlMHsbiBWQuAfUzvdMqB3wAqkBr 25oKiPKsV4//UE4WVeYhf/RrU6/C0hpUiHGEo1j682fWzs48eR2SWIO05J6pzqqMpI+E MpKIweqUSzokH14i4t0teTsJ0eUTAvGuaxgNoLswJz5hU2T+j7ABmokF6I04Zhyk6frh YDvQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=d+piAmcR; 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=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 33-v6si1104665plh.16.2018.07.26.12.36.54; Thu, 26 Jul 2018 12:37:09 -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=@oracle.com header.s=corp-2018-07-02 header.b=d+piAmcR; 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=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731729AbeGZUyF (ORCPT + 99 others); Thu, 26 Jul 2018 16:54:05 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:52202 "EHLO userp2120.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731271AbeGZUyE (ORCPT ); Thu, 26 Jul 2018 16:54:04 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.22/8.16.0.22) with SMTP id w6QJSYNG123769; Thu, 26 Jul 2018 19:35:25 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : in-reply-to : references; s=corp-2018-07-02; bh=LoPUYfIjyFLnqtBz3bvdJXWWeJYIZbn3cn69IuFQuIE=; b=d+piAmcR6t83bgMnCl+V6bsuA3UBC62vqZJcfX6MPU8NfO7b0NiBoflTsk9IsrS8Quwf Yyv3nYX4ar4D8BXrOGPS22UwY5RmQGXea5kYPPITkOLJzZFEO82jMshxVX3M/V76o+3K ghaitlK0JZcb3+CG+3SGRiAIQCpEYVpwPWUjvCiXI+Kf6kR2+/vXGuGqX4WSyqueqrUR M4aW9bef3PuaV53WWD8ysSvaZIvayEFmjmwysu1QU72ukL37EhtT0kiTXIWXioFCOoAK KMq4f2tzdReZvdJrNaQPXQRMvCx+Ot/LoFdwuhoD5O3o1tc/nZbkxr2Z1PgsFhHAjzP8 eQ== Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by userp2120.oracle.com with ESMTP id 2kbwfq4h5f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Jul 2018 19:35:25 +0000 Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id w6QJZOrI013410 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Jul 2018 19:35:24 GMT Received: from abhmp0012.oracle.com (abhmp0012.oracle.com [141.146.116.18]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id w6QJZNbT000822; Thu, 26 Jul 2018 19:35:23 GMT Received: from localhost.localdomain (/73.69.118.222) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 26 Jul 2018 12:35:22 -0700 From: Pavel Tatashin To: steven.sistare@oracle.com, daniel.m.jordan@oracle.com, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, kirill.shutemov@linux.intel.com, mhocko@suse.com, linux-mm@kvack.org, dan.j.williams@intel.com, jack@suse.cz, jglisse@redhat.com, jrdr.linux@gmail.com, bhe@redhat.com, gregkh@linuxfoundation.org, vbabka@suse.cz, richard.weiyang@gmail.com, dave.hansen@intel.com, rientjes@google.com, mingo@kernel.org, osalvador@techadventures.net, pasha.tatashin@oracle.com, abdhalee@linux.vnet.ibm.com, mpe@ellerman.id.au Subject: [PATCH v2 3/3] mm: move mirrored memory specific code outside of memmap_init_zone Date: Thu, 26 Jul 2018 15:35:09 -0400 Message-Id: <20180726193509.3326-4-pasha.tatashin@oracle.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180726193509.3326-1-pasha.tatashin@oracle.com> References: <20180726193509.3326-1-pasha.tatashin@oracle.com> X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=8966 signatures=668706 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=2 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1806210000 definitions=main-1807260200 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org memmap_init_zone, is getting complex, because it is called from different contexts: hotplug, and during boot, and also because it must handle some architecture quirks. One of them is mirroed memory. Move the code that decides whether to skip mirrored memory outside of memmap_init_zone, into a separate function. Signed-off-by: Pavel Tatashin Reviewed-by: Oscar Salvador --- mm/page_alloc.c | 74 +++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 40 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 4946c73e549b..02e4b84038f8 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5456,6 +5456,30 @@ void __ref build_all_zonelists(pg_data_t *pgdat) #endif } +/* If zone is ZONE_MOVABLE but memory is mirrored, it is an overlapped init */ +static bool __meminit +overlap_memmap_init(unsigned long zone, unsigned long *pfn) +{ +#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP + static struct memblock_region *r; + + if (mirrored_kernelcore && zone == ZONE_MOVABLE) { + if (!r || *pfn >= memblock_region_memory_end_pfn(r)) { + for_each_memblock(memory, r) { + if (*pfn < memblock_region_memory_end_pfn(r)) + break; + } + } + if (*pfn >= memblock_region_memory_base_pfn(r) && + memblock_is_mirror(r)) { + *pfn = memblock_region_memory_end_pfn(r); + return true; + } + } +#endif + return false; +} + /* * Initially all pages are reserved - free ones are freed * up by free_all_bootmem() once the early boot process is @@ -5465,12 +5489,8 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, unsigned long start_pfn, enum memmap_context context, struct vmem_altmap *altmap) { - unsigned long end_pfn = start_pfn + size; - unsigned long pfn; + unsigned long pfn, end_pfn = start_pfn + size; struct page *page; -#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP - struct memblock_region *r = NULL, *tmp; -#endif if (highest_memmap_pfn < end_pfn - 1) highest_memmap_pfn = end_pfn - 1; @@ -5487,42 +5507,19 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, * There can be holes in boot-time mem_map[]s handed to this * function. They do not exist on hotplugged memory. */ - if (context != MEMMAP_EARLY) - goto not_early; - - if (!early_pfn_valid(pfn)) { - pfn = next_valid_pfn(pfn) - 1; - continue; - } - - if (!early_pfn_in_nid(pfn, nid)) - continue; - -#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP - /* - * Check given memblock attribute by firmware which can affect - * kernel memory layout. If zone==ZONE_MOVABLE but memory is - * mirrored, it's an overlapped memmap init. skip it. - */ - if (mirrored_kernelcore && zone == ZONE_MOVABLE) { - if (!r || pfn >= memblock_region_memory_end_pfn(r)) { - for_each_memblock(memory, tmp) - if (pfn < memblock_region_memory_end_pfn(tmp)) - break; - r = tmp; - } - if (pfn >= memblock_region_memory_base_pfn(r) && - memblock_is_mirror(r)) { - /* already initialized as NORMAL */ - pfn = memblock_region_memory_end_pfn(r); + if (context == MEMMAP_EARLY) { + if (!early_pfn_valid(pfn)) { + pfn = next_valid_pfn(pfn) - 1; continue; } + if (!early_pfn_in_nid(pfn, nid)) + continue; + if (overlap_memmap_init(zone, &pfn)) + continue; + if (defer_init(nid, pfn, end_pfn)) + break; } -#endif - if (defer_init(nid, pfn, end_pfn)) - break; -not_early: page = pfn_to_page(pfn); __init_single_page(page, pfn, zone, nid); if (context == MEMMAP_HOTPLUG) @@ -5539,9 +5536,6 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, * can be created for invalid pages (for alignment) * check here not to call set_pageblock_migratetype() against * pfn out of zone. - * - * Please note that MEMMAP_HOTPLUG path doesn't clear memmap - * because this is done early in sparse_add_one_section */ if (!(pfn & (pageblock_nr_pages - 1))) { set_pageblock_migratetype(page, MIGRATE_MOVABLE); -- 2.18.0