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 C5049C4345F for ; Fri, 12 Apr 2024 08:08:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 57F0E6B0095; Fri, 12 Apr 2024 04:08:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 52F3F6B0096; Fri, 12 Apr 2024 04:08:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3F7CE6B0098; Fri, 12 Apr 2024 04:08:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 1E8716B0095 for ; Fri, 12 Apr 2024 04:08:44 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id C6D0F120D7B for ; Fri, 12 Apr 2024 08:08:43 +0000 (UTC) X-FDA: 82000153326.23.1B8ED16 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by imf02.hostedemail.com (Postfix) with ESMTP id 38A4480008 for ; Fri, 12 Apr 2024 08:08:39 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf02.hostedemail.com: domain of linmiaohe@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=linmiaohe@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1712909321; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ea7mPj4FNeTa4nsXwIW0X310sisf5CPBoXVerlzG5iU=; b=b7SS2FSFh321S0WyIEF3QNzrsFd0KHJ/Y5e/6PgarCodImmqcT5G9M8aQ7S20ehweWw4+N ib8uRoVfKFrQrs4cTO0abczBoKO8fV9N197g25snPV/kVSnU5k61d9jtn4NwA9up7UztRs ZOe+CsixAZywNKCRK4I4OkofjZWSgaI= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf02.hostedemail.com: domain of linmiaohe@huawei.com designates 45.249.212.187 as permitted sender) smtp.mailfrom=linmiaohe@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1712909321; a=rsa-sha256; cv=none; b=u6d/6kgxfd/ehMYiCZmlq+v0QjiXUmm5iB8IMVDCGehQr1Q8s63mjua+8Pu7TmQSI7w67o UQ6drIRahkVhJeEW7Ek+EezJUF9ngTfo53Tent9OBeOsL9Bbd1mA9KrYrQIZ299ngUdu5H le1NnLR/+jjp8v2DXHXEPm+a2X5GsFo= Received: from mail.maildlp.com (unknown [172.19.88.194]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4VG8JY33RzztSg9; Fri, 12 Apr 2024 16:05:49 +0800 (CST) Received: from canpemm500002.china.huawei.com (unknown [7.192.104.244]) by mail.maildlp.com (Postfix) with ESMTPS id 5442614010C; Fri, 12 Apr 2024 16:08:35 +0800 (CST) Received: from [10.173.135.154] (10.173.135.154) by canpemm500002.china.huawei.com (7.192.104.244) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Fri, 12 Apr 2024 16:08:34 +0800 Subject: Re: [PATCH] mm/hugetlb: convert dissolve_free_huge_pages() to folios To: Sidhartha Kumar CC: , , , , , , References: <20240411164756.261178-1-sidhartha.kumar@oracle.com> From: Miaohe Lin Message-ID: Date: Fri, 12 Apr 2024 16:08:34 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: <20240411164756.261178-1-sidhartha.kumar@oracle.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.173.135.154] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To canpemm500002.china.huawei.com (7.192.104.244) X-Rspamd-Queue-Id: 38A4480008 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: kua5bokkbetx1fb8w8ng6h7xe9dyj5we X-HE-Tag: 1712909319-491418 X-HE-Meta: U2FsdGVkX1/AXVLtC/MkOYkEYgKakr6mb+++Zu2kG65FymxgvuN1AnfWvMuTskeHy5g5qDA+qNwsBPZW8ml09T+Unnq+b5IRTq0UKXeo4dg5ziWPH73wwxUTUR0cgLuXvoiltOhQQdFZ9tBZIDv8D+z3rZ9Ap5kT3/lNwfCCVEFBpbv16r3xjAfVgh4XEEmDU0CYfMv9Jusy6krRAqfbSN/eUmkO0Mkx0G0EPuyNvtugrr9S5oOL2fU7AJaiZq0Hl451HTZfDOdluVDq0r1iCXc5x4UnJ+zLGXJ3FwoBp7YqYwe8nC4XrIS4ToWeP0PPut6u/nUWF0EA/lTXAcw0cxODIDv26DAs9G7O6uGicA/zVSisvD7PV0M/DF6MterSHLVwIy/eP6/xY+Vh7qEEi1NHiuTLUkJt2H5HsuSst/3SRmz16a48ca6iGtfqo8cXRQvOd01QqZM8uG+tfPDsE1YKOB3VA8JucVqmRiS8ggQ3dmoDWFGHgBT0U3fYyn36OfWjBKn68FMm0WnKFM0VDFUVhll5wVZPgASAS7X+4apwBmLV/EfV6pEfCB0zsk9ZgdV6BzzdX9laFqirIowsZ4WmcLqxDe1QzfSlTUp3IIz+Y0qS2T7JyqcbHcpGKW8zCpmQkbbKCLxsi8JCHd2iUIlA2nRCOMhySoQIzoXmNgmM1Hq8X6WpVSrAmCdHenvVeBexwh1wyCL78GuKtZo3pXUdW8OV01kh3jz1yfeIIrLxqaKQ2Dtx+wXxPQbRTbkm5qayA4kNjvxWyhP0+KkLfKwblzPcy+DpzezVwN1GrnTe/R1j82XpM+/YIYNheruBaRLZXUjdO0+WbZeD7wccOR8kixgIgeimIM8TSV3NN6VRbYJ/75CONCyXDwKuhRPkDNr2wEucn7PL5Q9gD8DbRS9a/Y4oGGyZkQSp+L8YJokkOOMrd3m6QZeAtPk41tl2CFSycj6PVHGy7Kt78/D QVCQD1B0 tz2IC7LpaYkxi70SNEnr3lPDP55lvg3iJ+MD0r+S8vCqvAylGRAyVaq6aagoH7prWbfsLyTdtv6xCwAOJhOv6ZrQbV5XUv8BAYLwasTQO6Y7Aw+g429HxFMmeAhcWxboXOPAth757EnPvxGcLnL0nF4qUTUVxvzTnyoLY77wVgRRM+5UPl9LQnGmMrX3u/VXZEiPQRWa4EVooaeLSxqYZ6NJBWE28sysJbEW1Zlamt0aGT45PR1tO/gQieyVLM+u8tNPmlGaEh6mMOJSVCksaIyKtgg== 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 2024/4/12 0:47, Sidhartha Kumar wrote: > Allows us to rename dissolve_free_huge_pages() to > dissolve_free_hugetlb_folio(). Convert one caller to pass in a folio > directly and use page_folio() to convert the caller in mm/memory-failure. > > Signed-off-by: Sidhartha Kumar Thanks for your patch. Some nits below. > --- > include/linux/hugetlb.h | 4 ++-- > mm/hugetlb.c | 15 +++++++-------- > mm/memory-failure.c | 4 ++-- > 3 files changed, 11 insertions(+), 12 deletions(-) > > > /* > - * Dissolve a given free hugepage into free buddy pages. This function does > - * nothing for in-use hugepages and non-hugepages. > + * Dissolve a given free hugetlb folio into free buddy pages. This function > + * does nothing for in-use hugepages and non-hugepages. in-use hugetlb folio and non-hugetlb folio? > * This function returns values like below: > * > * -ENOMEM: failed to allocate vmemmap pages to free the freed hugepages > @@ -2390,10 +2390,9 @@ static struct folio *remove_pool_hugetlb_folio(struct hstate *h, > * 0: successfully dissolved free hugepages or the page is not a > * hugepage (considered as already dissolved) > */ > -int dissolve_free_huge_page(struct page *page) > +int dissolve_free_hugetlb_folio(struct folio *folio) > { > int rc = -EBUSY; > - struct folio *folio = page_folio(page); > > retry: > /* Not to disrupt normal path by vainly holding hugetlb_lock */ > @@ -2470,13 +2469,13 @@ int dissolve_free_huge_page(struct page *page) > * make specified memory blocks removable from the system. > * Note that this will dissolve a free gigantic hugepage completely, if any > * part of it lies within the given range. > - * Also note that if dissolve_free_huge_page() returns with an error, all > + * Also note that if dissolve_free_hugetlb_folio() returns with an error, all > * free hugepages that were dissolved before that error are lost. free hugetlb folio? > */ > int dissolve_free_huge_pages(unsigned long start_pfn, unsigned long end_pfn) > { > unsigned long pfn; > - struct page *page; > + struct folio *folio; > int rc = 0; > unsigned int order; > struct hstate *h; > @@ -2489,8 +2488,8 @@ int dissolve_free_huge_pages(unsigned long start_pfn, unsigned long end_pfn) > order = min(order, huge_page_order(h)); > > for (pfn = start_pfn; pfn < end_pfn; pfn += 1 << order) { > - page = pfn_to_page(pfn); > - rc = dissolve_free_huge_page(page); > + folio = pfn_folio(pfn); > + rc = dissolve_free_hugetlb_folio(folio); > if (rc) > break; > } > diff --git a/mm/memory-failure.c b/mm/memory-failure.c > index 88359a185c5f9..5a6062b61c44d 100644 > --- a/mm/memory-failure.c > +++ b/mm/memory-failure.c > @@ -155,11 +155,11 @@ static int __page_handle_poison(struct page *page) > > /* > * zone_pcp_disable() can't be used here. It will hold pcp_batch_high_lock and > - * dissolve_free_huge_page() might hold cpu_hotplug_lock via static_key_slow_dec() > + * dissolve_free_hugetlb_folio() might hold cpu_hotplug_lock via static_key_slow_dec() > * when hugetlb vmemmap optimization is enabled. This will break current lock > * dependency chain and leads to deadlock. > */ > - ret = dissolve_free_huge_page(page); > + ret = dissolve_free_hugetlb_folio(page_folio(page)); > if (!ret) { > drain_all_pages(page_zone(page)); > ret = take_page_off_buddy(page); There is a comment in page_handle_poison referring to dissolve_free_huge_page. It might be better to change it too? static bool page_handle_poison(struct page *page, bool hugepage_or_freepage, bool release) { if (hugepage_or_freepage) { /* * Doing this check for free pages is also fine since *dissolve_free_huge_page* * returns 0 for non-hugetlb pages as well. */ if (__page_handle_poison(page) <= 0) /* * We could fail to take off the target page from buddy * for example due to racy page allocation, but that's * acceptable because soft-offlined page is not broken * and if someone really want to use it, they should * take it. */ return false; } Thanks. . >