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 5C027C83F17 for ; Tue, 15 Jul 2025 13:46:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 14F538D000C; Tue, 15 Jul 2025 09:46:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0D9DC8D0001; Tue, 15 Jul 2025 09:46:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 015638D000C; Tue, 15 Jul 2025 09:46:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id E75C18D0001 for ; Tue, 15 Jul 2025 09:46:47 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 93A1A1604BD for ; Tue, 15 Jul 2025 13:46:47 +0000 (UTC) X-FDA: 83666624454.21.3B606E5 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) by imf27.hostedemail.com (Postfix) with ESMTP id AC47140005 for ; Tue, 15 Jul 2025 13:46:45 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=HMKBjpkr; spf=pass (imf27.hostedemail.com: domain of 3xFt2aAkKCJ89KHBDQXGKFNNFKD.BNLKHMTW-LLJU9BJ.NQF@flex--aliceryhl.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3xFt2aAkKCJ89KHBDQXGKFNNFKD.BNLKHMTW-LLJU9BJ.NQF@flex--aliceryhl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752587205; 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=oAn9sAZ8EZsg3ucGTZ/4Am850EAhLwSfcOwCMtHhu60=; b=ANoN9O1g2aUpQMNPclT8iVpieLok6AYJZYPQNcT79fMRdlsrIhE72TVHl+eD7ZtZEj4CVt f+aQWgOkzw6fRS2m8t8h9B6Upyh9sWd0z6INJsg+KbO8kkmHp/iabvPUOKEKR4HkHSK+Sn 21tmXuAINOXTZdSPCRMTReeLoYWZ8FI= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=HMKBjpkr; spf=pass (imf27.hostedemail.com: domain of 3xFt2aAkKCJ89KHBDQXGKFNNFKD.BNLKHMTW-LLJU9BJ.NQF@flex--aliceryhl.bounces.google.com designates 209.85.128.74 as permitted sender) smtp.mailfrom=3xFt2aAkKCJ89KHBDQXGKFNNFKD.BNLKHMTW-LLJU9BJ.NQF@flex--aliceryhl.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752587205; a=rsa-sha256; cv=none; b=kpmEywFjkElLOvrffCsarqVDePZKRTyAVOBCskMFTYzo4kJtE1703jwSI0934SbdO05CMA PBl0Z5KTYIeH4Si0zx8IBg0sviHxMcqJhJMcq3kphpN1VXzjhTr44lk4XLXVpJSLYR8Yg9 JOzmm0cc2drH5vseyGvbLhmo5hxbvHE= Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-455ea9cb0beso32291845e9.0 for ; Tue, 15 Jul 2025 06:46:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1752587204; x=1753192004; 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=oAn9sAZ8EZsg3ucGTZ/4Am850EAhLwSfcOwCMtHhu60=; b=HMKBjpkrIZnf78yg/HJZwE/uBHxKtvp4HFxhIDjNuh8LxszgR/MHkhnj/HIYpoGxaW a+w343ZNUn4V0TxOF279cBpyUieYPNvLpOSJUgF8GtZ8szACqrV8MgEXQpLJiDxCAEQe 122Q9XIOwI+rwgiXvtVWyw144wBopgqm4R+pmhpIxNWwBcO/ut/cJA9OXjkIZjlg6ZC3 8kG6irIvH0NwVsYBpMNwgU38QZyNGK63dwJBBqe49jnfegWEBwS1INK/Y5ZitxZSj+c1 vKTdRuMZeYLyPwOHDijNJPqygQN4S9f2q9LA2T3ZoZzoO3CZxKsFddAPAW39Bv4eiyVg R+AQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752587204; x=1753192004; 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=oAn9sAZ8EZsg3ucGTZ/4Am850EAhLwSfcOwCMtHhu60=; b=hgHfi6dExrnBfnY1OlHkTRhjeQgYOhj3EfO0yVU7AcWoC1KoyeEVoAkT7/DQPSdd7U gRSNEyrTmzFLd3WgXeNf738fDWeDj3n4LTRpbEOB1CM9msLC7unREq4VNi/1MW7Y/WX2 gar7eS0dz0vvPNqq/eEJLF/oKUV6SWvbpon9q6k1pvF1MeI1VNzjeNMFatDhq4qd3o4K nxFff+gFbvK5tTQwPMvO6WeTUJTM8zEDUGoVw/u1zd2Tjkge7Rcbiq3KJ56S8+c8tHgL nhhWvE+VoKb5mkVRLfoeW8xToPSf5M6OqS4mY+LOX5HLvOfHwOSH3etQvaDA32DMH8zN 29Cw== X-Forwarded-Encrypted: i=1; AJvYcCXOKB7zFzDqWN5PSh7KoRPhwXkwpcymA08n3WmKS5Kt0xbR6Pgo8Imc/R8OQagXIam8un6Y12/yPw==@kvack.org X-Gm-Message-State: AOJu0YzbLl+gjPyNoCxDZ21i6XCIpw0z5tuF1fANBEqpv6cbJYZ0K38T TYA53tlZs7cIfGWY4VmEZcZWISLZMWkmwODGrNLnFeZbRvqZL3/ALcPQEhgNwivOmYskU9atQW5 +PcSoZg0kaNYpQTB5Tg== X-Google-Smtp-Source: AGHT+IHoGckLvWDzkowkR6ET5+sYI+3T5P/yl3EGQk6HDQYDmQOtjc6slluNfepxqCpjmwkDzVqlDNegBJVJLnA= X-Received: from wmcq23.prod.google.com ([2002:a05:600c:c117:b0:453:b96:8ef9]) (user=aliceryhl job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:6387:b0:441:b3eb:574e with SMTP id 5b1f17b1804b1-455fffb208fmr111920755e9.5.1752587204158; Tue, 15 Jul 2025 06:46:44 -0700 (PDT) Date: Tue, 15 Jul 2025 13:46:35 +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=3033; i=aliceryhl@google.com; h=from:subject:message-id; bh=HCwawN0YyQsKejL+XoDR9LPJoThO5UjHqKypm6OsTj4=; b=owEBbQKS/ZANAwAKAQRYvu5YxjlGAcsmYgBodlvAMOKwdRZUEmkjEvHfadcX8KT55zoaKkjtB 8/E2YVNvsSJAjMEAAEKAB0WIQSDkqKUTWQHCvFIvbIEWL7uWMY5RgUCaHZbwAAKCRAEWL7uWMY5 RvWlEACVwTf3LaGWPdZzVjA0VxARZTMPfXdATCnuEUEOTxoZQ9YNo/+fR2zxY86i5WPXNkWRED/ E9zSgm9BzC2iJNlaeJ38MOO/SOIAnJgU1NNfG6G2wwEFw0I6e5iud6Z7kD+SZhB+SSsZg+sUlOZ EilR3I1gZVm/+Pz5bYlQ5/tBL/dSJaFmf1FmQpPjiiMcoJZN7gQZ3imMHoLecxbODebe4WsEFq4 BHYymGqRHX3Gi6eMXpXcnUzho1V9+9wV0yS1PyBJjffvfiuI4+u/GGM+SYnT+y0VbxxsB9uvE+c DYA8egDnAUwf8cIq7k9SSnbrKUOZgkwS/a66kDtfHowzCWXddpKXX0OQENhf+yhHNH7IsPp+W0J qpkQisawgO209fpixKZcKxSYm96Fv9NyG/YVZPTvVyAmVC27YNI8O/2YVKW386GUPUWvzEgnHUo F7pVrw6TTgCz/n42Ihabs5tZBR1mvE9kuynH810aMz6qv1X0OOXE2cDYvCU3MqpsuSofl9q98/r VVUnc5j7DXrG3dY7jonuZTsJnhqmPBgg6a4qm16/epTuJzhmoAZZwaUVaFLKQ1Y4iX3kCjnf+Mq iG/9DMVwaxiY3Cv/IXjY7HFtYL/P2vpNJevbhyt2gKEEmDAqoMWQ864rou6xqqVhy6Z9qu5aC/4 2ll/WoFLWAg2wjg== X-Mailer: b4 0.14.2 Message-ID: <20250715-align-min-allocator-v1-2-3e1b2a5516c0@google.com> Subject: [PATCH 2/2] rust: alloc: take the allocator into account for FOREIGN_ALIGN 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-Rspam-User: X-Rspamd-Queue-Id: AC47140005 X-Rspamd-Server: rspam06 X-Stat-Signature: bdrpsnbh3ahrpmmru5fm8m43phxaidco X-HE-Tag: 1752587205-634755 X-HE-Meta: U2FsdGVkX1+B7Koeiwqfjg+bCBxLZRyXvYm260bFY+WBwXhfpDH9/yChtg3jZEDwCF07CfTS5gMlzVWXIvruAPZLzuYt9q2CbhKnahYUyi0pCRTGJxv5TY3ncuHX8CbL5eHo1OQLwG66W2mlJatiBgRewyXj9rYaMJkyi8Jas1Im/7xog7q4yZetiO7rmM9HWlkzXjtROL554muFwTdkBWw3XnSSaDZJAn//lY0WKEGA++g4JwQKtraN3Pe66C9X5ncYh9YJI/eY6+nf80+qiJthD1tShFppNVKBcT+8MTwQsHDbkSLIM7CzyR/jesnMrOPSD6ReU8RwYCnUaEgFbJ2Ad5LLfsSigoxIz2VeMcTwcIzemczOomRkTiLiejjjZyQeCmhkJP1m/djr0DgikaX7uAh6aM7e8ImCtg94YnaETVOlWFCkuwNbZYUBE5Qg9qrizkLQMB7N3gIqRc0Mfwvp5F2a+nBesX56XlDTK1N5RT6+aQDG4xJ5uX/OVu4d4aKqNHWkwMypn/FVejQXJfvta2j6qjewR3kBeeCFlxiWoJV5p+NvcaUSw3p8cdzMDaNDzUhndWsdhxnMgkhXWLXMFogGEp+4flQjotZRkMRxi4MJhCbEmCxXvNaVXnvI/FDRwh1JT9GufnL2ZI2Q5ejn3oIJ9xaTtokt+De5XQpGeteecfiBthcHHaJBMfkuIujeOeX++XTR0DXk7b3xUrMDWdYP70sWx7rir4HDwfnFQbopC3WmsrvIxctjH/1Xtu1Dmq3KeVPWJ4OtXuTFdYOArCwWl/PM/bSLbii87IrjKrPPgiGgSEXajQofkNxPR5T0YkdNZWu/IlM+qF0p4JLplYSnMn4ZApq8I0T/DZoZTxOUGaPx/Uczlqf4zvssxnlw8zuQsssKXGAc1URA4kJqUpWnoDsG5hAhfAiXVhF73ShfSoKBvvRWf3Hzvki2iu1GdBplFm84eHkHCby KXUPEzDg TQA2E8HHyzHhnibahGjuvrBkyUVQBloKjjhoqdAeMnGOE6xfHo+nQwTJ5e5X5y8oS7QRWf28gj8fzpvNqKotHK4te6HDG8pNla6gA3I6PS6PdNInhjb4M2R4kFGr1kbpkOd/f0uluTxug85GZgdw0+IRLVnpfpLTly7DeuJOpfTDnl5at+YEyFlZUMLq0yu9r94fiYt5mHVTgHBBudcYrVws8juoVZZvgLWDHLdlWgwmreqbnR/M9S7QJ1ejetJ+IxbbbrjJpLTRLfk7YRwzAmXi/DDiJOex90qW4DoFBHyhYN/9f0XHAfzqWuO6QVLEyx7wAysjr/fd4UcrjBTGj6usbeyYqhWxWNsvkLWwLP59hxBRaRMom97723iFyks3NUrexg0p3oFEQhzlnTpErlFMJkgGVMLwEA6oxaknylZnbLnG+wMebmYt9jMhh38e0JYjLVK5acfxrKMrSNagg88GSAylXiQMBm+pwo4/Zn/UaZaVz+L8NM1G5veJ+y8egkaNBpOsaoQbDWvHsSh5rtci4GDWuzNuySh7Udp4taY+rCCGcKVRv/B6udPThqGdKbcpD/ig1cZ5zKXsD++X8HdtCrGfM4VCx3pP01YNfHooWZMNBGLBNorp2wjK0LfZYEybpF26kJ73k7u9KjcfN2aXdHoQzt+cDdi53d18PMrdzg5shrcfkWlA67w== 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: When converting a Box into a void pointer, the allocator might guarantee a higher alignment than the type itself does, and in that case it is guaranteed that the void pointer has that higher alignment. This is quite useful when combined with the XArray, which you can only create using a ForeignOwnable whose FOREIGN_ALIGN is at least 4. This means that you can now always use a Box with the XArray no matter the alignment of T. Signed-off-by: Alice Ryhl --- rust/kernel/alloc/kbox.rs | 15 +++++++++++---- rust/kernel/sync/arc.rs | 6 +++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/rust/kernel/alloc/kbox.rs b/rust/kernel/alloc/kbox.rs index bffe72f44cb33a265018e67d92d9f0abe82f8e22..fd3f1e0b9c3b3437fb50d8f1b28c92bc7cefd565 100644 --- a/rust/kernel/alloc/kbox.rs +++ b/rust/kernel/alloc/kbox.rs @@ -400,12 +400,19 @@ fn try_init(init: impl Init, flags: Flags) -> Result } // SAFETY: The pointer returned by `into_foreign` comes from a well aligned -// pointer to `T`. +// pointer to `T` allocated by `A`. unsafe impl ForeignOwnable for Box where A: Allocator, { - const FOREIGN_ALIGN: usize = core::mem::align_of::(); + const FOREIGN_ALIGN: usize = { + let mut align = core::mem::align_of::(); + if align < A::MIN_ALIGN { + align = A::MIN_ALIGN; + } + align + }; + type Borrowed<'a> = &'a T; type BorrowedMut<'a> = &'a mut T; @@ -434,12 +441,12 @@ unsafe fn borrow_mut<'a>(ptr: *mut c_void) -> &'a mut T { } // SAFETY: The pointer returned by `into_foreign` comes from a well aligned -// pointer to `T`. +// pointer to `T` allocated by `A`. unsafe impl ForeignOwnable for Pin> where A: Allocator, { - const FOREIGN_ALIGN: usize = core::mem::align_of::(); + const FOREIGN_ALIGN: usize = as ForeignOwnable>::FOREIGN_ALIGN; type Borrowed<'a> = Pin<&'a T>; type BorrowedMut<'a> = Pin<&'a mut T>; diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs index 63a66761d0c7d752e09ce7372bc230661b2f7c6d..74121cf935f364c16799b5c31cc88714dfd6b702 100644 --- a/rust/kernel/sync/arc.rs +++ b/rust/kernel/sync/arc.rs @@ -373,10 +373,10 @@ pub fn into_unique_or_drop(self) -> Option>> { } } -// SAFETY: The pointer returned by `into_foreign` comes from a well aligned -// pointer to `ArcInner`. +// SAFETY: The pointer returned by `into_foreign` was originally allocated as an +// `KBox>`, so that type is what determines the alignment. unsafe impl ForeignOwnable for Arc { - const FOREIGN_ALIGN: usize = core::mem::align_of::>(); + const FOREIGN_ALIGN: usize = > as ForeignOwnable>::FOREIGN_ALIGN; type Borrowed<'a> = ArcBorrow<'a, T>; type BorrowedMut<'a> = Self::Borrowed<'a>; -- 2.50.0.727.gbf7dc18ff4-goog