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 2E88DCD6E54 for ; Wed, 11 Oct 2023 10:15:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 872B18D00F7; Wed, 11 Oct 2023 06:15:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8222F8D0002; Wed, 11 Oct 2023 06:15:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 711048D00F7; Wed, 11 Oct 2023 06:15:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 612478D0002 for ; Wed, 11 Oct 2023 06:15:48 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 32C901401C6 for ; Wed, 11 Oct 2023 10:15:48 +0000 (UTC) X-FDA: 81332774376.28.6C6F975 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf21.hostedemail.com (Postfix) with ESMTP id 28FA11C0020 for ; Wed, 11 Oct 2023 10:15:45 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf21.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1697019346; 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=yQhJOWDJsokuVrG7NfMoBlxwtQK0u5AJiHcAoQBgOy0=; b=GkoMvFBV8SRa61R/weVOsiQxI8azfm9zFvsYXbUqCFECTX6bpNWq7sbIPpgDcGYi+7wG85 xECAoddq9ZjdewWbaYl2pxot7QUKzaKkzint4Z5PYb52Es5GhL5+8pZpTTWNOpzAd+HJwL PbMg2EYb2FannuTILG4dM+c4zcnz994= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf21.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1697019346; a=rsa-sha256; cv=none; b=Pg9DOKL85pgTqoWYtPdYdbVzCeGG0hHSIWv0qPDDptAXOIPFvhus4pGY/bCyekaH0rz9kf 8pWycqdbFhoonqsq0jXtFC/+3FY+k1PUQBwBo4puC4VEm2xqbknl4XCC1qulwFHgxG+Ljx drTUS7k8DJ0r3gv3eSAnX2IHWQNA00Q= Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BBDD0106F; Wed, 11 Oct 2023 03:16:25 -0700 (PDT) Received: from [10.57.68.120] (unknown [10.57.68.120]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2D43D3F762; Wed, 11 Oct 2023 03:15:43 -0700 (PDT) Message-ID: <18890179-7529-4c11-9049-dbb9885bac54@arm.com> Date: Wed, 11 Oct 2023 11:15:41 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH v1 1/2] mm: swap: Remove CLUSTER_FLAG_HUGE from swap_cluster_info:flags To: Kefeng Wang , Andrew Morton , David Hildenbrand , Matthew Wilcox , Huang Ying , Gao Xiang , Yu Zhao , Yang Shi , Michal Hocko Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20231010142111.3997780-1-ryan.roberts@arm.com> <20231010142111.3997780-2-ryan.roberts@arm.com> <75b3f607-856c-4210-9a7f-1a9535275698@huawei.com> Content-Language: en-GB From: Ryan Roberts In-Reply-To: <75b3f607-856c-4210-9a7f-1a9535275698@huawei.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 28FA11C0020 X-Stat-Signature: rf339jmr5c59zeiaubuxroeyy7u6te81 X-HE-Tag: 1697019345-571093 X-HE-Meta: U2FsdGVkX19plPvkv4Znoqud5/qLxWSjyW3wS2vWi/NdOtPFsQxT4lTh6YeGbwEL+KDkQTLGdT0plN7c5pByO6B4GNTz/fnXaLWIgPbhM0BS/mogZwNA1vEX0upGX7IBrUDlkGypzqYGKElbNlq7tp96Gi+G8tetcAVybF7ocfqyFSFCSzkEtxQC5Xsos5uqpmBCnsOfzuKjwRCv7pPLhEmoylNaKS9Spx5dyi0Ib2hGtmP+oH/4/otTywMUsB8VmAkreFTNEf4u/IQW/Su/qSmXekTBAdNSNDG/nkvdxkoAxve9AMEgPUOeeVp4b+XIBIjf4z0MhJTE6k+TyWzBgh+Z5cbPb8Y4zq7/+EMnPJbqY1UqzzzHMcUVFj4m3cLZ7cLhWY3OJsTgDfeYo1FR9IzO1MIHBPaWvFAP2PGf42aQm/yG8UzTPaNtZ1PXcvfXRb3n/dSd+SrET0NrRwTMakI3JJUKmpEDCL+3DCkP+cXniSoPhIr3aE1NdyMNLBHpziev/NY/8TVfLVpI+gsEi/cVLIikgw7xr95vS6W+FUfSNxLbuvU0q9/LCDAs+S2L/TXOU7rcmVVnV559GX70Y/0ocbuReliCLMnuAG25E9XTdy6yCKZ2xMi1k17Y2vnYR83MZpWv0dhNHjcjDXnTyynwqAuWrnq4plSmVywFNO69PrZGlEhxbA7YTnw+G/KVrSUTrZGXAcMPJ9GJTDlAafdzABthXQOe+ykO7A363rbf7C/kgdlAGHZNx2LBK3gYX87PBUjZFsrmXDRIrRnbqWehZqAVc00jMeCEc676k9QOMQRhfOuEbQwcR0EP2hUGipDQ/6w6PzwRXauQCQ/cxsV+dV4BeND1izKTOx99YjUiukVBMtDgzb6YZLY47E+dtk8BSyvIcXm/dl9JhRwIwyLtgwXP65mbnCT430YP6EooPNEtGM7Xrr08ECSqRu2cvOoj0eD3KL2VI1odQHK pG7+fWcw vXBEp1y/1lpcY12CHjjNbPU5x+iPsSVv3N0j2jwT7CUmH4FBozMIwOryBM4qHwtaNCmhbsk7AvEylRVhCyhGuHwuiAqvFGeV1ghvSeB6HoQeRqOrhU2vW+YpSO2sc3fs1HluukTfpVBB5+LsDBeqnvpcUX/lvaBLWonedja9mgikneSX/DNw5U2vjNKAVNWo3LFfRB6NLkMsMwkjn4TSxWv/2XMDPzXZhgR+CUDNGHUi0NL2pDubohNR+eAVukz1P4q5P 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: On 11/10/2023 09:17, Kefeng Wang wrote: > > > On 2023/10/10 22:21, Ryan Roberts wrote: >> As preparation for supporting small-sized THP in the swap-out path, >> without first needing to split to order-0, Remove the CLUSTER_FLAG_HUGE, >> which, when present, always implies PMD-sized THP, which is the same as >> the cluster size. >> >> The only use of the flag was to determine whether a swap entry refers to >> a single page or a PMD-sized THP in swap_page_trans_huge_swapped(). >> Instead of relying on the flag, we now pass in nr_pages, which >> originates from the folio's number of pages. This allows the logic to >> work for folios of any order. >> >> The one snag is that one of the swap_page_trans_huge_swapped() call >> sites does not have the folio. But it was only being called there to >> avoid bothering to call __try_to_reclaim_swap() in some cases. >> __try_to_reclaim_swap() gets the folio and (via some other functions) >> calls swap_page_trans_huge_swapped(). So I've removed the problematic >> call site and believe the new logic should be equivalent. >> >> Removing CLUSTER_FLAG_HUGE also means we can remove split_swap_cluster() >> which used to be called during folio splitting, since >> split_swap_cluster()'s only job was to remove the flag. >> >> Signed-off-by: Ryan Roberts >> --- >>   include/linux/swap.h | 10 ---------- >>   mm/huge_memory.c     |  3 --- >>   mm/swapfile.c        | 47 ++++++++------------------------------------ >>   3 files changed, 8 insertions(+), 52 deletions(-) >> >> diff --git a/include/linux/swap.h b/include/linux/swap.h >> index 19f30a29e1f1..a073366a227c 100644 >> --- a/include/linux/swap.h >> +++ b/include/linux/swap.h >> @@ -259,7 +259,6 @@ struct swap_cluster_info { >>   }; >>   #define CLUSTER_FLAG_FREE 1 /* This cluster is free */ >>   #define CLUSTER_FLAG_NEXT_NULL 2 /* This cluster has no next cluster */ >> -#define CLUSTER_FLAG_HUGE 4 /* This cluster is backing a transparent huge >> page */ >> >>   /* >>    * We assign a cluster to each CPU, so each CPU can allocate swap entry from >> @@ -595,15 +594,6 @@ static inline int add_swap_extent(struct swap_info_struct >> *sis, >>   } >>   #endif /* CONFIG_SWAP */ >> >> -#ifdef CONFIG_THP_SWAP >> -extern int split_swap_cluster(swp_entry_t entry); >> -#else >> -static inline int split_swap_cluster(swp_entry_t entry) >> -{ >> -    return 0; >> -} >> -#endif >> - >>   #ifdef CONFIG_MEMCG >>   static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg) >>   { >> diff --git a/mm/huge_memory.c b/mm/huge_memory.c >> index c9cbcbf6697e..46b3fb943207 100644 >> --- a/mm/huge_memory.c >> +++ b/mm/huge_memory.c >> @@ -2597,9 +2597,6 @@ static void __split_huge_page(struct page *page, struct >> list_head *list, >>           shmem_uncharge(head->mapping->host, nr_dropped); >>       remap_page(folio, nr); >> >> -    if (folio_test_swapcache(folio)) >> -        split_swap_cluster(folio->swap); >> - >>       for (i = 0; i < nr; i++) { >>           struct page *subpage = head + i; >>           if (subpage == page) >> diff --git a/mm/swapfile.c b/mm/swapfile.c >> index e52f486834eb..c668838fa660 100644 >> --- a/mm/swapfile.c >> +++ b/mm/swapfile.c >> @@ -342,18 +342,6 @@ static inline void cluster_set_null(struct >> swap_cluster_info *info) >>       info->data = 0; >>   } >> >> -static inline bool cluster_is_huge(struct swap_cluster_info *info) >> -{ >> -    if (IS_ENABLED(CONFIG_THP_SWAP)) >> -        return info->flags & CLUSTER_FLAG_HUGE; >> -    return false; >> -} >> - >> -static inline void cluster_clear_huge(struct swap_cluster_info *info) >> -{ >> -    info->flags &= ~CLUSTER_FLAG_HUGE; >> -} >> - >>   static inline struct swap_cluster_info *lock_cluster(struct swap_info_struct >> *si, >>                                unsigned long offset) >>   { >> @@ -1021,7 +1009,7 @@ static int swap_alloc_cluster(struct swap_info_struct >> *si, swp_entry_t *slot) >>       offset = idx * SWAPFILE_CLUSTER; >>       ci = lock_cluster(si, offset); >>       alloc_cluster(si, idx); >> -    cluster_set_count_flag(ci, SWAPFILE_CLUSTER, CLUSTER_FLAG_HUGE); >> +    cluster_set_count_flag(ci, SWAPFILE_CLUSTER, 0); > > Maybe just use cluster_set_count() and kill cluster_set_count_flag(). Yep good point. I'll do this in the next version - thanks!