From patchwork Mon Jan 23 17:37:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 47283 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1742084wrn; Mon, 23 Jan 2023 10:03:41 -0800 (PST) X-Google-Smtp-Source: AMrXdXvC4eOnF2MNfcn3uGNbbbY5IgXfd6arXxHthIGD/j/ZA/kuwOSCESKlGqFp6uAKQ23P3H34 X-Received: by 2002:a05:6402:2b97:b0:479:ab7d:1dad with SMTP id fj23-20020a0564022b9700b00479ab7d1dadmr29209669edb.32.1674497021647; Mon, 23 Jan 2023 10:03:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674497021; cv=none; d=google.com; s=arc-20160816; b=Bs5tVN4xe7DPhJFiTE/BAuZWJtC18N7dvj2zS3eWH1SvRGopXHRH5XFEz5szAgq01F YqFPp6Hk2miHysINVzQW3WxOqXRKkZte4F09qUg/iqAatRrAfZ3INDPP53JzNx2hzQ6p JaORuJ3PK+esk2AD/lZlGCgZ1jPJjvAU+v+WeXlyEqdUS/hTfYFKLjxIsFs4gVgzGyE9 Vj3KtryY0z9xyAcInD75oUaejSP1wZiS8Ip5pKoC5aCB2bfMrsrAbjKwf9IxzHC6oLM9 zNDOhNtymZcTETXO6RuLaCfjPW5JtCddZ0p9altHIhKebPrQ+4o6NG9Vdfji7Fpd6BBD fhOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=euBbnlChzh5NyXkxd3+rY9w1+gYxyY5ES33Gy0DFQi0=; b=JQFKYugRIvb9Fk9nB6Fgqu3sV56j0R4MvqnA+03G3FAZ61vfvJIeos5q2GaJI+iihe IUuOUOHJ+sVTaXwoWw6ZTUOEbgm8/nzK7l1gt3xkbEy3wjjpw2G5y7Fuu2syJ5XxyKnU ELbsS5Y1UDJUmkHJN8PooHw9GTzIbsT8Yjoi5bUcjspsgzxYBDrzH4MUSSdY5OcRw24t WjpJaiNIkAIVmFreWJOJPveIBCIPbDHPoECN0d2W5JDRpIMzPe9oCmoxWUNdQuX0wVBK xsKaurHbD2MvMubQMvkCajYT+uPiZKU/T5fuvVDpDHU32jN6XGKJ8b4nDgL8bT+3vJSy mbBQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t21-20020a05640203d500b0046f9bcabfe6si7024219edw.601.2023.01.23.10.03.18; Mon, 23 Jan 2023 10:03:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232797AbjAWR4S (ORCPT + 99 others); Mon, 23 Jan 2023 12:56:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34558 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232783AbjAWR4Q (ORCPT ); Mon, 23 Jan 2023 12:56:16 -0500 X-Greylist: delayed 1086 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Mon, 23 Jan 2023 09:56:15 PST Received: from 66-220-144-178.mail-mxout.facebook.com (66-220-144-178.mail-mxout.facebook.com [66.220.144.178]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D803C2CFC6 for ; Mon, 23 Jan 2023 09:56:15 -0800 (PST) Received: by dev0134.prn3.facebook.com (Postfix, from userid 425415) id 4A5615616BD7; Mon, 23 Jan 2023 09:37:56 -0800 (PST) From: Stefan Roesch To: linux-mm@kvack.org Cc: shr@devkernel.io, linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [RESEND RFC PATCH v1 03/20] mm: add flag to __ksm_exit call Date: Mon, 23 Jan 2023 09:37:31 -0800 Message-Id: <20230123173748.1734238-4-shr@devkernel.io> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230123173748.1734238-1-shr@devkernel.io> References: <20230123173748.1734238-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=2.4 required=5.0 tests=BAYES_00,RDNS_DYNAMIC, SPF_HELO_PASS,SPF_NEUTRAL,SUSPICIOUS_RECIPS,TVD_RCVD_IP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Level: ** X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755837389266740904?= X-GMAIL-MSGID: =?utf-8?q?1755837389266740904?= This adds the flag parameter to the __ksm_exit() call. This allows to distinguish if this call is for an prctl or madvise invocation. Signed-off-by: Stefan Roesch --- include/linux/ksm.h | 8 +++++--- mm/ksm.c | 8 ++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/include/linux/ksm.h b/include/linux/ksm.h index 50e6b56092f3..d38a05a36298 100644 --- a/include/linux/ksm.h +++ b/include/linux/ksm.h @@ -18,8 +18,8 @@ #ifdef CONFIG_KSM int ksm_madvise(struct vm_area_struct *vma, unsigned long start, unsigned long end, int advice, unsigned long *vm_flags); -void __ksm_exit(struct mm_struct *mm); int __ksm_enter(struct mm_struct *mm, int flag); +void __ksm_exit(struct mm_struct *mm, int flag); static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm) { @@ -32,8 +32,10 @@ static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm) static inline void ksm_exit(struct mm_struct *mm) { - if (test_bit(MMF_VM_MERGEABLE, &mm->flags)) - __ksm_exit(mm); + if (test_bit(MMF_VM_MERGE_ANY, &mm->flags)) + __ksm_exit(mm, MMF_VM_MERGE_ANY); + else if (test_bit(MMF_VM_MERGEABLE, &mm->flags)) + __ksm_exit(mm, MMF_VM_MERGEABLE); } /* diff --git a/mm/ksm.c b/mm/ksm.c index d84a244fe224..83796328574c 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -2563,12 +2563,16 @@ int __ksm_enter(struct mm_struct *mm, int flag) return 0; } -void __ksm_exit(struct mm_struct *mm) +void __ksm_exit(struct mm_struct *mm, int flag) { struct ksm_mm_slot *mm_slot; struct mm_slot *slot; int easy_to_free = 0; + if (!(current->flags & PF_EXITING) && flag == MMF_VM_MERGE_ANY && + test_bit(MMF_VM_MERGE_ANY, &mm->flags)) + clear_bit(MMF_VM_MERGE_ANY, &mm->flags); + /* * This process is exiting: if it's straightforward (as is the * case when ksmd was never running), free mm_slot immediately. @@ -2595,7 +2599,7 @@ void __ksm_exit(struct mm_struct *mm) if (easy_to_free) { mm_slot_free(mm_slot_cache, mm_slot); - clear_bit(MMF_VM_MERGEABLE, &mm->flags); + clear_bit(flag, &mm->flags); mmdrop(mm); } else if (mm_slot) { mmap_write_lock(mm);