From nobody Mon Feb 9 08:56:12 2026 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39F37349B10 for ; Sat, 10 Jan 2026 15:09:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768057784; cv=none; b=DPpZ1jf74m+4MrPgIazowU069uStFef7u0ZnlktDMclFa6xHXgC6iAdfTLocarGtTNNjOSOebQZngP9EoRw2Qj/6DH6fVPNN7qfkcQElQurX3EGnEe8d/hnhy75yFQHNarEqPzRrXJ1SZP+guxN18pEd4kaLiQiX9xjzA1N4NBI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768057784; c=relaxed/simple; bh=RPwYcsbO6FvGujOyqzQn4sJnbXGyGs4NpzWn8HY+yNY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pnlM8BkcyzU+0Sf+SsOJmBDy3CbFqr2x9VJ2wLljYv6lNYVFfISS1CPlC93prAGKJneedwKisRn+nqb1KigbY1anOVs5UdkUZFq/n3Zfs+zL97MlcTvlmDllTDLO/W/BYfsr7CbuQjuxamtOBvAMzLoe2+XYDuugAjbzrneo/dk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=iMjyDMUP; arc=none smtp.client-ip=209.85.167.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iMjyDMUP" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-59b834e3d64so1533282e87.2 for ; Sat, 10 Jan 2026 07:09:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768057780; x=1768662580; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=TJZFqk7vh2YSe9SFh94/y7TJPpOJJYaVuu6o0W+r2E0=; b=iMjyDMUPSEY8Lmq3R0FAa3quZjmWCFnzj0ccxNiTn8rYW7WDyI0Zy1DMSxJqXW3bzx +P7cmQGSiY6AJ09TTWqJrN9NN5gsp+USi011s0g/poVghoANObGOmlrdwhioBkvc4eKe wgBk1NtkzuYjILvPgOuWXEKNMTsfhSd/MHRGwf3+zmmYDnDFJXiT6x+IHJAEYLdg0edC kj/yXGQc1l6pImih45hk/lGhJHapUXVSd7LaPVpYX0U8daR2qqpKaQpTnzD7ViL50OxR G71kYh5mUcCq9pIuyl3n+6ag8HtO7stfVCaR9nGRACS41OnKZamqmy27MoJ6+hWmtXvm pCSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768057780; x=1768662580; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=TJZFqk7vh2YSe9SFh94/y7TJPpOJJYaVuu6o0W+r2E0=; b=jJfOBC9YQNTueqEjj3ejRRwMx3n1GrZwSsBq09NeSCPXdiaoowyDORb+qjMoTL8mNd RyR4nn4Y6F4jdOwwZvJTd+cqbShuF3FAwhc9M6yQ9GqZ8+GSwgqWI64BRYgO/BTAIshK rRE6XIqQ1t1HuLmnlFN14xjKloSQoXEapffg1Oq/9OEjUd/+wMMsPcqqaM6UDQv2YJd7 wvOWbe3eOnpOZM5OZWUL8XAf0+VkUBI4igPtA4hTLn6awzj+lJR370VAqFLSpyxUCM4D 2CV1tcRwFtM+R/JwqTVQHUJZ4sfEkm0EcRcDZ2WxxZdi6AjnGeTXz2NqkEj+uMoGNng2 Y47A== X-Forwarded-Encrypted: i=1; AJvYcCXyOD5hFSlohk7zR84dXj9q4RRUl3pGxYBnL/CaiCwr/YeAFqzdFwbWBqmIRcZ1riR1WcEdL1RLvQUDIwk=@vger.kernel.org X-Gm-Message-State: AOJu0Yxk1gyhc5Pg9odg0GysRwx18+SUjwKzx1TxF7xwZ4qZSDaclStt wM/QLXAWTMevamYzoNwsWae+DiLS+3S92IFMVitgKX0lC/48jFN0jCx6 X-Gm-Gg: AY/fxX67QyOAtb6Uet2+52BpSt7gZux4Lo55+PUVSFUP5tOrqEfVckfZmJD0xQ68u1B aYq13a7F+iHVij8DGmp9ytnlfYzeYm+K///itiQjrlgusKVhbvM81RnhyabzhTGsr5BSY5MUnMO nQOMRiWt8g0A/JuWkbIeva++bQYypDF+IlQSBzJ5rcPehml52L+bJ8SFP4RFMVB85aokKsI0DRM vWrdxabsOCJzOxceFTovzrMIoFZ6SYRtlu2kLwmbU/hXYZSoRhYcwhzFY6LjWNYf+4fyWtSAKxj SgnuoIMxvIIj8sKaqcJCWJnKXNom3BRYmoxWGCh3qTYm6qiuCk0eVvaeeBr1w1s8TkoLtwumsYw gipKN3/rtrVnQf8X0Nj7wgo1sEdIhS19B6bG4RBjZNDktzDe1ev7/x9SnCK8Iz3Zdj1IZEsE3+Y lF8qjN28cSo5o18Q1mzo/sKIob2DWtmnmiVSFp+t0wc2uNe0svKCpIKYJC52bMZVhs1lBgJxbn X-Google-Smtp-Source: AGHT+IGrXaDwrVcPD7nQyKOzD7OZoH3I9M3zAJdjB+Pw3+clRX2CyUU8JcGUGqOgg81EpbJqhGCXjg== X-Received: by 2002:a05:6512:3b92:b0:598:efe3:42d9 with SMTP id 2adb3069b0e04-59b6ef23c6cmr4461411e87.5.1768057779866; Sat, 10 Jan 2026 07:09:39 -0800 (PST) Received: from LT-5CG5341NQ4.nordic.imtech.com (37-33-148-7.bb.dnainternet.fi. [37.33.148.7]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-59b75543a64sm2137059e87.49.2026.01.10.07.09.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 07:09:39 -0800 (PST) From: Kari Argillander Date: Sat, 10 Jan 2026 17:08:10 +0200 Subject: [PATCH RFC v3 12/15] rust: phy: make Registration::register() use new ThisModule Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260110-this_module_fix-v3-12-97a3d9c14e8b@gmail.com> References: <20260110-this_module_fix-v3-0-97a3d9c14e8b@gmail.com> In-Reply-To: <20260110-this_module_fix-v3-0-97a3d9c14e8b@gmail.com> To: Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Alexandre Courbot Cc: Greg Kroah-Hartman , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-modules@vger.kernel.org, Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Kari Argillander X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1768057742; l=3371; i=kari.argillander@gmail.com; s=20251219; h=from:subject:message-id; bh=RPwYcsbO6FvGujOyqzQn4sJnbXGyGs4NpzWn8HY+yNY=; b=eOz1FkieCkXNv0LbzaUrw6lJv8jXnr2v2Ev87tDvYXN97UoTGaEAUQ7gOBLgSrC/C9PzjTfOI uNR/UatFeLaAqdfhARe65M84rWjJrWC14lZyJdS7QY5ojhJUns9YC/1 X-Developer-Key: i=kari.argillander@gmail.com; a=ed25519; pk=RwSxyhTpE3z4sywdDbIkC3q33ZQLNyhYWxT44iTY6r4= Switch `Registration::register()` to take the owning module via the `ThisModule` abstraction instead of an explicit module parameter. The function is now generic over `TM: ThisModule`, allowing the module owner to be resolved at compile time through `TM::OWNER`. This unifies the way `THIS_MODULE` is passed to Rust abstractions and avoids threading module pointers manually through the API. This also removes redundant parameters and prevents accidental mismatches between the registered drivers and their owning module. Signed-off-by: Kari Argillander --- rust/kernel/net/phy.rs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/rust/kernel/net/phy.rs b/rust/kernel/net/phy.rs index 3ca99db5cccf..ef9c4be4f1ad 100644 --- a/rust/kernel/net/phy.rs +++ b/rust/kernel/net/phy.rs @@ -6,8 +6,17 @@ //! //! C headers: [`include/linux/phy.h`](srctree/include/linux/phy.h). =20 -use crate::{device_id::RawDeviceId, error::*, prelude::*, types::Opaque}; -use core::{marker::PhantomData, ptr::addr_of_mut}; +use crate::{ + device_id::RawDeviceId, + error::*, + prelude::*, + this_module::ThisModule, + types::Opaque, // +}; +use core::{ + marker::PhantomData, + ptr::addr_of_mut, // +}; =20 pub mod reg; =20 @@ -648,10 +657,7 @@ unsafe impl Send for Registration {} =20 impl Registration { /// Registers a PHY driver. - pub fn register( - module: &'static crate::ThisModule, - drivers: Pin<&'static mut [DriverVTable]>, - ) -> Result { + pub fn register(drivers: Pin<&'static mut [DriverVTabl= e]>) -> Result { if drivers.is_empty() { return Err(code::EINVAL); } @@ -659,7 +665,11 @@ pub fn register( // the `drivers` slice are initialized properly. `drivers` will no= t be moved. // So it's just an FFI call. to_result(unsafe { - bindings::phy_drivers_register(drivers[0].0.get(), drivers.len= ().try_into()?, module.0) + bindings::phy_drivers_register( + drivers[0].0.get(), + drivers.len().try_into()?, + TM::OWNER.as_ptr(), + ) })?; // INVARIANT: The `drivers` slice is successfully registered to th= e kernel via `phy_drivers_register`. Ok(Registration { drivers }) @@ -889,12 +899,11 @@ struct Module { [$($crate::net::phy::create_phy_driver::<$driver>()),+]; =20 impl $crate::Module for Module { - fn init(module: &'static $crate::ThisModule) -> Result { + fn init(_module: &'static $crate::ThisModule) -> Result { // SAFETY: The anonymous constant guarantees that nobo= dy else can access // the `DRIVERS` static. The array is used only in the= C side. let drivers =3D unsafe { &mut DRIVERS }; - let mut reg =3D $crate::net::phy::Registration::regist= er( - module, + let mut reg =3D $crate::net::phy::Registration::regist= er::( ::core::pin::Pin::static_mut(drivers), )?; Ok(Module { _reg: reg }) --=20 2.43.0