From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BFEBC282F3F for ; Mon, 13 Jul 2026 16:04:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783958651; cv=none; b=MqBtffctgsUTCs6KECNKDE+DQ2t/OURIK00qv/CtCmP5O+OUO9Tk1/TrD7MrZws7OWmVg0rfFeWW81J/ecNJm+ahbojYT8pjxLbObleLjwbWqDBde45QDf8DIku1hrQPPqnvQoPjqjfPnrlHdfaSr4pzidFwWbZjjxuSaV1qSyg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783958651; c=relaxed/simple; bh=IkQyh2wRVJUcuZK0qXmSL1MZF59Ym/RCAktATnIqLM8=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=RcVms9DvcmLnH3xI3zYtLKHiYCTm77LtPIqNShnB34cQdqWoD7gpEYH5aSPYcfzBcDGMUyt50IkUIRRltWb8vv9QP05e/XnkjHIjtTa2TZu5mCbqPLPHuPOY7rViXdFjXYXEZQ2GZX7A1tszW8I/OGJ4peL4xMBkkINtQvAExdE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fS+exrWX; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fS+exrWX" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A074C1F00A3D; Mon, 13 Jul 2026 16:04:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783958650; bh=ctxaFih00G9qrQW0mFgwMAslrGjZZ5EaDpOAMDEo0jc=; h=Date:From:To:Cc:Subject:References:In-Reply-To; b=fS+exrWXCr+L3VLPeSXD+tD3xkU6t9CX/R2wB0P2yv0LiuamHNkl6sKHPr8KBHQ5S pSs5LTOBX8iA38rGaAqlX+plNEjShJs1m1CQ2GklWuvmaT6Q3Uk0woyNV/BfM5OEgc aD3PSQMfK9CVsVDevOSlv2Rpmuk0JI+KOC8Ua9XCmEVFbYx4lqcPeXPnpW8oPWI3Ac o9PX2ee6TYHVb4Nmvef5W6hldsDUQf6Ug36fPE6FSWPuh+OlgmmqOs6FMzBIrg0kHq hzmN96dmjXhD6qUog9uZ2Y5MTkFB5BxSFhdIj3AHV9UVG/CcpxVv0vVo1XMexigQLD hbR4uV+Fe+xAA== Date: Mon, 13 Jul 2026 17:03:56 +0100 From: "Lorenzo Stoakes (ARM)" To: xu.xin16@zte.com.cn Cc: akpm@linux-foundation.org, david@kernel.org, ziy@nvidia.com, baolin.wang@linux.alibaba.com, baohua@kernel.org, lance.yang@linux.dev, usama.arif@linux.dev, chengming.zhou@linux.dev, qi.zheng@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, npache@redhat.com, ryan.roberts@arm.com, dev.jain@arm.com, wang.yaxin@zte.com.cn Subject: Re: [PATCH v2 1/2] mm/mm_slot.h: add a helper function mm_slot_remove Message-ID: References: <20260713143534964Cml5-QLfcPMDtbbq_j7tG@zte.com.cn> <20260713143707966lCkTinO0i9zYAc1K2ZmqZ@zte.com.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260713143707966lCkTinO0i9zYAc1K2ZmqZ@zte.com.cn> On Mon, Jul 13, 2026 at 02:37:07PM +0800, xu.xin16@zte.com.cn wrote: > From: xu xin > > Both THP and KSM manage per-mm scanning slots using the mm_slot > structure. The slot is kept in a hash table and a list, and removal from > both containers requires the same two operations: hash_del() and > list_del(). > > Introduce mm_slot_remove() to abstract the common hash_del() + list_del() > sequence used in both khugepaged and KSM. > > No functional change is intended. > > Signed-off-by: xu xin LGTM, so: Reviewed-by: Lorenzo Stoakes (ARM) > --- > mm/khugepaged.c | 6 ++---- > mm/ksm.c | 9 +++------ > mm/mm_slot.h | 5 +++++ > 3 files changed, 10 insertions(+), 10 deletions(-) > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index 58e14d1543ec..5f6eb1bd9a67 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -606,8 +606,7 @@ void __khugepaged_exit(struct mm_struct *mm) > spin_lock(&khugepaged_mm_lock); > slot = mm_slot_lookup(mm_slots_hash, mm); > if (slot && khugepaged_scan.mm_slot != slot) { > - hash_del(&slot->hash); > - list_del(&slot->mm_node); > + mm_slot_remove(slot); > free = 1; > } > spin_unlock(&khugepaged_mm_lock); > @@ -1802,8 +1801,7 @@ static void collect_mm_slot(struct mm_slot *slot) > > if (collapse_test_exit(mm)) { > /* free mm_slot */ > - hash_del(&slot->hash); > - list_del(&slot->mm_node); > + mm_slot_remove(slot); > > /* > * Not strictly needed because the mm exited already. > diff --git a/mm/ksm.c b/mm/ksm.c > index 2791ce5bd44b..443dab513da6 100644 > --- a/mm/ksm.c > +++ b/mm/ksm.c > @@ -1257,8 +1257,7 @@ static int unmerge_and_remove_all_rmap_items(void) > struct mm_slot, mm_node); > ksm_scan.mm_slot = mm_slot_entry(slot, struct ksm_mm_slot, slot); > if (ksm_test_exit(mm)) { > - hash_del(&mm_slot->slot.hash); > - list_del(&mm_slot->slot.mm_node); > + mm_slot_remove(&mm_slot->slot); > spin_unlock(&ksm_mmlist_lock); > > mm_slot_free(mm_slot_cache, mm_slot); > @@ -2772,8 +2771,7 @@ static struct ksm_rmap_item *scan_get_next_rmap_item(struct page **page) > * or when all VM_MERGEABLE areas have been unmapped (and > * mmap_lock then protects against race with MADV_MERGEABLE). > */ > - hash_del(&mm_slot->slot.hash); > - list_del(&mm_slot->slot.mm_node); > + mm_slot_remove(&mm_slot->slot); > spin_unlock(&ksm_mmlist_lock); > > mm_slot_free(mm_slot_cache, mm_slot); > @@ -3116,8 +3114,7 @@ void __ksm_exit(struct mm_struct *mm) > if (ksm_scan.mm_slot == mm_slot) > goto unlock; > if (!mm_slot->rmap_list) { > - hash_del(&slot->hash); > - list_del(&slot->mm_node); > + mm_slot_remove(slot); > easy_to_free = 1; > } else { > list_move(&slot->mm_node, > diff --git a/mm/mm_slot.h b/mm/mm_slot.h > index 83f18ed1c4bd..5de3e91d86b4 100644 > --- a/mm/mm_slot.h > +++ b/mm/mm_slot.h > @@ -52,4 +52,9 @@ static inline void mm_slot_free(struct kmem_cache *cache, void *objp) > hash_add(_hashtable, &_mm_slot->hash, (unsigned long)_mm); \ > }) > > +static inline void mm_slot_remove(struct mm_slot *slot) > +{ > + hash_del(&slot->hash); > + list_del(&slot->mm_node); > +} > #endif /* _LINUX_MM_SLOT_H */ > -- > 2.25.1 Cheers, Lorenzo