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 5D7AAFC619A for ; Sat, 14 Sep 2024 06:41:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B96936B0083; Sat, 14 Sep 2024 02:41:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B47676B0088; Sat, 14 Sep 2024 02:41:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9E7406B0089; Sat, 14 Sep 2024 02:41:17 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 7B4C16B0083 for ; Sat, 14 Sep 2024 02:41:17 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 16521A0969 for ; Sat, 14 Sep 2024 06:41:17 +0000 (UTC) X-FDA: 82562396994.05.D813203 Received: from mail-qv1-f52.google.com (mail-qv1-f52.google.com [209.85.219.52]) by imf15.hostedemail.com (Postfix) with ESMTP id EE63AA0002 for ; Sat, 14 Sep 2024 06:41:14 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Eq2woaty; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf15.hostedemail.com: domain of boqun.feng@gmail.com designates 209.85.219.52 as permitted sender) smtp.mailfrom=boqun.feng@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1726295956; 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=D6Utq6wPOaksPeu7TRNeQZKl8eCYWJU4eVCJRxeL5AQ=; b=n7BnAv9I2bBvEI7/KNAUhZZmbfRSNwYgb9Cw1PA5DWcNGQeW09U1twz1knWymMsOi00j4C lc4MsFJVSgO1Dwp2pdkbSXKDpjOFiLex5ufN3KEnbTmlKAbFEKXM37oIm41NsU64lpyTyM vWDxUWhlK6hxRhyHhN18SEsODRJecLU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1726295956; a=rsa-sha256; cv=none; b=Amk78OyOk5UFKNHqPiXAj+SkzCjzJKVp5Z3o3oB/cdarNJZtMq01DjHl/ocjuW4A7k30/j +jYXZs7osCfBq6vuskHDN6YujDBcud+k8lfWDJZQfCKzjQZ0p9FVTcYfslflBsZkPcWTqi Hw+9n5aAhgBw8YKiebCOIXUIerGOAV0= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=Eq2woaty; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf15.hostedemail.com: domain of boqun.feng@gmail.com designates 209.85.219.52 as permitted sender) smtp.mailfrom=boqun.feng@gmail.com Received: by mail-qv1-f52.google.com with SMTP id 6a1803df08f44-6c548eb3354so22473106d6.2 for ; Fri, 13 Sep 2024 23:41:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1726296074; x=1726900874; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:feedback-id:from:to:cc:subject:date :message-id:reply-to; bh=D6Utq6wPOaksPeu7TRNeQZKl8eCYWJU4eVCJRxeL5AQ=; b=Eq2woatyd4eAokaSL9xOz+3tApC3jL6YlT3ExSRnyPDgI5rN8t3Y7B19kdJ2hi+gdc JXfGGJddSJYUrtrN/+Gh5AV0ueTs7hkdyK5PSNlPdJ66ETDnT8+2D3+8hNJZlmEJAIDN BgYe4ZDp07nYNs0OmuvoHkV75rqmJASSNXRe7wW8HN4C4OkgRzUwvfjz0t6H9qL63NxR jB7VtElPRD9dTG5FMPFBdUSSABbHsAbV/afKkB2Kcnkn//GNWFa2Ca8uuex43Hfc3pCg dvZyyOx/v/biKkxF7i3Pyj07j6ZAkM12g6OdMr8T/xSH+GOreBYkL/jPsXi0PbgpE7mL QJNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1726296074; x=1726900874; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:feedback-id:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=D6Utq6wPOaksPeu7TRNeQZKl8eCYWJU4eVCJRxeL5AQ=; b=ly9Jmy6e6FAeFgiV82jVD6G4T6WIxPkVmAmkO88YKp913Kh8D7CtGOHghlPzsZFsQ2 MAQPE7hPO9Iz8dRS2T0x4GZGi5DkzZ3xdAbg6es5Irtzau3AtBE0t7L0cWql7vYK2NG7 bxBjtlDWSnB6vj4iNnQBHkbt3mt5/zzQ9Q8pZ77/BP/dljwxZDjncj01jtG/I2SrZtRt Y2QVR0HWuPOC2DG/99w4PnIHgHMMznIPAlgLhNyZTxTg+/y96mCJGYBuRhjQDb1NaHfY SefOwhxbsHarcGowm7Thw4gE7ZAbPyABOm6ZzSew+Ph4vkaDhkxLT0L8dqIvQryCSUGJ PaxQ== X-Forwarded-Encrypted: i=1; AJvYcCURD1KJlYnU23O9l5iMLF2ngx8M7rYJwNXZbZ2j4wzehVURaOzPxW93iYGOIyB8MvWjnDjwp6BK7w==@kvack.org X-Gm-Message-State: AOJu0YyvoSH7fEdUV2jrLUmJBT5mKpO1DydH47xe/6EauzH+ladO2Kht 95IgUaPbfdUa/6MgDMQqowFsgNKmXoSIQA0jsu6mydcmU58K1CkB X-Google-Smtp-Source: AGHT+IFnc18cSpUrpNwkFNDWUcQNlLf7zsEk4fFAIjMHa1BqZk+Ip1Od++IGx10jUpUiZzKQWn2HiQ== X-Received: by 2002:a05:6214:469d:b0:6c3:562f:568 with SMTP id 6a1803df08f44-6c573477a68mr154519336d6.0.1726296073987; Fri, 13 Sep 2024 23:41:13 -0700 (PDT) Received: from fauth1-smtp.messagingengine.com (fauth1-smtp.messagingengine.com. [103.168.172.200]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6c58c7d589csm3860446d6.132.2024.09.13.23.41.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Sep 2024 23:41:13 -0700 (PDT) Received: from phl-compute-04.internal (phl-compute-04.phl.internal [10.202.2.44]) by mailfauth.phl.internal (Postfix) with ESMTP id 319C51200068; Sat, 14 Sep 2024 02:33:59 -0400 (EDT) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-04.internal (MEProxy); Sat, 14 Sep 2024 02:33:59 -0400 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrudejledguddtlecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpggftfghnshhusghstghrihgsvgdp uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg hnthhsucdlqddutddtmdenucfjughrpeffhffvvefukfhfgggtuggjsehttdertddttddv necuhfhrohhmpeeuohhquhhnucfhvghnghcuoegsohhquhhnrdhfvghnghesghhmrghilh drtghomheqnecuggftrfgrthhtvghrnhephedugfduffffteeutddvheeuveelvdfhleel ieevtdeguefhgeeuveeiudffiedvnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrg hmpehmrghilhhfrhhomhepsghoqhhunhdomhgvshhmthhprghuthhhphgvrhhsohhnrghl ihhthidqieelvdeghedtieegqddujeejkeehheehvddqsghoqhhunhdrfhgvnhhgpeepgh hmrghilhdrtghomhesfhhigihmvgdrnhgrmhgvpdhnsggprhgtphhtthhopeduiedpmhho uggvpehsmhhtphhouhhtpdhrtghpthhtoheprghlihgtvghrhihhlhesghhoohhglhgvrd gtohhmpdhrtghpthhtohepohhjvggurgeskhgvrhhnvghlrdhorhhgpdhrtghpthhtohep rghkphhmsehlihhnuhigqdhfohhunhgurghtihhonhdrohhrghdprhgtphhtthhopegurg hvihgusehfrhhomhhorhgsihhtrdgtohhmpdhrtghpthhtohepiihhvghnghhqihdrrghr tghhsegshihtvggurghntggvrdgtohhmpdhrtghpthhtoheprhhomhgrnhdrghhushhhtg hhihhnsehlihhnuhigrdguvghvpdhrtghpthhtohepmhhutghhuhhnrdhsohhngheslhhi nhhugidruggvvhdprhgtphhtthhopehgrghrhiesghgrrhihghhuohdrnhgvthdprhgtph htthhopegsjhhorhhnfegpghhhsehprhhothhonhhmrghilhdrtghomh X-ME-Proxy: Feedback-ID: iad51458e:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 14 Sep 2024 02:33:58 -0400 (EDT) Date: Fri, 13 Sep 2024 23:33:49 -0700 From: Boqun Feng To: Alice Ryhl Cc: Miguel Ojeda , Andrew Morton , Dave Chinner , Qi Zheng , Roman Gushchin , Muchun Song , Gary Guo , =?iso-8859-1?Q?Bj=F6rn?= Roy Baron , Benno Lossin , Andreas Hindborg , Trevor Gross , linux-kernel@vger.kernel.org, linux-mm@kvack.org, rust-for-linux@vger.kernel.org Subject: Re: [PATCH] rust: shrinker: add shrinker abstraction Message-ID: References: <20240912-shrinker-v1-1-18b7f1253553@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240912-shrinker-v1-1-18b7f1253553@google.com> X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: EE63AA0002 X-Stat-Signature: qcs3z4i5k1779pyixgxqmsn9gyjft9k3 X-Rspam-User: X-HE-Tag: 1726296074-959688 X-HE-Meta: U2FsdGVkX18+TcdDsNHbSf7DjTj2DpzqDdT7dBkkQ7z982qEbUU0z3YOr6OsTN/A0CmFSxhLambpE7JkSQrBmEztpKqs/TmkeJqE7KD1M5F3ji3YdUNUCNcqZZ9r8PMMuPRCOo1g9+LJe9QsH2BAUHPmPhsI57Em3jrCAhBRmDESdo9vAEDoLkOq8gNXWlVVow+jUHPV6ysYNLUFcAd4AQMg3gp5I7ThtRzRaHPuopGqj9u7U32QcisuGuAC4nr98TZfi/BA3vXLDGl0e1hUDb3a9zf+7pSqVy/wfit6BE4rjfpmPFWSddCFhfvgMVu1KrqFFlrMpfK6wt6U9DB0rbf2oM10OMDkHieWh/192GKmW8IjorWVH4I+N26c+ynFILgDzH2KpppXnLASg8pYHvrzuU7U+8vWnsHIS/ivzIHeLbRYDZ3X1xBNsblBjvYsRrt+AEfUOmQQiVNzG5JAGLucQ6d/a1JYYe+1Rr8ND3Y7+4vceAXtsVa9lM++gkTOuBaXCfATP+4DUFnyq7qM0jGLlWjSwwwfNoDNkt6IHDUX7dt7zslOhHIEvjLtaRMjFDfy3WJsCOvZDce7bL4ibb3gt8xMP+/lzl0LtrR7CXjgEvQesqMxxvmjmSiXBud6NYJ0kU0zaCsJA8PF5q7lYHWxPsuvVtH5P981v/pVRXlKrMFICuVzQYNLGQ/G8bDioM/6Y4VA2smAPtSccdsBlf5UqaqCyhAVaCZ/lnPyMgnq3/vES3NFgRQ4qyPWBZCE3ZWh2IsTtjnqwAebQ182HXqRqN6rlcpL6vVuuRhiuu+129S2jjV6LmpHxZF9flNt0Ohq6sLre9gF2w/Vhopr2NBl7c+Yzap/7Y5VN/rhOnx8B0vKeUmn9V0vt8vqbSMvqESKqGtt0i6/424YZMK/+w4C7gzP6ttGYa5SJ1nyMuSUFDtSCbwdVln5Nq/dYqSuu3w1PeoCmdYo2kx3BwM PQPN3prI MGKeYbAYqMrOCFiTW/Jj0ni5U4/WreFW6F9zOBXUde5IzG//RjueLJ70NzGRYz7aKnS83g4p1yOHbXQ4Eit5UWRo5M2d38rwUXIG7ccA4kqdDpQrOgZ6EXPDaWGhbz9I4yayI5wmf6Yrw/aZLqCeOGgUtjsj7sPOpSzCocNx3/E7+lZyNrGrZetJqLCqGa8MYLl6TxebX0dkWkOGhJa1XmeeRlKk3/J4bYnnxU7C40ydSTqi6nAKtFJzLvIChxjmGYMwYRCYye92baf5oLDzyZNDKBe3iq2mjS4S0e+7aD5gxOlz0iDOiUDCLa5tdmYFBnJ9a3JefYv9ZlAw6LrO/iaicfVZrJBntc7tT5YAnqQopYXtsl08+sa7Pw/Ux0n9AF/QfC8jCZ2V5zbkdV3CN5pkqrdbyFsicx5jICoiljdBNPeU5kEAr5Njx6w== 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: List-Subscribe: List-Unsubscribe: On Thu, Sep 12, 2024 at 09:54:01AM +0000, Alice Ryhl wrote: > Rust Binder holds incoming transactions in a read-only mmap'd region > where it manually manages the pages. These pages are only in use until > the incoming transaction is consumed by userspace, but the kernel will > keep the pages around for future transactions. Rust Binder registers a > shrinker with the kernel so that it can give back these pages if the > system comes under memory pressure. > > Separate types are provided for registered and unregistered shrinkers. > The unregistered shrinker type can be used to configure the shrinker > before registering it. Separating it into two types also enables the > user to construct the private data between the calls to `shrinker_alloc` > and `shrinker_register` and avoid constructing the private data if > allocating the shrinker fails. > > The user specifies the callbacks in use by implementing the Shrinker > trait for the type used for the private data. This requires specifying > three things: implementations for count_objects and scan_objects, and > the pointer type that the private data will be wrapped in. > > The return values of count_objects and scan_objects are provided using > new types called CountObjects and ScanObjects respectively. These types > prevent the user from e.g. returning SHRINK_STOP from count_objects or > returning SHRINK_EMPTY from scan_objects. > > Signed-off-by: Alice Ryhl > --- [...] > --- a/rust/kernel/lib.rs > +++ b/rust/kernel/lib.rs > @@ -45,6 +45,7 @@ > pub mod prelude; > pub mod print; > pub mod rbtree; > +pub mod shrinker; Meta comment: I think we should create a mm mod (memory management) and put shrinker there, otherwise there would be a very long list of "pub mod" in rust/kernel/lib.rs ;-) Thoughts? Regards, Boqun > mod static_assert; > #[doc(hidden)] > pub mod std_vendor; > diff --git a/rust/kernel/shrinker.rs b/rust/kernel/shrinker.rs > new file mode 100644 > index 000000000000..9af726bfe0b1 [...]