On Thu Jul 10, 2025 at 10:01 AM CEST, Benno Lossin wrote: > On Thu Jul 10, 2025 at 4:24 AM CEST, Alistair Popple wrote: >> diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs >> index 8435f8132e38..5c35a66a5251 100644 >> --- a/rust/kernel/pci.rs >> +++ b/rust/kernel/pci.rs >> @@ -371,14 +371,18 @@ fn as_raw(&self) -> *mut bindings::pci_dev { >> >> impl Device { >> /// Returns the PCI vendor ID. >> + #[inline] >> pub fn vendor_id(&self) -> u16 { >> - // SAFETY: `self.as_raw` is a valid pointer to a `struct pci_dev`. >> + // SAFETY: by its type invariant `self.as_raw` is always a valid pointer to a > > s/by its type invariant/by the type invariants of `Self`,/ > s/always// > > Also, which invariant does this refer to? The only one that I can see > is: > > /// A [`Device`] instance represents a valid `struct device` created by the C portion of the kernel. > > And this doesn't say anything about the validity of `self.as_raw()`... Hm...why not? If an instance of Self always represents a valid struct pci_dev, then consequently self.as_raw() can only be a valid pointer to a struct pci_dev, no?