From c89af2452de2dd6d077135fc7fc4a1732e81a441 Mon Sep 17 00:00:00 2001 From: xu xin Date: Fri, 10 Feb 2023 09:16:42 +0800 Subject: [PATCH] ksm-abstract-the-function-try_to_get_old_rmap_item-v6 modify some comments according to David's suggestions. Link: https://lkml.kernel.org/r/202302100916423431376@zte.com.cn Signed-off-by: xu xin Reviewed-by: Xiaokai Ran Reviewed-by: Yang Yang Cc: David Hildenbrand Cc: Claudio Imbrenda Cc: Xuexin Jiang Signed-off-by: Andrew Morton --- mm/ksm.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mm/ksm.c b/mm/ksm.c index 79ffadd18f8a..39a71bd25e4c 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -2218,12 +2218,16 @@ static struct ksm_rmap_item *try_to_get_old_rmap_item(unsigned long addr, { while (*rmap_list) { struct ksm_rmap_item *rmap_item = *rmap_list; + if ((rmap_item->address & PAGE_MASK) == addr) return rmap_item; if (rmap_item->address > addr) break; *rmap_list = rmap_item->rmap_list; - /* Running here indicates it's vma has been UNMERGEABLE */ + /* + * If we end up here, the VMA is MADV_UNMERGEABLE or its page + * is ineligible or discarded, e.g. MADV_DONTNEED. + */ remove_rmap_item_from_tree(rmap_item); free_rmap_item(rmap_item); } @@ -2237,12 +2241,10 @@ static struct ksm_rmap_item *get_next_rmap_item(struct ksm_mm_slot *mm_slot, { struct ksm_rmap_item *rmap_item; - /* lookup if we have a old rmap_item matching the addr*/ rmap_item = try_to_get_old_rmap_item(addr, rmap_list); if (rmap_item) return rmap_item; - /* Need to allocate a new rmap_item */ rmap_item = alloc_rmap_item(); if (rmap_item) { /* It has already been zeroed */ -- 2.50.1