From patchwork Thu Aug 23 18:25:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masayoshi Mizuma X-Patchwork-Id: 10574509 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8495813B8 for ; Thu, 23 Aug 2018 18:25:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 694122C4F3 for ; Thu, 23 Aug 2018 18:25:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5D3652C504; Thu, 23 Aug 2018 18:25:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E69422C4F3 for ; Thu, 23 Aug 2018 18:25:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D35536B2B6E; Thu, 23 Aug 2018 14:25:34 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id CE29C6B2B6F; Thu, 23 Aug 2018 14:25:34 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BFAA66B2B70; Thu, 23 Aug 2018 14:25:34 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qk0-f198.google.com (mail-qk0-f198.google.com [209.85.220.198]) by kanga.kvack.org (Postfix) with ESMTP id 949F46B2B6E for ; Thu, 23 Aug 2018 14:25:34 -0400 (EDT) Received: by mail-qk0-f198.google.com with SMTP id x204-v6so5368071qka.6 for ; Thu, 23 Aug 2018 11:25:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id; bh=XjIdE1a/8CcwW+OVb+YmWZJQvTVCpWbzLau9N26TmrA=; b=CXtDmKvu4Y9MY4MBjT6HCzwbqImS6t3YOP0SFzEw7rd6VDpD+NL0kZdWdwcIJM5AWS d/APYK47m7+//kg8XnzF1UGtrQw60nnk9HLr3jgVvPiyvDPuzED7zbqlfaGBQ4b5qPHu PLqqui1mszIZKD3av42obwauANwkpuRY7xYc0+8KfWmwzUfjMdOkI3xuwzebJlrpWj2W Svg/enYyrgghL9Mq9FTT6LS/3IWEZj0Br4kzcrKjI74FEPXyw2ik2LtFnpyRs0r+9Hsh zN7D75JS3L5/RQOKtrSfaRAAzAjuSacvDPRUVvi7JL0lYeizunjBwlcuK6KIWcRzW7MG b4zA== X-Gm-Message-State: APzg51BOtQOVGDOJXIYcxz+681MxX3jbZtYZ82y5gmxyUpEh6y38ICFB AyK1kxlK4qgigZZY/P3QO2WR/Q5LFRux6l6gAQzHj81EHV/75U+ldm299DPpMuKMG3P5TSOD5RO pxcZEor+LbHTigLvQiKPI/AB2Vttk4Zl+HR1lgZ+IyAc/J9g3eRkem8ZJ3JMs6+3l51V4oF0Vi7 npFvSNyzZO+QdHIvGSQIG7vBmi6y26Iufyy0ZbcV2oFGG+ab4hdHmwbvbl6zNw7xcIMNy5Wf8MR mg/58CO+CvgmckpI4naHqgp1KMUqwiZGOZo1MDUr5XM5nsL2P6v1DQ6AtCx9u7yGFLOasKCQ0Lp hvfqc+xSUsDOAVeZNYl0EMt88wU2wpGQJMv+2UDEru53CJI44ZYyjEUaJonHmJRIrwGzubEYzNs A X-Received: by 2002:ad4:414b:: with SMTP id z11-v6mr18557303qvp.77.1535048734331; Thu, 23 Aug 2018 11:25:34 -0700 (PDT) X-Received: by 2002:ad4:414b:: with SMTP id z11-v6mr18557247qvp.77.1535048733593; Thu, 23 Aug 2018 11:25:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535048733; cv=none; d=google.com; s=arc-20160816; b=wp24523RDmtZBttluDWLdDk4EfB4NgdFL20piTNcX/VlpR2atHEJeKpWSOkkdIX3td kEjc3LFnz9d7laFrFEn6h1uXIOqeCQgo9v9mqmdVVqhYekUJuBu3Bn1coU+YuH7EVMp5 4ughbjRNzysdxo7py5gL1PiFsxRq6/MtwVxN/Ci6Lp4fVRDrf6kIw82D/LURrfHEHjaX +JjTfB3osWaJdMlTKg1x7PSWZQjANU8lfBj1CAo9fr9f9mB5pOGKKzF+8HnQKHu9fH8W cSadlKh5hFQSrTQhqBTiHXcEi7ky+lTBQ+tgGrxDpNlkzJHPqTp7GNlxvdGsWoqtSYlB 4byg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=XjIdE1a/8CcwW+OVb+YmWZJQvTVCpWbzLau9N26TmrA=; b=H81qWuI7Bg+WSBigcm83iUFUjNNBSLWwHcwXycWsN70Ye94WYuQJOoKt6oeCNq784r HRt2n2JD7reGx7PMj70P4nbrG5Opiy2rHgx6HGhL8/wyeUP96lZl94Qz6cMbRcKHxJte 7UVSknPgrX/xi/8SFzE2MtnFsspN3B8p1ihF4ym2PnGvjn/VLQ8TgyY7ThwwrNhp/BZq jzL/P8R3f+N7C0h5yl3TpN7B9baJd1xivYZhczzoI7MXmsL4yUUxdoNA2xRZ7A5reD0m 35u74yJMN3RhLbRfK9vaoLdyMmmpa8rLw1hrGm89KPrduzO/BhsdCHYjRC03WyZtbHIm GPuw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=mFLDXqvc; spf=pass (google.com: domain of msys.mizuma@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=msys.mizuma@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id d14-v6sor2705222qvj.63.2018.08.23.11.25.33 for (Google Transport Security); Thu, 23 Aug 2018 11:25:33 -0700 (PDT) Received-SPF: pass (google.com: domain of msys.mizuma@gmail.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=mFLDXqvc; spf=pass (google.com: domain of msys.mizuma@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=msys.mizuma@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=XjIdE1a/8CcwW+OVb+YmWZJQvTVCpWbzLau9N26TmrA=; b=mFLDXqvcVaUL5HlBdbKNL+3MXRWEeTJtjWQKhgvsmNqfSUwMmYsPpdIbEql9ZFpOlu MgJmDYFhHSxnIe86bO0gyQvBW+4iocX3ZDGV5H2OLXT4WJriZcYnLvZYBnlAiNsGXHBS Ofdsd8tbqLpg1K9UrSXMoUOLVTEQrhgmAoeSP0GxzAJF7yOchmzbxW2ng3CC2BsG90B4 eT33AZwMkRYHMoqoyyQlODc5E7fyPb42oaEB5zHp4qPP7J4ggPgj0N0QHNE+Io2UioqG /hGRYu13CAOUI/6l11sbdRW+RzPaHrHqmVw7jE8RTEcTVjzBmSUR8CLJv/turKm7iGPX dgAw== X-Google-Smtp-Source: ANB0VdYU/yxgbxohH3wKRpg/NWHzRtfCkAO/MuwiXp27UTAxQVe83pCgQ1KDHr7x80xQJ1JDuQ5uHw== X-Received: by 2002:a0c:e083:: with SMTP id l3-v6mr21512515qvk.1.1535048733229; Thu, 23 Aug 2018 11:25:33 -0700 (PDT) Received: from gabell.bos.redhat.com (nat-pool-bos-t.redhat.com. [66.187.233.206]) by smtp.gmail.com with ESMTPSA id o7-v6sm1233582qtp.75.2018.08.23.11.25.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 23 Aug 2018 11:25:32 -0700 (PDT) From: Masayoshi Mizuma To: linux-mm@kvack.org, Naoya Horiguchi Cc: Masayoshi Mizuma , Masayoshi Mizuma , linux-kernel@vger.kernel.org, x86@kernel.org Subject: [PATCH 1/2] Revert "x86/e820: put !E820_TYPE_RAM regions into memblock.reserved" Date: Thu, 23 Aug 2018 14:25:12 -0400 Message-Id: <20180823182513.8801-1-msys.mizuma@gmail.com> X-Mailer: git-send-email 2.17.1 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: Masayoshi Mizuma commit 124049decbb1 ("x86/e820: put !E820_TYPE_RAM regions into memblock.reserved") breaks movable_node kernel option because it changed the memory gap range to reserved memblock. So, the node is marked as Normal zone even if the SRAT has Hot plaggable affinity. ===================================================================== kernel: BIOS-e820: [mem 0x0000180000000000-0x0000180fffffffff] usable kernel: BIOS-e820: [mem 0x00001c0000000000-0x00001c0fffffffff] usable ... kernel: reserved[0x12]#011[0x0000181000000000-0x00001bffffffffff], 0x000003f000000000 bytes flags: 0x0 ... kernel: ACPI: SRAT: Node 2 PXM 6 [mem 0x180000000000-0x1bffffffffff] hotplug kernel: ACPI: SRAT: Node 3 PXM 7 [mem 0x1c0000000000-0x1fffffffffff] hotplug ... kernel: Movable zone start for each node kernel: Node 3: 0x00001c0000000000 kernel: Early memory node ranges ... ===================================================================== Naoya's v1 patch [*] fixes the original issue and this movable_node issue doesn't occur. Let's revert commit 124049decbb1 ("x86/e820: put !E820_TYPE_RAM regions into memblock.reserved") and apply the v1 patch. [*] https://lkml.org/lkml/2018/6/13/27 Signed-off-by: Masayoshi Mizuma Reviewed-by: Pavel Tatashin --- arch/x86/kernel/e820.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index c88c23c658c1..d1f25c831447 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c @@ -1248,7 +1248,6 @@ void __init e820__memblock_setup(void) { int i; u64 end; - u64 addr = 0; /* * The bootstrap memblock region count maximum is 128 entries @@ -1265,21 +1264,13 @@ void __init e820__memblock_setup(void) struct e820_entry *entry = &e820_table->entries[i]; end = entry->addr + entry->size; - if (addr < entry->addr) - memblock_reserve(addr, entry->addr - addr); - addr = end; if (end != (resource_size_t)end) continue; - /* - * all !E820_TYPE_RAM ranges (including gap ranges) are put - * into memblock.reserved to make sure that struct pages in - * such regions are not left uninitialized after bootup. - */ if (entry->type != E820_TYPE_RAM && entry->type != E820_TYPE_RESERVED_KERN) - memblock_reserve(entry->addr, entry->size); - else - memblock_add(entry->addr, entry->size); + continue; + + memblock_add(entry->addr, entry->size); } /* Throw away partial pages: */ From patchwork Thu Aug 23 18:25:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masayoshi Mizuma X-Patchwork-Id: 10574511 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 258F95A4 for ; Thu, 23 Aug 2018 18:25:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 13CFC2C4B6 for ; Thu, 23 Aug 2018 18:25:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 07AF42C4FE; Thu, 23 Aug 2018 18:25:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 240A22C4B6 for ; Thu, 23 Aug 2018 18:25:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 395956B2B70; Thu, 23 Aug 2018 14:25:44 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 3467D6B2B71; Thu, 23 Aug 2018 14:25:44 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 234AC6B2B72; Thu, 23 Aug 2018 14:25:44 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qk0-f200.google.com (mail-qk0-f200.google.com [209.85.220.200]) by kanga.kvack.org (Postfix) with ESMTP id EA0526B2B70 for ; Thu, 23 Aug 2018 14:25:43 -0400 (EDT) Received: by mail-qk0-f200.google.com with SMTP id u129-v6so5394321qkf.15 for ; Thu, 23 Aug 2018 11:25:43 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:from:to:cc:subject:date :message-id:in-reply-to:references; bh=7+vJtbBGc5Wa+aMAWFCzB3tXwfJ28ewXy4EQlUruX64=; b=t5IIF5yn0GOi72G4K95Y9mMTBvXzYH+BC/2tLGRafMGXhR0LsiyXBphvQw4wrJZ+iN lPLzBC7yHhJT9SD+JH4U0BxqPMIjW54/LGXrx8BVjd4YE+3JVN57881efr6DcZ21o2as +bXw7ODQTYwnRTo/4G+ZMkKIXl4nWyqA7xf2hZIAXayE71F9kCf4SBRqb5MU1p79gXho MON2xy/+xBb137RWm12I8RrnEyuNImpGujjEMhWB0Xqk7EYf7JSIOr5EwB64X3Y63hYE QJ0BtXvzH2C4d//OxxEQAF8FAT7r0bEoAZgA9zs2i+qqB7zLLJr9vS9/jfg07ICNzCmd oPgw== X-Gm-Message-State: AOUpUlEncLaskg0vwNjjZLTzHWLYnQqbvxMHc2u/lY6S5twV48UpA4ET jgAEBZu8Yrr6wNIXVKltmK7oRa8jsUJJD4/ESaKxTqjPHkhcEyNEHJ+GTvxIv8kIGhgzjYAqZv+ wTwsxgQtgUDI98giHpzdhfAUcFr7/YWt/eXMHWYc25l3Q8MYaTyZPXouoJwiTD9SYPPeSjKche3 oiUvNmMprgzGyuaY+JS3BxIsbYL74SPtET2Zfjhm6/JnDS48FtpriltKVzJs8MwwSgjR7Uwsbwn LKzDGbvJZ62/DYXP4Mi9IT2EtKmZvNX5MQd61BiR2yxNl/DHbs+ncDHx5jWWDNuMcu8WiH+yarr ro+LJ2vNrqRPUgKPYAGaxRJ/O5p55uRQcsch6DzdUYg9ITsxDW9/HlvGjmRSKjbF6KSwGqEhb+w l X-Received: by 2002:ac8:232b:: with SMTP id a40-v6mr62252973qta.40.1535048743638; Thu, 23 Aug 2018 11:25:43 -0700 (PDT) X-Received: by 2002:ac8:232b:: with SMTP id a40-v6mr62252904qta.40.1535048742597; Thu, 23 Aug 2018 11:25:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535048742; cv=none; d=google.com; s=arc-20160816; b=so/OhgbX4i/4e8R/oQLM5TVzOkhRNFDVUeiV4K/HX45Ef9LaAKc55cfZ1qSl1sxd3/ dtrLxlz26CDVk3xOmb2SC9UdgjD/rX1gdij7dl1jX7aiMV49pAFDyUZvezNkIGtEl+/0 oq55ZCGJgJ4cZoXG92nozKRKtslmvbXz4PrsVBlKog0netJC7mn5uKiVymelwr7CEfS8 rZYSyG0kWAUCQT0EykFL9MoOiu6tDPC8y8fP98IluD1/0vqDAxangTXfod4oDlRxaHa0 LzmXn/f6ZKjtlSVdq/LF5JVuu7FqKOY6NRTsFeuRVe5SHwYFLBZyKHGOBfYoEx8Z5xjX q/hA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=7+vJtbBGc5Wa+aMAWFCzB3tXwfJ28ewXy4EQlUruX64=; b=b+JwnLej5IuqBZCS0eYklrx2dJZQqoebrY3MCRO6nHrgUon7JUk3MJmzvhYmGVwH7h pc1x7fERVKpNBYNu27iHXU++ZEixQ95a14V9jIP7b+NrvaY3KW2VAqH1HiPSXu76Earb Z4ea5eV066k1Gmd6kpv9H0aubWnHBE0hQuVF2XBJ5uyfv6V8h5SdZkabmUTUe0oSuRwT Kfo/8ZdSlr2QS0ERVhP/oH9oeZ4stIMDKDeydAth09XwRkfKqdv8sY6ieops8/DdSt93 5YAo+0mPMS6yxLnvSF7b6zVleEmjtnqVWsDmT5m6yUTxXn/Xgz16qvEYBuLs14a/sKfN xEVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="D3/RAlDt"; spf=pass (google.com: domain of msys.mizuma@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=msys.mizuma@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id v53-v6sor2744882qvj.44.2018.08.23.11.25.42 for (Google Transport Security); Thu, 23 Aug 2018 11:25:42 -0700 (PDT) Received-SPF: pass (google.com: domain of msys.mizuma@gmail.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="D3/RAlDt"; spf=pass (google.com: domain of msys.mizuma@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=msys.mizuma@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7+vJtbBGc5Wa+aMAWFCzB3tXwfJ28ewXy4EQlUruX64=; b=D3/RAlDtuUJoQQU3rBB5kBJyLVAil7aAosKZAZlJGmbuxyXk+R9EJZvnU4GfpgBCz6 zQaJ8PK/qVwW5elgqktk8aHKkuEWtAmeMJN4tXgIgHCtGzi+Q7KGIXaoUZjEALB3vy5a jMwkwoSKMwvtzEfTuYcC8vNmAhGwwNvbXU8fD0oMtMVU9oUco9DXhyYUaQ39SMgTsPdL iWJWJthgHiYveHMwiymnfdQE6KdbfXNAS192c2RuzI1HH8tCfb/FnvFcE4Ma6gN4ZTWQ vBI88eRNjl95/gc24j2BHcRndZTwilsKGoOpYsb1i/dRDrOElG4BHOWfuCEvXMDNHUbM xL/w== X-Google-Smtp-Source: AA+uWPwt7XbeEFuzwkEzveKblgtH/g/ac7H9CnmZaZQU+YhO9fVruIhPZziOu8OtEQALnGQjglVmIA== X-Received: by 2002:a0c:c489:: with SMTP id u9-v6mr57474052qvi.11.1535048742186; Thu, 23 Aug 2018 11:25:42 -0700 (PDT) Received: from gabell.bos.redhat.com (nat-pool-bos-t.redhat.com. [66.187.233.206]) by smtp.gmail.com with ESMTPSA id o7-v6sm1233582qtp.75.2018.08.23.11.25.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 23 Aug 2018 11:25:41 -0700 (PDT) From: Masayoshi Mizuma To: linux-mm@kvack.org, Naoya Horiguchi Cc: Masayoshi Mizuma , linux-kernel@vger.kernel.org, x86@kernel.org Subject: [PATCH 2/2] mm: zero remaining unavailable struct pages Date: Thu, 23 Aug 2018 14:25:13 -0400 Message-Id: <20180823182513.8801-2-msys.mizuma@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180823182513.8801-1-msys.mizuma@gmail.com> References: <20180823182513.8801-1-msys.mizuma@gmail.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: Naoya Horiguchi There is a kernel panic that is triggered when reading /proc/kpageflags on the kernel booted with kernel parameter 'memmap=nn[KMG]!ss[KMG]': BUG: unable to handle kernel paging request at fffffffffffffffe PGD 9b20e067 P4D 9b20e067 PUD 9b210067 PMD 0 Oops: 0000 [#1] SMP PTI CPU: 2 PID: 1728 Comm: page-types Not tainted 4.17.0-rc6-mm1-v4.17-rc6-180605-0816-00236-g2dfb086ef02c+ #160 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.0-2.fc28 04/01/2014 RIP: 0010:stable_page_flags+0x27/0x3c0 Code: 00 00 00 0f 1f 44 00 00 48 85 ff 0f 84 a0 03 00 00 41 54 55 49 89 fc 53 48 8b 57 08 48 8b 2f 48 8d 42 ff 83 e2 01 48 0f 44 c7 <48> 8b 00 f6 c4 01 0f 84 10 03 00 00 31 db 49 8b 54 24 08 4c 89 e7 RSP: 0018:ffffbbd44111fde0 EFLAGS: 00010202 RAX: fffffffffffffffe RBX: 00007fffffffeff9 RCX: 0000000000000000 RDX: 0000000000000001 RSI: 0000000000000202 RDI: ffffed1182fff5c0 RBP: ffffffffffffffff R08: 0000000000000001 R09: 0000000000000001 R10: ffffbbd44111fed8 R11: 0000000000000000 R12: ffffed1182fff5c0 R13: 00000000000bffd7 R14: 0000000002fff5c0 R15: ffffbbd44111ff10 FS: 00007efc4335a500(0000) GS:ffff93a5bfc00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: fffffffffffffffe CR3: 00000000b2a58000 CR4: 00000000001406e0 Call Trace: kpageflags_read+0xc7/0x120 proc_reg_read+0x3c/0x60 __vfs_read+0x36/0x170 vfs_read+0x89/0x130 ksys_pread64+0x71/0x90 do_syscall_64+0x5b/0x160 entry_SYSCALL_64_after_hwframe+0x44/0xa9 RIP: 0033:0x7efc42e75e23 Code: 09 00 ba 9f 01 00 00 e8 ab 81 f4 ff 66 2e 0f 1f 84 00 00 00 00 00 90 83 3d 29 0a 2d 00 00 75 13 49 89 ca b8 11 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 34 c3 48 83 ec 08 e8 db d3 01 00 48 89 04 24 According to kernel bisection, this problem became visible due to commit f7f99100d8d9 which changes how struct pages are initialized. Memblock layout affects the pfn ranges covered by node/zone. Consider that we have a VM with 2 NUMA nodes and each node has 4GB memory, and the default (no memmap= given) memblock layout is like below: MEMBLOCK configuration: memory size = 0x00000001fff75c00 reserved size = 0x000000000300c000 memory.cnt = 0x4 memory[0x0] [0x0000000000001000-0x000000000009efff], 0x000000000009e000 bytes on node 0 flags: 0x0 memory[0x1] [0x0000000000100000-0x00000000bffd6fff], 0x00000000bfed7000 bytes on node 0 flags: 0x0 memory[0x2] [0x0000000100000000-0x000000013fffffff], 0x0000000040000000 bytes on node 0 flags: 0x0 memory[0x3] [0x0000000140000000-0x000000023fffffff], 0x0000000100000000 bytes on node 1 flags: 0x0 ... If you give memmap=1G!4G (so it just covers memory[0x2]), the range [0x100000000-0x13fffffff] is gone: MEMBLOCK configuration: memory size = 0x00000001bff75c00 reserved size = 0x000000000300c000 memory.cnt = 0x3 memory[0x0] [0x0000000000001000-0x000000000009efff], 0x000000000009e000 bytes on node 0 flags: 0x0 memory[0x1] [0x0000000000100000-0x00000000bffd6fff], 0x00000000bfed7000 bytes on node 0 flags: 0x0 memory[0x2] [0x0000000140000000-0x000000023fffffff], 0x0000000100000000 bytes on node 1 flags: 0x0 ... This causes shrinking node 0's pfn range because it is calculated by the address range of memblock.memory. So some of struct pages in the gap range are left uninitialized. We have a function zero_resv_unavail() which does zeroing the struct pages outside memblock.memory, but currently it covers only the reserved unavailable range (i.e. memblock.memory && !memblock.reserved). This patch extends it to cover all unavailable range, which fixes the reported issue. Fixes: f7f99100d8d9 ("mm: stop zeroing memory during allocation in vmemmap") Signed-off-by: Naoya Horiguchi Tested-by: Oscar Salvador Tested-by: Masayoshi Mizuma Reviewed-by: Pavel Tatashin Signed-off-by: Pavel Tatashin --- include/linux/memblock.h | 15 --------------- mm/page_alloc.c | 36 +++++++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 516920549378..2acdd046df2d 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -265,21 +265,6 @@ void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, for_each_mem_range_rev(i, &memblock.memory, &memblock.reserved, \ nid, flags, p_start, p_end, p_nid) -/** - * for_each_resv_unavail_range - iterate through reserved and unavailable memory - * @i: u64 used as loop variable - * @p_start: ptr to phys_addr_t for start address of the range, can be %NULL - * @p_end: ptr to phys_addr_t for end address of the range, can be %NULL - * - * Walks over unavailable but reserved (reserved && !memory) areas of memblock. - * Available as soon as memblock is initialized. - * Note: because this memory does not belong to any physical node, flags and - * nid arguments do not make sense and thus not exported as arguments. - */ -#define for_each_resv_unavail_range(i, p_start, p_end) \ - for_each_mem_range(i, &memblock.reserved, &memblock.memory, \ - NUMA_NO_NODE, MEMBLOCK_NONE, p_start, p_end, NULL) - static inline void memblock_set_region_flags(struct memblock_region *r, enum memblock_flags flags) { diff --git a/mm/page_alloc.c b/mm/page_alloc.c index c677c1506d73..bdd3cba1d547 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -6447,29 +6447,42 @@ void __init free_area_init_node(int nid, unsigned long *zones_size, * struct pages which are reserved in memblock allocator and their fields * may be accessed (for example page_to_pfn() on some configuration accesses * flags). We must explicitly zero those struct pages. + * + * This function also addresses a similar issue where struct pages are left + * uninitialized because the physical address range is not covered by + * memblock.memory or memblock.reserved. That could happen when memblock + * layout is manually configured via memmap=. */ void __init zero_resv_unavail(void) { phys_addr_t start, end; unsigned long pfn; u64 i, pgcnt; + phys_addr_t next = 0; /* - * Loop through ranges that are reserved, but do not have reported - * physical memory backing. + * Loop through unavailable ranges not covered by memblock.memory. */ pgcnt = 0; - for_each_resv_unavail_range(i, &start, &end) { - for (pfn = PFN_DOWN(start); pfn < PFN_UP(end); pfn++) { - if (!pfn_valid(ALIGN_DOWN(pfn, pageblock_nr_pages))) { - pfn = ALIGN_DOWN(pfn, pageblock_nr_pages) - + pageblock_nr_pages - 1; - continue; + for_each_mem_range(i, &memblock.memory, NULL, + NUMA_NO_NODE, MEMBLOCK_NONE, &start, &end, NULL) { + if (next < start) { + for (pfn = PFN_DOWN(next); pfn < PFN_UP(start); pfn++) { + if (!pfn_valid(ALIGN_DOWN(pfn, pageblock_nr_pages))) + continue; + mm_zero_struct_page(pfn_to_page(pfn)); + pgcnt++; } - mm_zero_struct_page(pfn_to_page(pfn)); - pgcnt++; } + next = end; } + for (pfn = PFN_DOWN(next); pfn < max_pfn; pfn++) { + if (!pfn_valid(ALIGN_DOWN(pfn, pageblock_nr_pages))) + continue; + mm_zero_struct_page(pfn_to_page(pfn)); + pgcnt++; + } + /* * Struct pages that do not have backing memory. This could be because @@ -6479,7 +6492,8 @@ void __init zero_resv_unavail(void) * this code can be removed. */ if (pgcnt) - pr_info("Reserved but unavailable: %lld pages", pgcnt); + pr_info("Zeroed struct page in unavailable ranges: %lld pages", pgcnt); + } #endif /* CONFIG_HAVE_MEMBLOCK && !CONFIG_FLAT_NODE_MEM_MAP */