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=-12.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham 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 F22A1C433E2 for ; Tue, 1 Sep 2020 12:46:19 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 8ACAB206CD for ; Tue, 1 Sep 2020 12:46:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=soleen.com header.i=@soleen.com header.b="SMKY9Vrr" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8ACAB206CD Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=soleen.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id EB4B66B0003; Tue, 1 Sep 2020 08:46:18 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E649D6B0037; Tue, 1 Sep 2020 08:46:18 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D7AC26B0055; Tue, 1 Sep 2020 08:46:18 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id BF1B86B0003 for ; Tue, 1 Sep 2020 08:46:18 -0400 (EDT) Received: from smtpin24.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 75419824805A for ; Tue, 1 Sep 2020 12:46:18 +0000 (UTC) X-FDA: 77214465636.24.lunch07_4c031fb27098 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin24.hostedemail.com (Postfix) with ESMTP id 4C4701A4A0 for ; Tue, 1 Sep 2020 12:46:18 +0000 (UTC) X-HE-Tag: lunch07_4c031fb27098 X-Filterd-Recvd-Size: 5042 Received: from mail-qv1-f68.google.com (mail-qv1-f68.google.com [209.85.219.68]) by imf28.hostedemail.com (Postfix) with ESMTP for ; Tue, 1 Sep 2020 12:46:17 +0000 (UTC) Received: by mail-qv1-f68.google.com with SMTP id s15so408946qvv.7 for ; Tue, 01 Sep 2020 05:46:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=soleen.com; s=google; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=0EbJzeQX4jAOlaQv090h8txgX83njocsNSsm4gpQ07M=; b=SMKY9VrrqKbwRQ0E+ot5l7RltqosCCRkRECjN3d2NrsZRpvpNpcjobwDjf2wt4PpGe SbyhYFaiZs12gjEMRtRugWt5x1X7rl8f7Z478CRZhmId+Es1H+eERYn25MLlPfOnup54 jk+ttq/l9yb0tYI9uag64iEDPmQSxYwdJW/W5bs8OR/OfPWDTaJc4qUihUxjpCIWk240 SFLki13Wt3I5UuhaxHHEbwWFKqAnbPXgb5jqr2iNO+hIltZC0fTDQRpo4X7mMiQ54JNX v/hk+J6jVL9tx+bSV1YOAJZ7G0Kld0MCofBHLhbSuVvxZNFGj11e6KGm8ccVQ4Qp2e+K i+ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=0EbJzeQX4jAOlaQv090h8txgX83njocsNSsm4gpQ07M=; b=eylVYwPuOkK/nDB1/hR+88JVMVaiwxwWwAM5h72uWR+o0Dv4O5eTSovnLpj76LJDDj gje8W8+eNbR4kgBLMsqO8OzAu9nEU36d5WwTlazZ1JuUB8++HnROa4M/y7vX9g0MzH53 MkhTCW9PIh7bT5uBc2f7MB7xfxYx4zjF6NdufzUaCGP79B2OXiy3ENcqzkQVW5u7V8E9 ySTIo591eVUlwA/Nd+Gr2WyW70PwyNNhQkbdyKGKrXQEGddbwO3aGq4XHAYaLJP0e5ku rSjA45XDiutrRIPt1/atkIQAWwvCDmLsBtJVniPwXEoCw4AX/tBKHxpiuwNzOOqXmjDc xyig== X-Gm-Message-State: AOAM533OHdP15DltaijW1YNhOGuxDH4maVJIyAVfRtCYohSqTFdy0h3z 5Na3ibDkEVN659iD4ed4ImRrGw== X-Google-Smtp-Source: ABdhPJzI6VbDC4fq5pUk5Y0mvd9RYe8P9jfixUEyckDCLJXrCHMcKaIXzo96VnnXI5FL5iJI6WpL1g== X-Received: by 2002:ad4:524e:: with SMTP id s14mr1683355qvq.36.1598964377184; Tue, 01 Sep 2020 05:46:17 -0700 (PDT) Received: from localhost.localdomain (c-73-69-118-222.hsd1.nh.comcast.net. [73.69.118.222]) by smtp.gmail.com with ESMTPSA id l95sm1275537qte.36.2020.09.01.05.46.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2020 05:46:16 -0700 (PDT) From: Pavel Tatashin To: linux-kernel@vger.kernel.org, akpm@linux-foundation.org, mhocko@suse.com, linux-mm@kvack.org, pasha.tatashin@soleen.com Subject: [PATCH] mm/memory_hotplug: drain per-cpu pages again during memory offline Date: Tue, 1 Sep 2020 08:46:15 -0400 Message-Id: <20200901124615.137200-1-pasha.tatashin@soleen.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Rspamd-Queue-Id: 4C4701A4A0 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam02 Content-Transfer-Encoding: quoted-printable 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: There is a race during page offline that can lead to infinite loop: a page never ends up on a buddy list and __offline_pages() keeps retrying infinitely or until a termination signal is received. Thread#1 - a new process: load_elf_binary begin_new_exec exec_mmap mmput exit_mmap tlb_finish_mmu tlb_flush_mmu release_pages free_unref_page_list free_unref_page_prepare set_pcppage_migratetype(page, migratetype); // Set page->index migration type below MIGRATE_PCPTYPES Thread#2 - hot-removes memory __offline_pages start_isolate_page_range set_migratetype_isolate set_pageblock_migratetype(page, MIGRATE_ISOLATE); Set migration type to MIGRATE_ISOLATE-> set drain_all_pages(zone); // drain per-cpu page lists to buddy allocator. Thread#1 - continue free_unref_page_commit migratetype =3D get_pcppage_migratetype(page); // get old migration type list_add(&page->lru, &pcp->lists[migratetype]); // add new page to already drained pcp list Thread#2 Never drains pcp again, and therefore gets stuck in the loop. The fix is to try to drain per-cpu lists again after check_pages_isolated_cb() fails. Signed-off-by: Pavel Tatashin Cc: stable@vger.kernel.org --- mm/memory_hotplug.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index e9d5ab5d3ca0..d6d54922bfce 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1575,6 +1575,15 @@ static int __ref __offline_pages(unsigned long sta= rt_pfn, /* check again */ ret =3D walk_system_ram_range(start_pfn, end_pfn - start_pfn, NULL, check_pages_isolated_cb); + /* + * per-cpu pages are drained in start_isolate_page_range, but if + * there are still pages that are not free, make sure that we + * drain again, because when we isolated range we might + * have raced with another thread that was adding pages to + * pcp list. + */ + if (ret) + drain_all_pages(zone); } while (ret); =20 /* Ok, all of our target is isolated. --=20 2.25.1