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 61F7DC46467 for ; Mon, 26 Dec 2022 02:01:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D3BEB900004; Sun, 25 Dec 2022 21:01:25 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id CEC56900002; Sun, 25 Dec 2022 21:01:25 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BB44B900004; Sun, 25 Dec 2022 21:01:25 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id AA313900002 for ; Sun, 25 Dec 2022 21:01:25 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 1F4D11204E9 for ; Mon, 26 Dec 2022 02:01:25 +0000 (UTC) X-FDA: 80282805330.14.9E33B33 Received: from mxhk.zte.com.cn (mxhk.zte.com.cn [63.216.63.40]) by imf12.hostedemail.com (Postfix) with ESMTP id DF9F840002 for ; Mon, 26 Dec 2022 02:01:22 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=zte.com.cn; spf=pass (imf12.hostedemail.com: domain of yang.yang29@zte.com.cn designates 63.216.63.40 as permitted sender) smtp.mailfrom=yang.yang29@zte.com.cn ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1672020083; 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:in-reply-to: references; bh=28cza/u2aRQSvUsL28YQc+oAGxUZMdxK6+x65cyme5E=; b=S0ZZSFRSlre+YIET++OjQTOBvvsIktOCpDWbtpU51XvGp4Y1WvjtR/bG4oB2YSbijSagxp iX3IJVMXEPlEI2E7pgXCuY9Tm/cdLuig1l1e9aBVHEmq+2b43+GEYAaaWBg6YXyVsjrVIG VmC4IGeks/QAt9/IRvCfZwRMSiXSMO0= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=zte.com.cn; spf=pass (imf12.hostedemail.com: domain of yang.yang29@zte.com.cn designates 63.216.63.40 as permitted sender) smtp.mailfrom=yang.yang29@zte.com.cn ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1672020083; a=rsa-sha256; cv=none; b=n6R+FadCi62TKxWKbjbECYKr2YOVkLJejVTZyG90VOlI6ftBaoeqRBLZoHT/5jlvV1Jq0V pn2kpUX+/FTbARQ9KZ61jsguYXmeAAN7PzMsw+O9MMUYzOXH4+YHuo7+h8mi747icdtV3I P9RLrnVPTm/p7c50OehstIYW8AHQPoc= Received: from mse-fl1.zte.com.cn (unknown [10.5.228.132]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mxhk.zte.com.cn (FangMail) with ESMTPS id 4NgLcH2ljtz8R041; Mon, 26 Dec 2022 10:01:19 +0800 (CST) Received: from szxlzmapp05.zte.com.cn ([10.5.230.85]) by mse-fl1.zte.com.cn with SMTP id 2BQ21E0a052063; Mon, 26 Dec 2022 10:01:14 +0800 (+08) (envelope-from yang.yang29@zte.com.cn) Received: from mapi (szxlzmapp01[null]) by mapi (Zmail) with MAPI id mid14; Mon, 26 Dec 2022 10:01:16 +0800 (CST) Date: Mon, 26 Dec 2022 10:01:16 +0800 (CST) X-Zmail-TransId: 2b0363a9006c2e76458f X-Mailer: Zmail v1.0 Message-ID: <202212261001160129980@zte.com.cn> Mime-Version: 1.0 From: To: Cc: , , , , , , , , Subject: =?UTF-8?B?W1BBVENIIHY0IDEvNl0ga3NtOiBhYnN0cmFjdCB0aGUgZnVuY3Rpb24gdHJ5X3RvX2dldF9vbGRfcm1hcF9pdGVt?= Content-Type: text/plain; charset="UTF-8" X-MAIL:mse-fl1.zte.com.cn 2BQ21E0a052063 X-Fangmail-Gw-Spam-Type: 0 X-FangMail-Miltered: at cgslv5.04-192.168.250.137.novalocal with ID 63A9006F.000 by FangMail milter! X-FangMail-Envelope: 1672020079/4NgLcH2ljtz8R041/63A9006F.000/10.5.228.132/[10.5.228.132]/mse-fl1.zte.com.cn/ X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 63A9006F.000/4NgLcH2ljtz8R041 X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: DF9F840002 X-Stat-Signature: w65tdnsyyqhpdo7s8gupjwxemxeswkup X-HE-Tag: 1672020082-721363 X-HE-Meta: U2FsdGVkX1/1hhuUs17mp2F58VqTahD7bWVIPAJ6kz4vMwmrjn5BAgKJt0Rw1npTTWCGRWm5h3l4WB+CLhkftPnOp+uoIrRjktTXuXlslTdCFiuVqZwZOLYGh4FPc/3hF3y/0WUJ7B2cn9DmlutPnXrBEbzeBwFdPkrvNoMJ2Ss0ScdXstj+xQR9/Fp6nXv1iA7RtCLvepdp59ZIx0aDqNnVSS25GkJ6gz4ltmkvztDJjoeUkm+OkI67epUfnQOzdsnHG6ThTAgycjuXS3ASYXBZzZsvPc4QJEsBHeeVP8OVHfJXNxMkp309HWa1VCgCejQHghEvDh9QkBsSalywVtm4En85D971uVrueR8M66V3kDyKTZ+kex4iTdAodTVHaIaw7ovx1q8XP4hOfrsYApglD2ZkN8QqbWJt0TgOPZmYmpdno7lMK2LW+CUOeLmyKV3DggA9CRsULgflmOe9yNdBtCTf4etDQNYjJoCQOcILXSSbdcmV2VLFkXl23slGr5MGZgCWlpD1P8ySZX3W5nLDpqdBrFdSlALsquAmJV2oF+WDqhItB3wjB4K+2acWLgpktSIuFSiBdWLejAv7fQL1jqbNKdCS6QfS5ZP22KvlFYNtfDed/2ueHED/nPWALVPOQEZF5ePHZ3LzQRYwJTM7m1azlbdZ8sPCP/3xQf28uclsEArdglG1gWv0PU/T1NPn9AbJ5iH8h+1ScY3G/93lz9lL7NxjkNL6akJlJY139E0loGf0nLnJOE0leN/G+3DiCThWEDSonAyOBSuKgUiV+a5DKS9oVEEiMd/X1MA/oy1tTlZapAEhvabDwMRCiAz8z+j/4dsEMYck2/Yf6bitP1B+/wLAO3z9a9+G3yZcuiSUhUSN1vdi1zyrIbAM88dYxzqB4iVLPISj0THoQJQCLPWpsxdJdAl0Vx2XgAZxX2PDS4RnXGFR/2n9dOj7N3Jm6y0oM5fxmrVypNL K8Q== 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: From: xu xin A new function try_to_get_old_rmap_item is abstracted from get_next_rmap_item. This function will be reused by the subsequent patches about counting ksm_zero_pages. The patch improves the readability and reusability of KSM code. Signed-off-by: xu xin Cc: David Hildenbrand Cc: Claudio Imbrenda Cc: Xuexin Jiang Reviewed-by: Xiaokai Ran Reviewed-by: Yang Yang --- mm/ksm.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/mm/ksm.c b/mm/ksm.c index dd02780c387f..8d6336ef0750 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -2214,23 +2214,36 @@ static void cmp_and_merge_page(struct page *page, struct ksm_rmap_item *rmap_ite } } -static struct ksm_rmap_item *get_next_rmap_item(struct ksm_mm_slot *mm_slot, - struct ksm_rmap_item **rmap_list, - unsigned long addr) +static struct ksm_rmap_item *try_to_get_old_rmap_item(unsigned long addr, + struct ksm_rmap_item **rmap_list) { - struct ksm_rmap_item *rmap_item; - while (*rmap_list) { - rmap_item = *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 */ remove_rmap_item_from_tree(rmap_item); free_rmap_item(rmap_item); } + return NULL; +} + +static struct ksm_rmap_item *get_next_rmap_item(struct ksm_mm_slot *mm_slot, + struct ksm_rmap_item **rmap_list, + unsigned long addr) +{ + 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.15.2