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 85257C25B10 for ; Fri, 10 May 2024 09:11:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 035F06B009C; Fri, 10 May 2024 05:11:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F29556B009D; Fri, 10 May 2024 05:11:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DF02C6B009E; Fri, 10 May 2024 05:11:52 -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 C220A6B009C for ; Fri, 10 May 2024 05:11:52 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 461E5A1F7D for ; Fri, 10 May 2024 09:11:52 +0000 (UTC) X-FDA: 82101918864.08.7A22932 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf03.hostedemail.com (Postfix) with ESMTP id 7710E20007 for ; Fri, 10 May 2024 09:11:50 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf03.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=1715332310; 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=TMRjk7FjLCyQ1998IvpNg9eul3ERtK2F3Yw5SfvgCxI=; b=xiwCCn+TawuvuqqJ6DlaAk7NayYbXhfK54pj4gHj0qLBpRSjmnmm42rUTy6NOC+djn2XIn buekzhFVHB+18+atyp8VPno75gIAslJy8eMA7ODYPCtkJ+QJfX8WWGhN7/me8gDUpQwf3v XQl1mY8WWvGHK8wO5cPs6VRlAuYlGYM= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf03.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=1715332310; a=rsa-sha256; cv=none; b=mFBMp/33ZYd5EXgQPT2RHDt0A+g+L6ieoUZDrDTJA5/8CJ1V+wtvfuOdeV7F+yAxTaqDi0 Goq6cQjBklaTYJsnDrXPrvEaG6T9Wi7F7xZ2f+dPUuYUFlaC7bS2c2tB+NsPMqdJJbYc5x QxnIwUJ1M6utQqUGbb5e5TAmUk1Zymc= 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 BD316106F; Fri, 10 May 2024 02:12:14 -0700 (PDT) Received: from [10.57.65.1] (unknown [10.57.65.1]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6F5CD3F762; Fri, 10 May 2024 02:11:46 -0700 (PDT) Message-ID: <38caf210-0607-4937-b6d0-13b99f155060@arm.com> Date: Fri, 10 May 2024 10:11:45 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 2/6] mm: remove the implementation of swap_free() and always use swap_free_nr() Content-Language: en-GB To: Barry Song <21cnbao@gmail.com>, akpm@linux-foundation.org, linux-mm@kvack.org Cc: baolin.wang@linux.alibaba.com, chrisl@kernel.org, david@redhat.com, hanchuanhua@oppo.com, hannes@cmpxchg.org, hughd@google.com, kasong@tencent.com, linux-kernel@vger.kernel.org, surenb@google.com, v-songbaohua@oppo.com, willy@infradead.org, xiang@kernel.org, ying.huang@intel.com, yosryahmed@google.com, yuzhao@google.com, ziy@nvidia.com, "Rafael J. Wysocki" , Pavel Machek , Len Brown , Christoph Hellwig References: <20240508224040.190469-1-21cnbao@gmail.com> <20240508224040.190469-3-21cnbao@gmail.com> From: Ryan Roberts In-Reply-To: <20240508224040.190469-3-21cnbao@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Stat-Signature: 4ikehbepxixibt6mnwg1617bkx7949h9 X-Rspamd-Queue-Id: 7710E20007 X-Rspam-User: X-Rspamd-Server: rspam12 X-HE-Tag: 1715332310-107194 X-HE-Meta: U2FsdGVkX1+5zqmqBTrgiWygcV6HwxY6DXLGQ8RFh4YYToGsfYxoChCgOFGlD8Lq8yV/cU24yBhY1EbBtthxwzzPHHoraDL5kyQT2moCN864aRV13XXSNyLqReN1bcbc4T9bXq5xFBd0fY4AqbE46V3AM/Uw2xWYIGCyv4DXHf1yeR2MAN/xYd9VlboptGYSIMo7PN2HLR6a8Xrfvb2cWcO86bFezWzXhX4vwwL4AIXh5lrbvQfC/ZW5F1nO/RsZ6FH9PsOACd03VQhn1P609Td3zP+a+UNwRtOsCan85tHQOqXCo/5fr3DGT7uXD5k4khn4w1jl83yHxK3jfE/JLuX5+7Jgj4oo7pxSf8iTILqaDx1cM2770AbHDBHrvHlHR+2LU8mddrguvO2FUU81xnHN5OFPI7b2UW0JQdKH+nT3iStuGLXqMhoMp9KaKphwWv19gveJJMyxwRr6icipZUDiOc40sK60hUVhtvTKq86Bl1A2siO0ezHdFEfASkr+HlhI2QwI+o3H3Wv72i/PhuUDVSwHcs+9/YRY2YKAeLO2T8P0QQOuteOj+vDgY9kv6U2R2N34Q6MEoiiGCUwg2JDSZu5a1cqHoBKfheObZnw+rJBTRhf0KZczJnp2M4B1Q+Vo0e9H+CdDiHmxN1OcJvnVcADvu2MUClNKFXPb6dlloxYPD55ou8Sj1V/NUe5z818PaEbHMkwwpIDNdiFwOpIpaF/elkDryyM+mqA3FGyEencDRt8eIypGZOFMQHj4MnnOkHdNgq6oX+pdMirG0jAeQvNTLNXF5dI+DBK3MjG2p3j2quYh+gbuygk1Q8AI8YE+wBK8G5OmSpRcUKySiDtINrsNKWd390y/h5y0SLJX9KmKAA5M1Gy5ibtAgeYzhf1JbbiL6hcPnqqzjvF/vcM36UfCFdUzVlLT5QfSqnZulMjnvS4ZO0YPk2mbCMEeloszMRdVLM/WWqC+Cnf PWmeycyo 9+pVb81fhUAK9sRdGU8ClIDj53UYjjuhxNfBsPQ/iww2O5eqzOnjoTxcXkdN5LKgEA2E4TlK8MkIg1VGBH5kFcz7fCd90LYeCwSB4WS52O3vgV2Qd6bDOUlkSa2nb+0MZrZW4U3DScFB3c9QVZPBoVpiW9U8VaLEZ4Jsvn5jabLG5oTCar2LkqdmgDsTG2I0MMo479oQQ/Xq5eaAOfyi/nfKTK5ksNXRs0B5p6kKsJ58nFrRde/4afqXV0C/KcE8Fsc66DkJK5J5BIlv0EOsVKpQQJ4TgbFk2JSvUellGU8vqpCGLoONrz6LmFRUXZzZSRM/DyiRR6yBWplJZ2hwoowOxccbxy+bikyS1p4VTsKRhx9PZI16LP0haTtpm7RTczeTpeFG/F+0YuCmZJ1jcbHK9wLXgSnlMAywSWXck+WpiIJ+sp9iq+KeKTnGbUO61Uytnpg55DUjrITBkfKhLHOMXpiIFBTfSKGOn 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 08/05/2024 23:40, Barry Song wrote: > From: Barry Song > > To streamline maintenance efforts, we propose removing the implementation > of swap_free(). Instead, we can simply invoke swap_free_nr() with nr > set to 1. swap_free_nr() is designed with a bitmap consisting of only > one long, resulting in overhead that can be ignored for cases where nr > equals 1. > > A prime candidate for leveraging swap_free_nr() lies within > kernel/power/swap.c. Implementing this change facilitates the adoption > of batch processing for hibernation. > > Suggested-by: "Huang, Ying" > Signed-off-by: Barry Song > Reviewed-by: "Huang, Ying" > Acked-by: Chris Li > Cc: "Rafael J. Wysocki" > Cc: Pavel Machek > Cc: Len Brown > Cc: Hugh Dickins > Cc: Christoph Hellwig Reviewed-by: Ryan Roberts > --- > include/linux/swap.h | 10 +++++----- > kernel/power/swap.c | 5 ++--- > mm/swapfile.c | 17 ++++------------- > 3 files changed, 11 insertions(+), 21 deletions(-) > > diff --git a/include/linux/swap.h b/include/linux/swap.h > index d1d35e92d7e9..48131b869a4d 100644 > --- a/include/linux/swap.h > +++ b/include/linux/swap.h > @@ -482,7 +482,6 @@ extern int add_swap_count_continuation(swp_entry_t, gfp_t); > extern void swap_shmem_alloc(swp_entry_t); > extern int swap_duplicate(swp_entry_t); > extern int swapcache_prepare(swp_entry_t); > -extern void swap_free(swp_entry_t); > extern void swap_free_nr(swp_entry_t entry, int nr_pages); > extern void swapcache_free_entries(swp_entry_t *entries, int n); > extern void free_swap_and_cache_nr(swp_entry_t entry, int nr); > @@ -561,10 +560,6 @@ static inline int swapcache_prepare(swp_entry_t swp) > return 0; > } > > -static inline void swap_free(swp_entry_t swp) > -{ > -} > - > static inline void swap_free_nr(swp_entry_t entry, int nr_pages) > { > } > @@ -613,6 +608,11 @@ static inline void free_swap_and_cache(swp_entry_t entry) > free_swap_and_cache_nr(entry, 1); > } > > +static inline void swap_free(swp_entry_t entry) > +{ > + swap_free_nr(entry, 1); > +} > + > #ifdef CONFIG_MEMCG > static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg) > { > diff --git a/kernel/power/swap.c b/kernel/power/swap.c > index 5bc04bfe2db1..75bc9e3f9d59 100644 > --- a/kernel/power/swap.c > +++ b/kernel/power/swap.c > @@ -200,12 +200,11 @@ void free_all_swap_pages(int swap) > > while ((node = swsusp_extents.rb_node)) { > struct swsusp_extent *ext; > - unsigned long offset; > > ext = rb_entry(node, struct swsusp_extent, node); > rb_erase(node, &swsusp_extents); > - for (offset = ext->start; offset <= ext->end; offset++) > - swap_free(swp_entry(swap, offset)); > + swap_free_nr(swp_entry(swap, ext->start), > + ext->end - ext->start + 1); > > kfree(ext); > } > diff --git a/mm/swapfile.c b/mm/swapfile.c > index ec12f2b9d229..99e701620562 100644 > --- a/mm/swapfile.c > +++ b/mm/swapfile.c > @@ -1343,19 +1343,6 @@ static void swap_entry_free(struct swap_info_struct *p, swp_entry_t entry) > swap_range_free(p, offset, 1); > } > > -/* > - * Caller has made sure that the swap device corresponding to entry > - * is still around or has not been recycled. > - */ > -void swap_free(swp_entry_t entry) > -{ > - struct swap_info_struct *p; > - > - p = _swap_info_get(entry); > - if (p) > - __swap_entry_free(p, entry); > -} > - > static void cluster_swap_free_nr(struct swap_info_struct *sis, > unsigned long offset, int nr_pages) > { > @@ -1385,6 +1372,10 @@ static void cluster_swap_free_nr(struct swap_info_struct *sis, > unlock_cluster_or_swap_info(sis, ci); > } > > +/* > + * Caller has made sure that the swap device corresponding to entry > + * is still around or has not been recycled. > + */ > void swap_free_nr(swp_entry_t entry, int nr_pages) > { > int nr;