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 243B3C77B71 for ; Fri, 14 Apr 2023 20:54:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 87D296B0072; Fri, 14 Apr 2023 16:54:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 82DAC900003; Fri, 14 Apr 2023 16:54:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6CDF8900002; Fri, 14 Apr 2023 16:54:40 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 5D0F76B0072 for ; Fri, 14 Apr 2023 16:54:40 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 259231602C5 for ; Fri, 14 Apr 2023 20:54:40 +0000 (UTC) X-FDA: 80681200320.03.CD3D689 Received: from wout1-smtp.messagingengine.com (wout1-smtp.messagingengine.com [64.147.123.24]) by imf09.hostedemail.com (Postfix) with ESMTP id E78D514000B for ; Fri, 14 Apr 2023 20:54:36 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=devkernel.io header.s=fm1 header.b=u1KA8P2T; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=JWAQb6wJ; spf=pass (imf09.hostedemail.com: domain of shr@devkernel.io designates 64.147.123.24 as permitted sender) smtp.mailfrom=shr@devkernel.io; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1681505677; 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:in-reply-to:references:references:dkim-signature; bh=rlFheFZweK49BGNnFZwEc5L1U+sCs9kJT/iFa/MIfcY=; b=t3za7aWKeuGn4xlOBZMAk9cgGXvotCImEYCODdfkzPo/fxg8ggENk9YfbRPxNjv7+Aa29U 4kUKFegX/Q4RYuYjxY60nU6ZDBvrp9U+pfoThXvmBqSnnHGXIXaY71UuMJhRQdBzb+OBfv TgkdIFR6i6UW7B+IZwPtruLYzL/0obI= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=devkernel.io header.s=fm1 header.b=u1KA8P2T; dkim=pass header.d=messagingengine.com header.s=fm3 header.b=JWAQb6wJ; spf=pass (imf09.hostedemail.com: domain of shr@devkernel.io designates 64.147.123.24 as permitted sender) smtp.mailfrom=shr@devkernel.io; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681505677; a=rsa-sha256; cv=none; b=ryLrUeL7T4eX39/KzSbg/stxPJBfObPG50teKcRuGPA4KaFMl0NYz1m2TpKMDs3Gif3piR DzedKKsx4PUEL3BkoDEPIsLp8c5rm/szHG5WJyEQv+Nyjz5ugaDV9yDhfuGR7v3JpuSJB9 5W3dtb3uKem5dM7FX8EuiMOpFMtg36g= Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.west.internal (Postfix) with ESMTP id B653732009AF; Fri, 14 Apr 2023 16:54:34 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Fri, 14 Apr 2023 16:54:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=devkernel.io; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:sender :subject:subject:to:to; s=fm1; t=1681505674; x=1681592074; bh=rl FheFZweK49BGNnFZwEc5L1U+sCs9kJT/iFa/MIfcY=; b=u1KA8P2Tn9lh3rLH8/ IKeBdjNTCA2wxQNFIbuPaY07Py0Y0ltUhQ5goajpEAUVtiAwucxonhvnyocX3xux r56rJRVSFg+D6i+luKjatEQy+zj7s6s5kp0ebHYGPL1gdQE6sT9W5xe8loLNgDBi Okg7PEwo3ZS5VRbdFXExWzY/PKj8gAwMn05eBeZg2dTcPBfelIirqURrStGOGMIy n64Wugriv0ITNyunTinny1460VZb++52aAxFNEG+ziAECVtpIZ38pKGYnV+gCxm6 JaRaXfQcVuPDA/xmysVjeToN9qZVzsAmoTE07cuCUszwsn3W3+5yPaLUbX9LpuZo Jj6Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:sender:subject :subject:to:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm3; t=1681505674; x=1681592074; bh=rlFheFZweK49B GNnFZwEc5L1U+sCs9kJT/iFa/MIfcY=; b=JWAQb6wJO0ZMS2m0H5Z1TIrf0S9I9 2pFUgxntkJmVV7z6EzbmF14L47kj4w4w8cdNK7SXSCHuNALtL47LC2OUQrPNFV2G jufOL8wePIOJQBUhgUxXz8ac8IIrG3YZwP6gzvdEuJ1hcRw4Fej95mcnVpQodorV 7o4kApOZCmJmIdX0+LoQYqwlhB5aM1pdCwBQ3v+0qTnnl2B9I1wOc1lCpshYX/0m 09esXPm4ImkltPrclx1Cvv2HQ5JTzhno98B4mi15ShIWlNCE/X1V7LW8CmB3+Eci H43Fv6HfGyeR3/sGO89BmaRzHDx5IowhLcWYgSxPgEgdzyDVOkXVZG7Rg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrvdeltddgudehhecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpehffgfhvfevufffjgfkgggtsehttdertddtredtnecuhfhrohhmpefuthgv fhgrnhcutfhovghstghhuceoshhhrhesuggvvhhkvghrnhgvlhdrihhoqeenucggtffrrg htthgvrhhnpeevlefggffhheduiedtheejveehtdfhtedvhfeludetvdegieekgeeggfdu geeutdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpe hshhhrseguvghvkhgvrhhnvghlrdhioh X-ME-Proxy: Feedback-ID: i84614614:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 14 Apr 2023 16:54:32 -0400 (EDT) References: <20230413233115.1878303-1-shr@devkernel.io> <20230413233115.1878303-2-shr@devkernel.io> User-agent: mu4e 1.10.1; emacs 28.2.50 From: Stefan Roesch To: David Hildenbrand Cc: kernel-team@fb.com, linux-mm@kvack.org, riel@surriel.com, mhocko@suse.com, linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org, akpm@linux-foundation.org, hannes@cmpxchg.org, willy@infradead.org, Bagas Sanjaya Subject: Re: [PATCH v7 1/3] mm: add new api to enable ksm per process Date: Fri, 14 Apr 2023 13:53:15 -0700 In-reply-to: Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-Stat-Signature: 6kkm78pzut6gjehgdsca4qenyojrcotr X-Rspam-User: X-Rspamd-Queue-Id: E78D514000B X-Rspamd-Server: rspam06 X-HE-Tag: 1681505676-422534 X-HE-Meta: U2FsdGVkX1+IhNVc+5pBEaU5YXJTHp5VpDcuNLJc6bf8Hd/hsXjoKEwz9RRBGLI5zRrIcItrWfe7wp85vh6PCXVqAhpSuRvfcTxN6RbVk20Vzm+ZUxcYNltksVrpMCGiwW82j7Z+CpaNCX2UrIumYYdiEuU2OTTE9Fan2lQJbcmETFrwswMRVNlZ9ut5WE6+UNO08na5usZpxdJfSrueCBEzx0reTbv9tLNeZMOQLRCQTrkCIS8XginAO+QkOrujpGD4Nhkmq8hcoamcpP2FjdPgLs3NhGFcwfyEPWZxDys8gnIedHYwgIr5AtaEV+t+cf1VTD2gKiZhs+dd9jjNAVVuNjLGiPSibPlsFSW3Ia3pyT0TXWk8PJ4VwRX5eCNhAdgX07E+f7IrTAHPv+bfWF9M4u45HYMVXJbFPofyzI6y5Lfw/Qjk73kNSaBAEogD2Rc93uxTVgHanlwcPJrYKLIlPbFYcYRMolbVgjQB/IWNJ+SRSIF4YF1CavorbOgiBj0/7z1/w2325lypIfrzg25YNXsOmT6/LPl6y8HJ6fr+rKoHJYWqL2Ho0nytA8Pw1UVcey0UgWJymZCns3leA4OOnh9P0cBgZEAJbJ3nruzzJWiH/vq/gZpSRuov87Q/TVCyVf8rnkM1ZrHwMV8z7/M1/nJ5Owf6MZ4HlioZ06jbajDso3rh+OQL5vAh8B1LvTMD/5iLTQcC3ouZCUkQIujNfHbk+PWVRHxGc2hp6Xr41FsrjG0KB3Qa4xyWDsScJwYS8bB5K/yUpkN0q037jW56ZCEJt76MzgIoiKf7XC2Alv4kUvPEc7RCMnKhrhqPe6VJu11rwWOpimm8m3JFexFa59bN4MTCX0rzCJ8xxWlyIFVDjgaQv0iB5inxwFqBZbJ5ZRz9iP9euF6DrHPJI6G0OHQnRLgExA0DIc0UZxR5zel891cDtkRXEty2clU/dqKTpBKZQrJXgbE5BVG ixXoU19P 7pIQKTQGetevkHEZDgSWnyF8ustSrJSg/ULKHHeGG5hLv8kR1A92gNrYm3eL3Bf9xNa9PP6tYJ1I+1G8Mg/HTx+EtI8AZrkj96tL9IOxMAonkB6qNFgAfodCYkncQY+R65l3JrgEL+sWrRozw/0FXjvY4Z85tPgRJHpMqYvCqxB2NsZcXWDjUEes16Jx/6z8rPvVAD2N3yFjuEUE= 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: David Hildenbrand writes: > Thanks! > > In general, > > Acked-by: David Hildenbrand > > Two nits below, after staring at some other prctl implementations. > >> +#define PR_SET_MEMORY_MERGE 67 >> +#define PR_GET_MEMORY_MERGE 68 >> #endif /* _LINUX_PRCTL_H */ >> diff --git a/kernel/sys.c b/kernel/sys.c >> index 495cd87d9bf4..8c2e50edeb18 100644 >> --- a/kernel/sys.c >> +++ b/kernel/sys.c >> @@ -15,6 +15,7 @@ >> #include >> #include >> #include >> +#include >> #include >> #include >> #include >> @@ -2661,6 +2662,30 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, >> case PR_SET_VMA: >> error = prctl_set_vma(arg2, arg3, arg4, arg5); >> break; >> +#ifdef CONFIG_KSM >> + case PR_SET_MEMORY_MERGE: > > Looking at some other code (PR_SET_NO_NEW_PRIVS/ PR_SET_THP_DISABLE) I wonder if > we also want > > if (arg3 || arg4 || arg5) > return -EINVAL; > I added the above check. It requires that we always specify all parameters in the test programs. I also changed them accordingly. > For PR_GET_MEMORY_MERGE it looks good already. > >> + if (mmap_write_lock_killable(me->mm)) >> + return -EINTR; >> + >> + if (arg2) { >> + error = ksm_enable_merge_any(me->mm); >> + } else { >> + /* >> + * TODO: we might want disable KSM on all VMAs and >> + * trigger unsharing to completely disable KSM. >> + */ >> + clear_bit(MMF_VM_MERGE_ANY, &me->mm->flags); >> + error = 0; >> + } >> + mmap_write_unlock(me->mm); >> + break; >> + case PR_GET_MEMORY_MERGE: >> + if (arg2 || arg3 || arg4 || arg5) >> + return -EINVAL; >> + >> + error = !!test_bit(MMF_VM_MERGE_ANY, &me->mm->flags); >> + break; >> +#endif >> default: >> error = -EINVAL; >> break; > > [...] > >> +/** >> + * ksm_enable_merge_any - Add mm to mm ksm list and enable merging on all >> + * compatible VMA's >> + * >> + * @mm: Pointer to mm >> + * >> + * Returns 0 on success, otherwise error code >> + */ >> +int ksm_enable_merge_any(struct mm_struct *mm) >> +{ >> + int err; >> + >> + if (test_bit(MMF_VM_MERGE_ANY, &mm->flags)) >> + return -EINVAL; > > > I'm curious, why is enabling the prctl() supposed to fail if already enabled? > (it would not fail if disabling and already disabled) > I changed that to not return an error in that case. > > For example, PR_SET_THP_DISABLE/PR_SET_NO_NEW_PRIVS doesn't fail if already set.