Re: [PATCH v2 1/4] rust: pci: make Vendor::from_raw() public
From: Onur Özkan
Date: Sat Jun 20 2026 - 05:49:17 EST
On Sat, 20 Jun 2026 10:45:45 +0200
Maurice Hieronymus <mhi@xxxxxxxxxxx> wrote:
> `Vendor::from_raw()` is currently `pub(super)`, so a Vendor can only be
> obtained through the named constants generated from the
> `PCI_VENDOR_ID_*` defines in `<linux/pci_ids.h>`. A driver therefore
> cannot match a device whose vendor ID has no symbolic name.
>
> Such devices exist. QEMU's "edu" educational device and the legacy
> qemu/Bochs stdvga both use vendor ID 0x1234, which is not registered in
> `pci_ids.h`. Per the policy stated at the top of that header, IDs are
> only added there when shared between multiple drivers; a single-driver
> ID is expected to be open-coded in the driver instead. C drivers already
> do this -- see `drivers/gpu/drm/tiny/bochs.c`, which matches with a bare
> ".vendor = 0x1234".
>
> The Rust abstraction has no equivalent escape hatch: there is no public
> way to express an unregistered vendor. Make `Vendor::from_raw()` public
> (and const, so it can be used in the const device-ID tables built by
> `pci_device_table!`) so that drivers can construct a Vendor from a raw
> ID, matching what C drivers can already do.
>
> Reviewed-by: Gary Guo <gary@xxxxxxxxxxx>
> Signed-off-by: Maurice Hieronymus <mhi@xxxxxxxxxxx>
Reviewed-by: Onur Özkan <work@xxxxxxxxxxxxx>
> ---
> rust/kernel/pci/id.rs | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/rust/kernel/pci/id.rs b/rust/kernel/pci/id.rs
> index dbaf301666e7..fe3b0047179b 100644
> --- a/rust/kernel/pci/id.rs
> +++ b/rust/kernel/pci/id.rs
> @@ -156,7 +156,7 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> impl Vendor {
> /// Create a Vendor from a raw 16-bit vendor ID.
> #[inline]
> - pub(super) fn from_raw(vendor_id: u16) -> Self {
> + pub const fn from_raw(vendor_id: u16) -> Self {
> Self(vendor_id)
> }
>
>
> --
> 2.51.2
>