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 D495BC3DA64 for ; Sun, 4 Aug 2024 06:46:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 653526B0082; Sun, 4 Aug 2024 02:46:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 603D66B0088; Sun, 4 Aug 2024 02:46:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4CBAE6B0089; Sun, 4 Aug 2024 02:46:00 -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 30A166B0082 for ; Sun, 4 Aug 2024 02:46:00 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id A6909121845 for ; Sun, 4 Aug 2024 06:45:59 +0000 (UTC) X-FDA: 82413628038.14.90A3693 Received: from mail-qk1-f179.google.com (mail-qk1-f179.google.com [209.85.222.179]) by imf14.hostedemail.com (Postfix) with ESMTP id 7E13D100007 for ; Sun, 4 Aug 2024 06:45:57 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=V2WhbGTX; spf=pass (imf14.hostedemail.com: domain of boqun.feng@gmail.com designates 209.85.222.179 as permitted sender) smtp.mailfrom=boqun.feng@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1722753898; 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=cQQRD11//H4yepKu/hFAoZLTm/n2T2rx/vysOHXwMa4=; b=EjY22Hx94mid5QRxsDltk0NJ0uaQAwpy5dmleu2PpeA9uwWeQfYKIOCnTEshg+umiDVPaF 0+EsvJSDj42rx9311diG/mLokQ//OpXaTMecEok1XEzWh+6hl8irzEP+WVbCBHK6eZrmZQ fKZjUPV5Z2JQlL8dJFG5fvrxrLWoc6w= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722753898; a=rsa-sha256; cv=none; b=WKgnSszpnVsm531NX5VY5IBQsTxGATvxh7IxqrfQOEl0jzNBTmVh1tXCv/ZfdGi+UGEutv JzaVhz9Y9SVLeQeADpf0fDPGWaD0RGSSrAXotgbNtvr83qfkpROtz1MsiwAqdKJ9cT2/1P xByj1/xeseC+6GLgFMWbmnLONC/tVS8= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=V2WhbGTX; spf=pass (imf14.hostedemail.com: domain of boqun.feng@gmail.com designates 209.85.222.179 as permitted sender) smtp.mailfrom=boqun.feng@gmail.com; dmarc=pass (policy=none) header.from=gmail.com Received: by mail-qk1-f179.google.com with SMTP id af79cd13be357-7a1dea79e1aso539730185a.1 for ; Sat, 03 Aug 2024 23:45:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1722753956; x=1723358756; 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=cQQRD11//H4yepKu/hFAoZLTm/n2T2rx/vysOHXwMa4=; b=V2WhbGTXniVcncl3oehMu1iKnm35V7zDqhLPQYBnIwxQ5TheosChD3EXa6XuWbYUsa krW4pfQAez4xYPkMQ013jV/WKyHlOfJrbYEmZd61+iBfOmFczCcdI+rjyVXhrNNBFChd c6hND7QNm+Ka3jA7UfFCs+tq7BPlzAJ+lQXDIFe/wuYEsfDwlryf1fD/Y8IA2siK3LQP lzYg9XhsegWHe0p6L++QfaZ5XZF01aohMwi4QgLsneBMNrMZ2kbyTKRzUSKkYKjrUBmP iFYVWF7W9gTRhyRBoywplYCvYQLtcq0SR9DanIh5FaNcjMVnF2XmFRUjms6Up4jncx/3 7Dkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722753956; x=1723358756; 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=cQQRD11//H4yepKu/hFAoZLTm/n2T2rx/vysOHXwMa4=; b=SXlvK24KZWM969934fLTjXCOKyxHpnCnyPMagWxn+zLxYLUYx5fCXZwRctlwFhhI9f QNfPyVxOzEXUYl8AINzFH6UX+plFkbl5arf82KWOiK9jCNgSMICZvX/dUTNpVqTjwrGP kJ9eEnZCqAREfWlYGvCwEN+8cKY9yJLG76ofUNPUpj7p4c0Tb8+V5jLtFsmp2DH+fydG 2RgG+Gbag7QriGvGGWpVY0HLwPb/8oolaJ8emnXhFPKg2uLqWAObP8QUrE4Bgr/An7VE 1Ew1Wt+GtIc8rsbMSrsJe25NhP+q6BTZAkyqBjx+wJY3xySFg/+JYB3mktD7p3UZjKFL /vtg== X-Forwarded-Encrypted: i=1; AJvYcCXn4/ThDirHJhhGz2oo7glDS1qDEpc9hLPMUSUqwu2UrVxPX6J74lRVLiMOzWtDY400MEu3H4NA7qc4Lqy/dX4xce4= X-Gm-Message-State: AOJu0YzvJbvx+2uXlObRtLCxTRdPvgxiHX7dCPY48OSn1UseIbGQC/vd O2F9+iXqTd2Ukxg4jVlkRYNVDIrpznv5hfK9oqdDL7p8HgJrWqlk X-Google-Smtp-Source: AGHT+IHIrtETtSeKsazHoIi9a78Yu5TG3S9mO/0JOW+BHR5KdBXRpjaAFZ3zhY2sknVtKmqeFbR3kA== X-Received: by 2002:a05:620a:4448:b0:79f:6bc:d98 with SMTP id af79cd13be357-7a34ef53e9bmr1075535885a.36.1722753956382; Sat, 03 Aug 2024 23:45:56 -0700 (PDT) Received: from fauth2-smtp.messagingengine.com (fauth2-smtp.messagingengine.com. [103.168.172.201]) by smtp.gmail.com with ESMTPSA id af79cd13be357-7a34f6f8463sm230633685a.53.2024.08.03.23.45.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 03 Aug 2024 23:45:55 -0700 (PDT) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailfauth.nyi.internal (Postfix) with ESMTP id 2F999120006A; Sun, 4 Aug 2024 02:45:55 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Sun, 04 Aug 2024 02:45:55 -0400 X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeftddrkeefgdduudegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesthdtredttddtvdenucfhrhhomhepuehoqhhu nhcuhfgvnhhguceosghoqhhunhdrfhgvnhhgsehgmhgrihhlrdgtohhmqeenucggtffrrg htthgvrhhnpeehudfgudffffetuedtvdehueevledvhfelleeivedtgeeuhfegueeviedu ffeivdenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpe gsohhquhhnodhmvghsmhhtphgruhhthhhpvghrshhonhgrlhhithihqdeiledvgeehtdei gedqudejjeekheehhedvqdgsohhquhhnrdhfvghngheppehgmhgrihhlrdgtohhmsehfih igmhgvrdhnrghmvgdpnhgspghrtghpthhtoheptd X-ME-Proxy: Feedback-ID: iad51458e:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 4 Aug 2024 02:45:54 -0400 (EDT) Date: Sat, 3 Aug 2024 23:44:58 -0700 From: Boqun Feng To: Danilo Krummrich Cc: ojeda@kernel.org, alex.gaynor@gmail.com, wedsonaf@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com, benno.lossin@proton.me, a.hindborg@samsung.com, aliceryhl@google.com, akpm@linux-foundation.org, daniel.almeida@collabora.com, faith.ekstrand@collabora.com, boris.brezillon@collabora.com, lina@asahilina.net, mcanal@igalia.com, zhiw@nvidia.com, acurrid@nvidia.com, cjia@nvidia.com, jhubbard@nvidia.com, airlied@redhat.com, ajanulgu@redhat.com, lyude@redhat.com, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-mm@kvack.org, Vlastimil Babka Subject: Re: [PATCH v3 06/25] rust: alloc: implement `Vmalloc` allocator Message-ID: References: <20240801000641.1882-1-dakr@kernel.org> <20240801000641.1882-7-dakr@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240801000641.1882-7-dakr@kernel.org> X-Rspamd-Queue-Id: 7E13D100007 X-Stat-Signature: 9jtwjjdckbsathtdjxroymz1wrtw63zr X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1722753957-52412 X-HE-Meta: U2FsdGVkX19Kku7mcJkEOlG42cs8U46XesbqjyHEZtBVs3grDxC7l1OLbHp0u2ZGKbEHMGDvgL3/zJurOJ5al86/bX/jZ2sgDHEgRQZwIhlyEa2frsonZB7BWpx2bzh9VtT+rUzEynyteGLvyiYhZoAzqGkzvpVE1pB1l8zYudf9eUFKo8/g3z/vgdkN4dIv0bREY5vjpDbr9ugRWuggH6P5Ime7EkM2+MfHZSF6wxKIr5LRyEhpwcKRDd8Kco0OilNOMkPVZLD9qTMWivU2vPcYEoFUZ8IWp/kW9hLDts+Qmplrz6hb6Zdzv74F+Tg7H9WZ95azxWpFBwmmE8ptfggmukuODJbu/392MuJmfsdPBW9VaiWU+pgo7EkUpwWyQ2bZ2SkC5e3pU/DVH72or5x98MnSXVYgRgTzAQL90ylQF3UZDIK5kN+EGH119TKuIKFTNISCAKyS3Uw/OX773OGDeQcINgeLpx68BD0Bk/sfSk9Z2cGOMiThtnioInRYb2qrg6ffTcPeoF4ykkUJmoS5Pd0kRAUbyuwDNVtRSKZtrom5Kyh6gTAl8pjXpzk9BXy+ByvIJCf/M9KBwUb3CwQkvROfDCd8UsKFQvADj2WL4iC513osdg3Vfhw2gu9Ba/Y3m6pEw8U6bDmYYMY7MhGRX6kg93AP51INhDyLE8yKxWaeuQ97pr93X8ffC4RhaK/0fDe4zOf9dnw5+J3QF6SCuStiByMif0dMLQwzYThv3CHh+wvPpr9ltkzzTMBu4D1tULI5USxUuSh6kwhYf/SkpTqyZHLgqFyCDD6MktvY9b1s2p/abvW02uLqSPTF7Y4uwEmb7+r469wlo9gycIksX697HGEMJs0RZ30C7LOozBhcb15wqwcrGrmGgxWoHSsTsyLXo/GkDzx0GwqJ3kvnIUk/Cprn19gLQT3a8v95U1fcTidNxRksUwlFqySIZHqqebwcEDj+eRGfymJ Fjfn/X8I 7L9K27DYg5S5rUb0xlDWAPGjw0/ac1pXCCh4j6KcnjYCQ3DMgaSlbD+qnFjN27kUv6AviYlsxuWW8ReCw6ymkUi3CmzI4E+E2Sq+Tb61Qnwkn8klgj5kOsyhoC43uZ9NVEN5XJEAcocDtHvSWh2gzmlpHuUnyjRCbRKGkP5oCC/5sgpKQxCWOy8vtfprFmD9UUEToeurWFdMEb7R7tJyUQZ2tv6PAOrulXJuIyiNk4r63KHeG5j/SK3J/UOgZV3LzXGKepDMoPvOKYshkQBjcfuf5ScaioZeiwNXTEqFHyS6DY8ceSukl1HHcMVqS7qrbxoZQfe+g8sGK2tRH7Io3589UYItEFu5Njcz0UinB4Um63T2dOsiW989EjHdTjmFxbCgUG+mWsDk1KJBR3vXWlluB1kwmVEXkfaDbyM/22auQ9m2IaqW+1IRvj2n13ZOjXpW8icluxwm/jr8vZQFR0mjr1q4iLPqZMKJPntvO9CvdmGlGlYIWNJ5Zhtwj182rPYC+TrEmUJcXMyQ= 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, Aug 01, 2024 at 02:02:05AM +0200, Danilo Krummrich wrote: > Implement `Allocator` for `Vmalloc`, the kernel's virtually contiguous > allocator, typically used for larger objects, (much) larger than page > size. > > All memory allocations made with `Vmalloc` end up in `vrealloc()`. > > Signed-off-by: Danilo Krummrich > --- > rust/helpers.c | 8 ++++++++ > rust/kernel/alloc/allocator.rs | 24 ++++++++++++++++++++++++ > rust/kernel/alloc/allocator_test.rs | 1 + > 3 files changed, 33 insertions(+) > > diff --git a/rust/helpers.c b/rust/helpers.c > index 92d3c03ae1bd..4c628986f0c9 100644 > --- a/rust/helpers.c > +++ b/rust/helpers.c > @@ -33,6 +33,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -200,6 +201,13 @@ rust_helper_krealloc(const void *objp, size_t new_size, gfp_t flags) > } > EXPORT_SYMBOL_GPL(rust_helper_krealloc); > > +void * __must_check __realloc_size(2) > +rust_helper_vrealloc(const void *p, size_t size, gfp_t flags) > +{ > + return vrealloc(p, size, flags); > +} > +EXPORT_SYMBOL_GPL(rust_helper_vrealloc); > + > /* > * `bindgen` binds the C `size_t` type as the Rust `usize` type, so we can > * use it in contexts where Rust expects a `usize` like slice (array) indices. > diff --git a/rust/kernel/alloc/allocator.rs b/rust/kernel/alloc/allocator.rs > index 397ae5bcc043..e9a3d0694f41 100644 > --- a/rust/kernel/alloc/allocator.rs > +++ b/rust/kernel/alloc/allocator.rs > @@ -16,6 +16,12 @@ > /// `bindings::krealloc`. > pub struct Kmalloc; > > +/// The virtually contiguous kernel allocator. > +/// > +/// The vmalloc allocator allocates pages from the page level allocator and maps them into the > +/// contiguous kernel virtual space. > +pub struct Vmalloc; > + > /// Returns a proper size to alloc a new object aligned to `new_layout`'s alignment. > fn aligned_size(new_layout: Layout) -> usize { > // Customized layouts from `Layout::from_size_align()` can have size < align, so pad first. > @@ -58,6 +64,10 @@ fn krealloc() -> Self { > Self(bindings::krealloc) > } > > + fn vrealloc() -> Self { > + Self(bindings::vrealloc) > + } > + > // SAFETY: `call` has the exact same safety requirements as `Allocator::realloc`. > unsafe fn call( > &self, > @@ -136,6 +146,20 @@ unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { > } > } > > +unsafe impl Allocator for Vmalloc { > + unsafe fn realloc( > + ptr: Option>, > + layout: Layout, > + flags: Flags, > + ) -> Result, AllocError> { > + let realloc = ReallocFunc::vrealloc(); > + IIUC, vrealloc() calls __vmalloc_noprof() in allocation case, that is calling __vmalloc_node_noprof() with align=1. In such a case, how would vmalloc() guarantee the allocated memory is aligned to layout.align()? [Cc Vlastimil] Regards, Boqun > + // SAFETY: If not `None`, `ptr` is guaranteed to point to valid memory, which was previously > + // allocated with this `Allocator`. > + unsafe { realloc.call(ptr, layout, flags) } > + } > +} > + > #[global_allocator] > static ALLOCATOR: Kmalloc = Kmalloc; > > diff --git a/rust/kernel/alloc/allocator_test.rs b/rust/kernel/alloc/allocator_test.rs > index 4785efc474a7..e7bf2982f68f 100644 > --- a/rust/kernel/alloc/allocator_test.rs > +++ b/rust/kernel/alloc/allocator_test.rs > @@ -7,6 +7,7 @@ > use core::ptr::NonNull; > > pub struct Kmalloc; > +pub type Vmalloc = Kmalloc; > > unsafe impl Allocator for Kmalloc { > unsafe fn realloc( > -- > 2.45.2 >