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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5AC27CF649A for ; Sat, 28 Sep 2024 04:56:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C9D606B018A; Sat, 28 Sep 2024 00:56:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C4EB46B018B; Sat, 28 Sep 2024 00:56:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B3C5C6B018C; Sat, 28 Sep 2024 00:56:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 94F526B018A for ; Sat, 28 Sep 2024 00:56:04 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 46B89A108C for ; Sat, 28 Sep 2024 04:56:04 +0000 (UTC) X-FDA: 82612935048.01.5C8CBB0 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf07.hostedemail.com (Postfix) with ESMTP id A8CA340003 for ; Sat, 28 Sep 2024 04:56:02 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=aBb9qXdx; dmarc=none; spf=none (imf07.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727499262; a=rsa-sha256; cv=none; b=0q4ufAxa14dGhTZWLsmOcEOAHV771gTiV8NGkaYuty5mlVdjdprYpGjN/mfAawiS2fRjF2 kl/8PGzxo3QNBV9uBDxHruWII69pkaqO9cHKbWfZIBSaXXr4oFd8JEtw+kZk606SWSVniQ hxHAgOWKk2SOlqROuuPtHXx+6z4N9Wg= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=aBb9qXdx; dmarc=none; spf=none (imf07.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727499262; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=IWDvkB6/noZg3TrATMpedKWM85WTj54DGb44eUE6teA=; b=YkHWlMnMwFzALRkqwKejDRC69gipFAOhm9LffgDo4Dj46w17Gk2KVYKije9RwxqU76qfNA Ql5koMAWFNvlyMdZ1KTiklGLtK7U/6g77AkSaa9JinC6hc2qfFX6qHPDPdMA3BIZGv1bU0 hSTm+QUc8yxSYYf8WN/ZK2vr7D3PpEg= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=IWDvkB6/noZg3TrATMpedKWM85WTj54DGb44eUE6teA=; b=aBb9qXdx7c2Wv3TwA5tQw9C4Ab KyV4gDm8x8WRFH3wrHE61byIHdF1TxZgOKi+DdVoQweH7FIqqCioKUzxjup3NWtl830boaMoV8sKO hgRXubUwdvyYp71aSdS4HtgaCNWOJDXXEVwRhL1l0lRqbjh0N+vX62WWbC7sgW9cex+Cpz1wZKyRj NgGYNd3zQX6rwaTvEPoIkAeZEIDhqKSrnkWlgCFWRAfRA5l/HuTjNTjIEh4J1sv4CJ97AUFm6xpZR y98yh3g6n4Ni7KBV81s5XxqcuqwXwTsTEkokmFTXn6q+0Zg7Y0wnx+kf8i9UrJy0X/XkXg3jwJM+6 8kCAUt3A==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1suPUq-0000000BTsb-3FyH; Sat, 28 Sep 2024 04:55:57 +0000 Date: Sat, 28 Sep 2024 05:55:56 +0100 From: Matthew Wilcox To: Kefeng Wang Cc: Andrew Morton , David Hildenbrand , Oscar Salvador , Miaohe Lin , Naoya Horiguchi , linux-mm@kvack.org, dan.carpenter@linaro.org, Jonathan Cameron Subject: Re: [PATCH v3 1/5] mm: memory_hotplug: remove head variable in do_migrate_range() Message-ID: References: <20240827114728.3212578-1-wangkefeng.wang@huawei.com> <20240827114728.3212578-2-wangkefeng.wang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240827114728.3212578-2-wangkefeng.wang@huawei.com> X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: A8CA340003 X-Stat-Signature: ssokd4epxknhr3zcwcwsh6bzhdbdaybk X-Rspam-User: X-HE-Tag: 1727499362-498175 X-HE-Meta: U2FsdGVkX1+reF4Nd2HMPpgta7TKvPsgogCt52J0Xm0q+vKSowF/4A7jo1unDMUtwPQwN+zvfbYxGfn+PS93c1tFO5houUhgnsQ4dwjJyLywT+9l3EMYKiFbR4YH+hj1tLX1VlcfvzSKqfw3c8tlj4+v/FY+OuowTfD48zfTtwfuZ9XfoGWcSnq3EaGOsMnMNI2WxVUICtHlEB+q++u0YFqeeF8qSMiUvcv8wosSgF2AwM+aTJbmFoBX/zrJ+2rKQwncASS5rkYxfVpyk6vylcaStXm5YXmWQlEbPaRG9WlwWftSWl87DpWTGnBYIy9M3csxZ0l83XhBBLun7I1OOYuz102TSOAXdCtsXTM09y+XyII5ZsnDZKB9hteJficIrEcuznV/i/Fk6XilPv/yApCU7vCksG/iPDW7LGdXhCpnz3juWhHTFEv5h6I/f1fHH9RjhgVsspcc4srksM4Jch2R5rqWcClwF6swByfUJf7BIjSA6Ivo1kexrU+ThbYeFDoR8OX2+eEAyid0JOv2873lmMR5Hdc90DmgrIiC+3kkiEKeW3GFPGpSG8rYtVKPErjV2Gt4Zs9fLZZK/2cmTqXozPa02zR9MsRd4S/YNwlN/CvhRmYHOWSfUK/8QQGugCss8/XGU6GnhgSvIbj2P/4YsOUEWQP+zSEP0rl7oKzJ5aUnjv3Te+1YEQvNVG/s8CLqNbh/UTdaILNvWt5gp7HXP5jioPKxgW2DhtUSaZx4JqiSyV4cY1QE/ZAI0BYUi/QaviBh+T979I41ee8TV6RMuIPNX8IngCPIXWdYRgxbikPed9j7JeIMw3JxQrv5BO5qFhAA8Y7EDylfvKglxr6rrGNmrO28LgEqm3qZX/WrtgeFKYAdWCJOKzwqi6dHACN+O+69TpIofObyD4rWPlVP3O9FkN6sl2m9FTCdhl+/Y03DjhcQtSGJ3+XV/kLNBumqNgHKA5Xx1eGY2A2 vLg9O3s3 lTq1VEvglNnQKdqAsi8biw1MhUqr/K3ennUux35V5O08C1DaDh8we0kfEfzkfDjNxzYFED8d0/A1BVxMz4enzaMqUSxJnMoKLLox72J7+2m8cqgtpOCGsSX0C7BZOULz2n4nz265HdPIJvZVmRHx3bulDUmmkvdW8n45dYacTDnmxsrrxU8pc+xhNjBzL/5xfO6yO0uwJ/03LD5Vuw5QF6PNUTu1lyGZCErGT5GWP6IfLUBhYQs79kuLcH3IPkOJdEWGPFrxy3+HKfy3f5bWYD+LFdAPqRdhXwcAXUcxW1gnmGRqZHaAKqauwW4IZ0eMHmNorvATZ9h296Kz6aLh3PPvvPIHOdrEKNbsF 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: List-Subscribe: List-Unsubscribe: On Tue, Aug 27, 2024 at 07:47:24PM +0800, Kefeng Wang wrote: > Directly use a folio for HugeTLB and THP when calculate the next pfn, then > remove unused head variable. I just noticed this got merged. You're going to hit BUG_ON with it. > - if (PageHuge(page)) { > - pfn = page_to_pfn(head) + compound_nr(head) - 1; > - isolate_hugetlb(folio, &source); > - continue; > - } else if (PageTransHuge(page)) > - pfn = page_to_pfn(head) + thp_nr_pages(page) - 1; > + /* > + * No reference or lock is held on the folio, so it might > + * be modified concurrently (e.g. split). As such, > + * folio_nr_pages() may read garbage. This is fine as the outer > + * loop will revisit the split folio later. > + */ > + if (folio_test_large(folio)) { But it's not fine. Look at the implementation of folio_test_large(): static inline bool folio_test_large(const struct folio *folio) { return folio_test_head(folio); } That's going to be provided by: #define FOLIO_TEST_FLAG(name, page) \ static __always_inline bool folio_test_##name(const struct folio *folio) \ { return test_bit(PG_##name, const_folio_flags(folio, page)); } and here's the BUG: static const unsigned long *const_folio_flags(const struct folio *folio, unsigned n) { const struct page *page = &folio->page; VM_BUG_ON_PGFLAGS(PageTail(page), page); VM_BUG_ON_PGFLAGS(n > 0 && !test_bit(PG_head, &page->flags), page); return &page[n].flags; } (this page can be transformed from a head page to a tail page because, as the comment notes, we don't hold a reference. Please back this out.