From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 26452ECE58E for ; Tue, 8 Oct 2019 14:37:09 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id CB4EC20659 for ; Tue, 8 Oct 2019 14:37:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mz4tTuSo" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CB4EC20659 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 78E1F8E0006; Tue, 8 Oct 2019 10:37:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 716FC8E0003; Tue, 8 Oct 2019 10:37:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5B75D8E0006; Tue, 8 Oct 2019 10:37:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 30DBF8E0003 for ; Tue, 8 Oct 2019 10:37:08 -0400 (EDT) Received: from smtpin22.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with SMTP id C9788824CA30 for ; Tue, 8 Oct 2019 14:37:07 +0000 (UTC) X-FDA: 76020869694.22.wire67_3e2eb2518694a X-HE-Tag: wire67_3e2eb2518694a X-Filterd-Recvd-Size: 6021 Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.196]) by imf04.hostedemail.com (Postfix) with ESMTP for ; Tue, 8 Oct 2019 14:37:07 +0000 (UTC) Received: by mail-pg1-f196.google.com with SMTP id z12so10331486pgp.9 for ; Tue, 08 Oct 2019 07:37:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=/LkLNZyXllVODaNA4v6SjRbRTQO3k0FhwJL3ACT+pc8=; b=mz4tTuSopA61Uk2c4cwTxPD1ttgQPVt23a8s2ab5wZNvSsN58+xofcbe8p2AlOqMvb q0ClxaWzdCAX/ZztkYIusI1VP7spYpRsUEOay6if9370EKjvHasB+I5mypjmn9UPxdYJ 4nCJ0s1uvUBHMfthAvg+E+SrYLAfbZwlB+3K/THlXoNXtIuQf3UBLxuGPnnpoSZO0TRh /4pEiyVn8CBlYUBVgJloR5A405qAtMBHasSYUesTHSYrn7qfIqt9AihFG2SMmHG0J6jj 7BIY5SQiUQvIAUaGSCYbHkSsTWihgp/2ggOh3m7dISP6JA9Q7Jyy5LXLyFjyRjSpxWih R/og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=/LkLNZyXllVODaNA4v6SjRbRTQO3k0FhwJL3ACT+pc8=; b=SRBU6XonNyqCJ5sYRj3FjWMVLxmWpazAu+vaStkkoIuckNNguC8XV0xIOQxObwHRbV 23oSjAE391tRwZNVW3HR/Xomh8QUmxu/SLyRrcj9MXuvkEqkJCpHZzO6LgcbgxFiazlN FmFXAB2IBNkc5jsHXLy64g1StrEtgDOdCC5LknDic2lc9WubujkWynHc1ukraoMwhDny TUblx7PR+XiQLepqwKfcfxsd7JpBKayOOuEwp852D6ePUjFhlYTZV97pfyFRu+6wKipg 0CiJ6Y8U96p3pYTsDeqJLWMpLsAimGwREMzjwQp8874x82sFi+fDjB7/hp8ChuS8/+OH 1UXQ== X-Gm-Message-State: APjAAAXgyetMAOgVO+LfkzJLvQZU8KFaMEQQ8GeED31iOU2P+hsfFass hIwI+cyYvj6c+CdZuQWjN9k= X-Google-Smtp-Source: APXvYqzVmLYxVnf7lMb8Y0OcU8us4+UeXkrqpUjxJeb+iLiGDzZdEaRy3btAdo69l4i1EIElQVrmLw== X-Received: by 2002:a63:a48:: with SMTP id z8mr19160809pgk.328.1570545426091; Tue, 08 Oct 2019 07:37:06 -0700 (PDT) Received: from localhost.corp.microsoft.com ([167.220.255.39]) by smtp.googlemail.com with ESMTPSA id 74sm20603109pfy.78.2019.10.08.07.36.55 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 08 Oct 2019 07:37:05 -0700 (PDT) From: lantianyu1986@gmail.com X-Google-Original-From: Tianyu.Lan@microsoft.com To: pbonzini@redhat.com, rkrcmar@redhat.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, hpa@zytor.com, x86@kernel.org, dave.hansen@linux.intel.com, luto@kernel.org, peterz@infradead.org, kys@microsoft.com, haiyangz@microsoft.com, sthemmin@microsoft.com, sashal@kernel.org, akpm@linux-foundation.org, rppt@linux.ibm.com, jgross@suse.com, mhocko@suse.com, paul.burton@mips.com, m.mizuma@jp.fujitsu.com, huang.zijiang@zte.com.cn, karahmed@amazon.de, dan.j.williams@intel.com, bhelgaas@google.com, osalvador@suse.de, rdunlap@infradead.org, richardw.yang@linux.intel.com, david@redhat.com, pavel.tatashin@microsoft.com, cai@lca.pw, arunks@codeaurora.org, vbabka@suse.cz, mgorman@techsingularity.net, alexander.h.duyck@linux.intel.com, glider@google.com, logang@deltatee.com, bsingharora@gmail.com, bhe@redhat.com, Tianyu.Lan@microsoft.com, michael.h.kelley@microsoft.com Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-mm@kvack.org, vkuznets@redhat.com Subject: [RFC PATCH] mm: set memory section offline when all its pages are offline. Date: Tue, 8 Oct 2019 22:36:48 +0800 Message-Id: <20191008143648.11882-1-Tianyu.Lan@microsoft.com> X-Mailer: git-send-email 2.14.5 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: From: Tianyu Lan If size of offline memory region passed to offline_pages() is not aligned with PAGES_PER_SECTION, memory section will be set to offline in the offline_mem_sections() with some pages of memory section online. Fix it, Update memory section status after marking offline pages as "reserved" in __offline_isolated_pages() and check all pages in memory are reserved or not before setting memory section offline. Signed-off-by: Tianyu Lan --- This patch is to prepare for hot remove memory function in Hyper-V balloon driver. It requests to offline memory with random size. --- mm/page_alloc.c | 3 ++- mm/sparse.c | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index dbd0d5cbbcbb..cc02866924ae 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -8540,7 +8540,6 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn) if (pfn == end_pfn) return offlined_pages; - offline_mem_sections(pfn, end_pfn); zone = page_zone(pfn_to_page(pfn)); spin_lock_irqsave(&zone->lock, flags); pfn = start_pfn; @@ -8576,6 +8575,8 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn) } spin_unlock_irqrestore(&zone->lock, flags); + offline_mem_sections(pfn, end_pfn); + return offlined_pages; } #endif diff --git a/mm/sparse.c b/mm/sparse.c index fd13166949b5..eb5860487b84 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -571,6 +571,7 @@ void online_mem_sections(unsigned long start_pfn, unsigned long end_pfn) void offline_mem_sections(unsigned long start_pfn, unsigned long end_pfn) { unsigned long pfn; + int i; for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) { unsigned long section_nr = pfn_to_section_nr(pfn); @@ -583,6 +584,15 @@ void offline_mem_sections(unsigned long start_pfn, unsigned long end_pfn) if (WARN_ON(!valid_section_nr(section_nr))) continue; + /* + * Check whether all pages in the section are reserverd before + * setting setction offline. + */ + for (i = 0; i < PAGES_PER_SECTION; i++) + if (!PageReserved(pfn_to_page( + SECTION_ALIGN_DOWN(pfn + i)))) + continue; + ms = __nr_to_section(section_nr); ms->section_mem_map &= ~SECTION_IS_ONLINE; } -- 2.14.5