On Fri, Oct 30, 2026 at 10:12:24AM -0700, Simon Song wrote: > From: Zhi Wang <[email protected]> > > Rust PF and VF drivers bind to separate PCI devices and may reside > in different modules. A VF driver that calls PF operations needs > typed access to the data exposed by the PF driver. This data must > remain valid until VF driver removal completes. > > Add VfRegistration to register a pinned object in the PF's private > data. VF drivers can borrow it after checking the requested Rust > type, using a higher-ranked closure or a covariant lifetime encoding. > > Capture the core callback context in the initializer. Reject active > VFs and an occupied registration slot before initializing the payload, > then recheck the slot before publication in case the payload initializer > created another registration. Publish only after all fallible work. > > During registration teardown, disable SR-IOV and wait for VF remove > callbacks to finish before clearing the pointer and dropping the object. > > Co-developed-by: Danilo Krummrich <[email protected]> > Signed-off-by: Danilo Krummrich <[email protected]> > Signed-off-by: Zhi Wang <[email protected]> > Signed-off-by: Simon Song <[email protected]>
Acked-by: Bjorn Helgaas <[email protected]> # include/linux/pci.h > diff --git a/include/linux/pci.h b/include/linux/pci.h > index d31a8d107b1..9b6ae544469 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -551,6 +551,13 @@ struct pci_dev { > u16 ats_cap; /* ATS Capability offset */ > u8 ats_stu; /* ATS Smallest Translation Unit */ > #endif > +#if defined(CONFIG_PCI_IOV) && defined(CONFIG_RUST) > + /* > + * Private data owned by the PF's Rust driver, readable by VF drivers > + * through the PCI VF registration data Rust abstraction. > + */ > + void *vf_registration_data_rust; I assume use of vf_registration_data_rust is meant to stay encapsulated in rust/kernel/pci.rc and rust/kernel/pci/.
