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 0573DC83F21 for ; Tue, 15 Jul 2025 13:46:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7B7758D0007; Tue, 15 Jul 2025 09:46:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 78F1F8D0001; Tue, 15 Jul 2025 09:46:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6A5388D0007; Tue, 15 Jul 2025 09:46:46 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 599968D0001 for ; Tue, 15 Jul 2025 09:46:46 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 1E17F804E1 for ; Tue, 15 Jul 2025 13:46:46 +0000 (UTC) X-FDA: 83666624412.05.06F10E4 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) by imf11.hostedemail.com (Postfix) with ESMTP id 288E140012 for ; Tue, 15 Jul 2025 13:46:43 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=SDjlLrnR; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf11.hostedemail.com: domain of 3wlt2aAkKCJ07IF9BOVEIDLLDIB.9LJIFKRU-JJHS79H.LOD@flex--aliceryhl.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3wlt2aAkKCJ07IF9BOVEIDLLDIB.9LJIFKRU-JJHS79H.LOD@flex--aliceryhl.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752587204; a=rsa-sha256; cv=none; b=1k6WLmiaETQskNac22jGqv03o9+bxAqdcA6tkBndyPJ8ZSoprgUQpXws8BpW5e0mjbZsiW wBvGcSaj7jUvFrT9qGZATNeyDQJYgRaL0RiIjaEYR+14Ue2JoNP8//Z9qplR9keryd6967 kLFFqVbBJWhJrrGcRoQBbVkG8noS+cI= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=SDjlLrnR; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf11.hostedemail.com: domain of 3wlt2aAkKCJ07IF9BOVEIDLLDIB.9LJIFKRU-JJHS79H.LOD@flex--aliceryhl.bounces.google.com designates 209.85.221.74 as permitted sender) smtp.mailfrom=3wlt2aAkKCJ07IF9BOVEIDLLDIB.9LJIFKRU-JJHS79H.LOD@flex--aliceryhl.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752587204; 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=ACo1fjYAZDXTqvJRVHRKHNWe7uZbNAFM49VRqGLnxa4=; b=LCNclFXpANcvrmSR4MMPWwans8NR1F3maMshuCMD8MZ8EupjlMtrOgSxZr1Z3Be97dSGN2 uekkyVvkoIWfAwzY6RW77HQt6JBP9/MezMrWEspt39wO/60dZkp8ywChI5qUKqHkP7zt9b zsi3QCNFbvJFttG+lOpM0TSmHvb1ecM= Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-3a4eec544c6so2483121f8f.0 for ; Tue, 15 Jul 2025 06:46:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1752587203; x=1753192003; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=ACo1fjYAZDXTqvJRVHRKHNWe7uZbNAFM49VRqGLnxa4=; b=SDjlLrnRNB+Vbbo2DQ12sl/wb91RXGHsXF9fiXizznyQ1QgdbTLzUl+UiC5ONnm1TR CJ1Dy28OXep9gXwdKG8uuR6s5pQmauoCLJ/tulAjbLV4CnhgbD3cp8V6cuULGMi9tDBe dmodp5iws2KM4El/NBi1qVQiygu8DXT9umssbV4wPTxozjLTqUd6AFBPl3foi9360JfB LOep4ezTwSx5RjQ2CfH+QcjnsQ3GTFEm1zkdaBAb29ow1JRkZwwO16xBDbYDC0ytcTqv TpG+NnmaIuyvnjEc0dS+98gohQ+cEeLsw7FyksC89DxQawvLGp+BXitS2fEanGo0Xn5E N9tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752587203; x=1753192003; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ACo1fjYAZDXTqvJRVHRKHNWe7uZbNAFM49VRqGLnxa4=; b=F9IK2Q82Xptr33FwEV4R+1HxDV1EaMVLEefGw4voFOzpFFbPn0ssdVfBNHy53caHsE tHqOPkoP3dHm/po7BVzT4e0Mdg9hGiZjF/MPokHCtb6+slLCJZBKHuS6TX34rtXtLz4s sIFMyh1XNDgaIKsOiXWOys3dnJQEJfXwtjcgDuI5WXzEOMad9ujQgq2vL7XSgxULawQt 5/5WVm150nikOE/3Fvcrv25TxH4lRos/OIIan71bPdwHxN6uFWcOikdn5Kmmfzu8a/Ns OKcff4GgITfsgLdHGeksNoWwVhKj9NQBG8ajckbP4evE+cE0H1yH3irD8U4qCoMz4GqX MqpQ== X-Forwarded-Encrypted: i=1; AJvYcCWV5ih8o2NmOP9tpB+pi2ifKnuGq789VFFEuVvrwJMgLdeBpp89Uk/v3Tw/t7dBbgVJ3wj3EYmwgw==@kvack.org X-Gm-Message-State: AOJu0YyHfXU3pC0xfP0KfRosLvkMOuQsXlmVDeTWhg0ngr8VIoAjhZeQ 4EEwHMmlKU9rs0PAbru2SUroe7fZyC4cingmF0IIXOyRW/ykirJ58O0P5kSiG9fGS5tT2mDaeTt aaPpkD0pnJdXztAEL5A== X-Google-Smtp-Source: AGHT+IGBq3R9luEQdDGUT+ehdyASOxOv6YZaQeET7ZAo5DpnvtF4ybFvvtKpEyvlFqi5avs2rWm3frsM24DgRxc= X-Received: from wruz15.prod.google.com ([2002:a5d:640f:0:b0:3a4:d770:e74f]) (user=aliceryhl job=prod-delivery.src-stubby-dispatcher) by 2002:adf:e186:0:b0:3a5:2653:7308 with SMTP id ffacd0b85a97d-3b5f18debd5mr16710074f8f.57.1752587202941; Tue, 15 Jul 2025 06:46:42 -0700 (PDT) Date: Tue, 15 Jul 2025 13:46:34 +0000 In-Reply-To: <20250715-align-min-allocator-v1-0-3e1b2a5516c0@google.com> Mime-Version: 1.0 References: <20250715-align-min-allocator-v1-0-3e1b2a5516c0@google.com> X-Developer-Key: i=aliceryhl@google.com; a=openpgp; fpr=49F6C1FAA74960F43A5B86A1EE7A392FDE96209F X-Developer-Signature: v=1; a=openpgp-sha256; l=3170; i=aliceryhl@google.com; h=from:subject:message-id; bh=hm+QQVA6P62r4L8yRa8/F/rPQxTQzaWcqgojZ/rjEUg=; b=owEBbQKS/ZANAwAKAQRYvu5YxjlGAcsmYgBodlvAXD7jigSPg9pSkftUrz+P7iBYlXollyaEL i0weeZAJxSJAjMEAAEKAB0WIQSDkqKUTWQHCvFIvbIEWL7uWMY5RgUCaHZbwAAKCRAEWL7uWMY5 RgWNEACObqQ81a9TVudRRgk/RKfwO4T/cIHYyu/eu6p3lZsOHdCSR9F4jZ9sE7np7W501HA+Kky 4e7gim/kZqfXXbE5beTOqB2QwcAN0IwNql4HiqEzlE/76NUMo2ZEfszAs/QqCTc/+8bUb0MFaBD wbRo4oMU0ig4KPILmY6btYspJoJtFE43XfAIKmDspYTLmqqaadjYcooO7So5lzo1uAVcGmAnEzM W+WQb0dyEq+Q5LXJaIFKOAgVjos4a4RAjSRnrjSC26MBTIVJJ6Ftdxyi9F/wiIvk8IX/EEDZAWS I1LpQ3XrF33mJ5mqGvS2UXWDQ29nDuyU4DtkM8yZq7L3tmq4pha+Bkpp799IZE2fky/k/06XTez BlwxsFs4aD7pPaEeFi2tiie/10QRIvH8Y6ZuxE4Lvs/bSNaJgbFl0Q8IFEMfzns0WhNCAVE2mmf iyeQAod6UF2/UlbtAOcYO2as35v+5owOmUIqJp8RzgiFtq4L8YXFyG2o93+vHw3qATYv10ybtKV uO1Ta3KpJQNH4k9ykCXIPJKr6591OvcRrwGQLJW2Onk3P1CyJb+/893rfu9PhBfgK9+vES0CTqw dkbPcrIPpMkoua1OmLBVdtNUlg7yeL1D1lTBdabUp4LA1LQEHtG3+iusPKtNQpcJoTCTXdS5Wvd /v7VSjaqrfl3BeQ== X-Mailer: b4 0.14.2 Message-ID: <20250715-align-min-allocator-v1-1-3e1b2a5516c0@google.com> Subject: [PATCH 1/2] rust: alloc: specify the minimum alignment of each allocator From: Alice Ryhl To: Lorenzo Stoakes , "Liam R. Howlett" , Andrew Morton , Danilo Krummrich , Matthew Wilcox , Tamir Duberstein , Andreas Hindborg , Miguel Ojeda Cc: Boqun Feng , Gary Guo , "=?utf-8?q?Bj=C3=B6rn_Roy_Baron?=" , Benno Lossin , Trevor Gross , linux-mm@kvack.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, Alice Ryhl Content-Type: text/plain; charset="utf-8" X-Rspamd-Queue-Id: 288E140012 X-Stat-Signature: 3gocigqci7nexpyrg6u6c9nysif69e37 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1752587203-124747 X-HE-Meta: U2FsdGVkX1/9jWVS5Q46CVEFVXV9yCcQdhzNJLBAWSOLaMa9Se62Vmvz6eSnfQ8IHEgSxTvtMOZau+sEwiNj/Imd3OU8FDh+9xSHQdaGb/vzEtHxaXvev5VPPcH6i1Qm7CmyGss3D+WoY5KlHU4iXHg7RuFi4HKd0ln68Hfoc1PVueFKdmJNQ+TslPGYiHbqWVlpF08kmyACEDCuJyKzU4LxXHlVWXYytdmJLxRbQNFrs7Ma+e2547eYQdSEpAzOtDH6exckOcy4rHRY8/0EIXACoTuTDBHpkc4Lu2ChgIqDON9zZgbhScQVW4k/sBBdopFeU0eIeF+q2ENjZDWcK2Jv7aXyIrmvsh8z7nEHQ48unUNnaAhsQ7xzsXSZBbDGXGuMWAgkrsXRyCwS4owAvoZ8Ps/zASmEBYqz0CDTMvBQjVmuAtly68CZRLc9sCETTukxUFk3meQLgpAF2JS+jaxI6dnp//SB/Ga1DMBLL5RQe1meuRO1480liicvHr4w88RuTKHIFg9QyhghGp9Lo2VYOZv+bTJ+/dE7yq6TipP3h9UxatR6gZ93fUdYA09tkkqdMW6AXLXYnmQwL1g/gDifriv3sz9Vc6j4Za61LxUj43wVs/AisI4ZuijoFt/5jjI8sMTSdpRD7ACwsbzcsDkHmmnjiKx+s4R1Sut/L4/r3YJX4MBSK5vyiZcGK5Xheq3u264ejDpkdAAJw/U4AQbZnaUm46HHQP0B/q5u1cal6u4eDvor1qGYeE7lvm0EKU5hwyTPEj2az78cnaMzcI9nlDXDhL8q7wjjhk6fannZyNyInownR360Q2utiJfbONwutcaKqwfDT0BaR/dAHl4G/RDOCPmYa2aveIbSdWGDjHSI8hfXgTJPv5/w1f3oTCVA2WCJ15t1KKziCdSmGfaLzSr5p24cpz9CKvGsoqq7QKSD+JRy1RWrz/p0igL+gIlNNPeKAeUHl4rOBD8 n0zuj00V qC3o1X/2cxs9tkSpGNz2JhzAG8YrBJUZAMz9ljQKo3bwMT5En0YBSLyPR6gUOCAWTQBlVm735cKgkQ2rJqT0cWqiGN7xdAMHu3Fm+hK15pL4xRO0pT1tkYwc7QiYzhCghZAFYAkDpafJbq2kVc2z2TPvZTKfmnBiChdtF2t5o30pI/KDVqo7VHTx1iOAWWbl8wJr3b5lEL4LA9aqSyU52RGRA1RtsLaHL2AEZGnojGtwAw4yNdflS4xw03NsCycBY9n+ZcsGZvDbrIuHVt7zkDI5rXQfVe9QyWJmgqUrgAhEjLbcVn6uWRR+pDTOCDtDhruhT4HZsKmvIFGhM3LNhTB9w7Y9WzIogDiGe5WTKS5WV/s20psWs9pp9Zbbg3nOJfiW4cygDmSNtOzWPTB6ZcDWmLCZWghPgScrDhBPatK1HSu0/pTEBat7QpkqCjozAhTXem3lVSTTPiSYGlDZ0wjV4CU7XSs9VOvGzdFK+6/GNLH7PmdLjyY94YKYmtJdmovokAtQz8ar9bL0+bbESRZ16SnjXj/9ooi804olzfPfRoEOjsSqQfw7hnMVdDQsykmjoVuOQKHCTfv5VL8Prg6pmo6d0K5n/aHqiwhSIshR3Yfz3wOezSz1+EV9IaXESxmuXvQxoEaCEzYE= 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: The kernel's allocators sometimes provide a higher alignment than the end-user requested, so add a new constant on the Allocator trait to let the allocator specify what its minimum guaranteed alignment is. This allows the ForeignOwnable trait to provide a more accurate value of FOREIGN_ALIGN when using a pointer type such as Box, which will be useful with certain collections such as XArray that store its own data in the low bits of pointers. Signed-off-by: Alice Ryhl --- rust/kernel/alloc.rs | 8 ++++++++ rust/kernel/alloc/allocator.rs | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/rust/kernel/alloc.rs b/rust/kernel/alloc.rs index a2c49e5494d334bfde67328464dafcdb31052947..c12753a5fb1c7423a4063553674b537a775c860e 100644 --- a/rust/kernel/alloc.rs +++ b/rust/kernel/alloc.rs @@ -137,6 +137,14 @@ pub mod flags { /// - Implementers must ensure that all trait functions abide by the guarantees documented in the /// `# Guarantees` sections. pub unsafe trait Allocator { + /// The minimum alignment satisfied by all allocations from this allocator. + /// + /// # Guarantees + /// + /// Any pointer allocated by this allocator must be aligned to `MIN_ALIGN` even if the + /// requested layout has a smaller alignment. + const MIN_ALIGN: usize; + /// Allocate memory based on `layout` and `flags`. /// /// On success, returns a buffer represented as `NonNull<[u8]>` that satisfies the layout diff --git a/rust/kernel/alloc/allocator.rs b/rust/kernel/alloc/allocator.rs index aa2dfa9dca4c309e5a9eafc7da6a8a9bd7b54b11..25fc9f9ae3b4e471a08d77130b374bd1397f7384 100644 --- a/rust/kernel/alloc/allocator.rs +++ b/rust/kernel/alloc/allocator.rs @@ -17,6 +17,8 @@ use crate::bindings; use crate::pr_warn; +const ARCH_KMALLOC_MINALIGN: usize = bindings::ARCH_KMALLOC_MINALIGN as usize; + /// The contiguous kernel allocator. /// /// `Kmalloc` is typically used for physically contiguous allocations up to page size, but also @@ -128,6 +130,8 @@ unsafe fn call( // - passing a pointer to a valid memory allocation is OK, // - `realloc` satisfies the guarantees, since `ReallocFunc::call` has the same. unsafe impl Allocator for Kmalloc { + const MIN_ALIGN: usize = ARCH_KMALLOC_MINALIGN; + #[inline] unsafe fn realloc( ptr: Option>, @@ -145,6 +149,8 @@ unsafe fn realloc( // - passing a pointer to a valid memory allocation is OK, // - `realloc` satisfies the guarantees, since `ReallocFunc::call` has the same. unsafe impl Allocator for Vmalloc { + const MIN_ALIGN: usize = kernel::page::PAGE_SIZE; + #[inline] unsafe fn realloc( ptr: Option>, @@ -169,6 +175,8 @@ unsafe fn realloc( // - passing a pointer to a valid memory allocation is OK, // - `realloc` satisfies the guarantees, since `ReallocFunc::call` has the same. unsafe impl Allocator for KVmalloc { + const MIN_ALIGN: usize = ARCH_KMALLOC_MINALIGN; + #[inline] unsafe fn realloc( ptr: Option>, -- 2.50.0.727.gbf7dc18ff4-goog