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 354A8C83F1A for ; Thu, 17 Jul 2025 10:03:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 901356B0096; Thu, 17 Jul 2025 06:03:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8D8C56B0098; Thu, 17 Jul 2025 06:03:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8156C6B0099; Thu, 17 Jul 2025 06:03:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 741CC6B0096 for ; Thu, 17 Jul 2025 06:03:09 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 228F91A0694 for ; Thu, 17 Jul 2025 10:03:09 +0000 (UTC) X-FDA: 83673318498.12.5C574F0 Received: from out-179.mta0.migadu.com (out-179.mta0.migadu.com [91.218.175.179]) by imf14.hostedemail.com (Postfix) with ESMTP id CC79E100009 for ; Thu, 17 Jul 2025 10:03:03 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=t7wqn1Nd; spf=pass (imf14.hostedemail.com: domain of hui.zhu@linux.dev designates 91.218.175.179 as permitted sender) smtp.mailfrom=hui.zhu@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752746587; 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=vG/QNYhSzyXjAfEHBH+AHpgKWHamu3HkNiSa4nselYQ=; b=X4L4Fx4DQsfT2hh3HfYXLt8mHxFN4G+dHSQxmKU8uNqj5RvGQIn0GduS6DlcBqeTods+oD 3CCQn9ikjDTWeQFz/llo1Np+RKcehmBFmqTZAH//LnAHSatFgnu3mgd1P0IJywNGsTs76q 9zYWrLZiSjMwefOemA5CKH9vIBd22NI= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=t7wqn1Nd; spf=pass (imf14.hostedemail.com: domain of hui.zhu@linux.dev designates 91.218.175.179 as permitted sender) smtp.mailfrom=hui.zhu@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752746587; a=rsa-sha256; cv=none; b=Iwnn+KJjF7SUd0ldcuWJ8+jlRBEUl6Gg/6Fwx5M+/tBNpw8fXY2lm4rX1QZxbsbj5/ZbPz zXd4OMhy7k0tkAe3hGqs0RyO2nkkRLwrhLBcqoAty21hj6TOttZV3G9lRmoW+vOaNcEeG8 IhYiZtKg2nzV/vRxF53CMrRT16I3DD0= Date: Thu, 17 Jul 2025 18:02:47 +0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1752746581; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=vG/QNYhSzyXjAfEHBH+AHpgKWHamu3HkNiSa4nselYQ=; b=t7wqn1NdjP5pTYq7HdNHAN3spwlV2YrAe+YtEyw8isTBU13RAHeX5FQK7GkfUeJkwIT00J zNq37fDzkdJfV9X+c8Jpi1F44Mk48g8uP4zLG4Sv4qdSt3ZOzRKzQCmZFP/WguvMdBBwze fK4HwoB6oa2lvQYvxIChxjvytnQpkZQ= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Your Name To: Danilo Krummrich Cc: Andrew Morton , Uladzislau Rezki , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Geliang Tang , Hui Zhu , linux-kernel@vger.kernel.org, linux-mm@kvack.org, rust-for-linux@vger.kernel.org Subject: Re: [PATCH 3/3] rust: add a sample allocator usage Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Migadu-Flow: FLOW_OUT X-Stat-Signature: 7h8xjq6zb7yc8mbcktryp5zjudek5r9b X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: CC79E100009 X-Rspam-User: X-HE-Tag: 1752746583-688134 X-HE-Meta: U2FsdGVkX1+CsYdiNYMKcQT1jZZrMi7LVj0wzM05l9vPv/2IX0Ei/JzNa8PypF+kxiY+vAA9J1BwDEpN9gXUoN8KT4pT3Nst3lvWoRM8OGibKnaJURN4GhDIGrwQDD0uqr+IZKy4A4QLdJcsfLsFhIi1VIpFg/F6eUFE0fNkRG24XYjqv7b/P16+m3t/cnqKSUzeMBifyulL5hOLZoIDOpnNECuEkORlATzXee1lq+V6AH/5inxf/DtCoIXKrY2TRxetLWopbKLthGABUFCvvUjh1fQ5GwSOxWsgOAFhFHCiu4zr2NucqMdDJF4fUvSKxzUk85hF+Nu8HoC1mE0zWh15tQNYL4zwe+waUctEckGao2J8j1JdKM2nopTXYQCT2hyIjvFC7pCG/aWRM2JfCIy3/GSxOrn77hhePmszYPtDfXkdMjwEmNyixsyL+mikRyvIQnII4GqSCtNVrw5eETMhnmD0/NE332GYM3ju5UkzXJSbOsTFf6Rv21khBNQjGFbPtOal4YsEIzsbK07Jidq5ikI9WCvpRv605HImdYIOO5SM85xh5A7icNjz4MMVQUcqMSWULTywT3XhkeFIr6wN+uRSPCqV1FMItbFk3yZLm5YrTWCpfqa2whtFg0CQ5O4NtvxeRDGXJVwrzXSnfnfzAVY62Bg+bsFMTShGLTJZKw8Ab8CDNwuNsNqU+UhgSt5Kt8zojmYf1h0yTMNbgJOkkuIozYVjyWq8rYzE3tFW+LMst3TEzXJxH9Uv9ZOnMOPcLuYbbviLJRxnXoP4yrZuOL+JetT+DSaUPggm266kdGndlGLd4zl0jm8aN47h+NeK/cg79ueAqxqB5bnecGR0Db6ELzwNiqU7ESJxJrqv5VXFQbMu/hjPqs1PCu+gfM3dzmiCGjCBg/U+NC35CQRysMP/xxWQKtNIwIKKvYnqHaaZdq12iWHtnv6oDqAA+gJmh2y3uXe4qYxeaNS WSQ7d7HS Qg/INzkvG6tXF98y9NyK8v5y6dFS0nppZ6zJhXjtQGeMvZphYrZuyyIRCB7HNP2vaLa//7DkJwYv+O8NOtGJC93rllqyY19XXzGk7KKjff07jYiaLOFd40vvkdPP1JXykB1v6ijX1kXyDUwUgaZfh2KO5H6783fwUKlItY0kRoLikr4teaEr32UC0h06si9Fm84OkGDBO9TB0awp5c1xz6qt87I7HSL3teEB9cijYiB2y+Hf8wmtVMuyL9c9OhdNH/KYuuJI8obtrYHU4IZ0mDGOHFntNHCQJSFM6 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: Hi Danilo, Thanks for your help. On Tue, Jul 15, 2025 at 12:37:52PM +0200, Danilo Krummrich wrote: > On Tue Jul 15, 2025 at 11:59 AM CEST, Hui Zhu wrote: > > +impl kernel::Module for RustAllocator { > > + fn init(_module: &'static ThisModule) -> Result { > > + pr_info!("Rust allocator sample (init)\n"); > > + > > + let mut vmalloc_vec = KVec::new(); > > + for (size, align) in VMALLOC_ARG { > > + let (ptr, layout) = vmalloc_align(size, align)?; > > Ok, I think I get the idea, you want to demonstrate how to use the Allocator > trait for raw memory allocations. > > However, doing so is discouraged unless there's really no other way. One obvious > example are Rust's own memory allocation primitives, such as Box and Vec. > > So, instead of this raw allocation, you can just use VBox::new() or > VBox::new_uninit() in the following way. > > [repr(align(ALIGN))] > struct Blob([u8; SIZE]); > > // Creates a vmalloc allocation of size `SIZE` with an alignment of > // `ALIGN`. The allocation is freed once `b` is dropped. > let b = VBox::::new_uninit(GFP_KERNEL)?; > > This way you don't have to handle the layout and the Allocator type yourself and > you also don't have to care about explicitly calling vfree(), VBox does all this > for you. > > > + > > + let (addr, is_ok) = check_ptr(ptr, size, align); > > + if !is_ok { > > + clear_vmalloc_vec(&vmalloc_vec); > > + return Err(EINVAL); > > + } > > + > > + vmalloc_vec.push((addr, layout), GFP_KERNEL)?; > > + } > > + > > + Ok(RustAllocator { vmalloc_vec }) > > + } > > +} > I sent version v2. It only included the sample code and updated to use VBox according to your comments. Best, Hui