Convert the direct IO accesses to properly defined registers.
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
---
samples/rust/rust_driver_pci.rs | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/samples/rust/rust_driver_pci.rs b/samples/rust/rust_driver_pci.rs
index 4dfb8a6a4707..df2232d6b71f 100644
--- a/samples/rust/rust_driver_pci.rs
+++ b/samples/rust/rust_driver_pci.rs
@@ -70,24 +70,37 @@ fn testdev(index: &TestIndex, bar: &Bar0) -> Result<u32> {
fn config_space(pdev: &pci::Device<Bound>) {
let config = pdev.config_space();
- // TODO: use the register!() macro for defining PCI configuration space registers once it
- // has been move out of nova-core.
+ // Some PCI configuration space registers.
+ ::kernel::register! {
+ VENDOR_ID(u16) @ 0x0 {
+ 15:0 vendor_id;
+ }
+
+ REVISION_ID(u8) @ 0x8 {
+ 7:0 revision_id;
+ }
+
+ BAR(u32)[6] @ 0x10 {
+ 31:0 value;
+ }
+ }
+
dev_info!(
pdev.as_ref(),
"pci-testdev config space read8 rev ID: {:x}\n",
- config.read8(0x8)
+ REVISION_ID::read(&&config).revision_id()
);
dev_info!(
pdev.as_ref(),
"pci-testdev config space read16 vendor ID: {:x}\n",
- config.read16(0)
+ VENDOR_ID::read(&&config).vendor_id()
);
dev_info!(
pdev.as_ref(),
"pci-testdev config space read32 BAR 0: {:x}\n",
- config.read32(0x10)
+ BAR::read(&&config, 0).value()
);
}
}
--
2.52.0
On Wed Jan 28, 2026 at 3:37 AM CET, Alexandre Courbot wrote:
> Convert the direct IO accesses to properly defined registers.
>
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> ---
> samples/rust/rust_driver_pci.rs | 23 ++++++++++++++++++-----
> 1 file changed, 18 insertions(+), 5 deletions(-)
>
> diff --git a/samples/rust/rust_driver_pci.rs b/samples/rust/rust_driver_pci.rs
> index 4dfb8a6a4707..df2232d6b71f 100644
> --- a/samples/rust/rust_driver_pci.rs
> +++ b/samples/rust/rust_driver_pci.rs
> @@ -70,24 +70,37 @@ fn testdev(index: &TestIndex, bar: &Bar0) -> Result<u32> {
> fn config_space(pdev: &pci::Device<Bound>) {
> let config = pdev.config_space();
>
> - // TODO: use the register!() macro for defining PCI configuration space registers once it
> - // has been move out of nova-core.
> + // Some PCI configuration space registers.
> + ::kernel::register! {
> + VENDOR_ID(u16) @ 0x0 {
> + 15:0 vendor_id;
> + }
> +
> + REVISION_ID(u8) @ 0x8 {
> + 7:0 revision_id;
> + }
> +
> + BAR(u32)[6] @ 0x10 {
> + 31:0 value;
> + }
> + }
> +
> dev_info!(
> pdev.as_ref(),
> "pci-testdev config space read8 rev ID: {:x}\n",
> - config.read8(0x8)
> + REVISION_ID::read(&&config).revision_id()
> );
>
> dev_info!(
> pdev.as_ref(),
> "pci-testdev config space read16 vendor ID: {:x}\n",
> - config.read16(0)
> + VENDOR_ID::read(&&config).vendor_id()
> );
>
> dev_info!(
> pdev.as_ref(),
> "pci-testdev config space read32 BAR 0: {:x}\n",
> - config.read32(0x10)
> + BAR::read(&&config, 0).value()
> );
> }
> }
That's only the config space registers, can you please also convert the MMIO
ones?
On Wed, 28 Jan 2026 11:37:32 +0900
Alexandre Courbot <acourbot@nvidia.com> wrote:
> Convert the direct IO accesses to properly defined registers.
>
Tested-by: Zhi Wang <zhiw@nvidia.com>
I can see the correct value of the registers read by the sample driver
from the demesg.
Additionally, Clippy was complaining about unnecssary unsafe blocks and
can be fixed by: (I haven't fully gone through the code, just applied this
for getting rid of the warnnings.)
diff --git a/rust/kernel/num/bounded.rs b/rust/kernel/num/bounded.rs
index 850827033f67..efabdd31ec37 100644
--- a/rust/kernel/num/bounded.rs
+++ b/rust/kernel/num/bounded.rs
@@ -503,9 +503,7 @@ pub fn cast<U>(self) -> Bounded<U, N>
pub fn shr<const SHIFT: u32, const RES: u32>(self) -> Bounded<T, RES>
{ const { assert!(RES >= N - SHIFT) }
- // SAFETY: We shift the value right by `SHIFT`, reducing the
number of bits needed to
- // represent the shifted value by as much, and just asserted that
`RES == N - SHIFT`.
- unsafe { Bounded::__new(self.0 >> SHIFT) }
+ Bounded::__new(self.0 >> SHIFT)
}
/// Left-shifts `self` by `SHIFT` and returns the result as a
`Bounded<_, RES>`, where `RES >= @@ -524,9 +522,7 @@ pub fn shr<const
SHIFT: u32, const RES: u32>(self) -> Bounded<T, RES> { pub fn
shl<const SHIFT: u32, const RES: u32>(self) -> Bounded<T, RES> {
const { assert!(RES >= N + SHIFT) }
- // SAFETY: We shift the value left by `SHIFT`, augmenting the
number of bits needed to
- // represent the shifted value by as much, and just asserted that
`RES == N + SHIFT`.
- unsafe { Bounded::__new(self.0 << SHIFT) }
+ Bounded::__new(self.0 << SHIFT)
}
}
Z.
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> ---
> samples/rust/rust_driver_pci.rs | 23 ++++++++++++++++++-----
> 1 file changed, 18 insertions(+), 5 deletions(-)
>
> diff --git a/samples/rust/rust_driver_pci.rs
> b/samples/rust/rust_driver_pci.rs index 4dfb8a6a4707..df2232d6b71f 100644
> --- a/samples/rust/rust_driver_pci.rs
> +++ b/samples/rust/rust_driver_pci.rs
> @@ -70,24 +70,37 @@ fn testdev(index: &TestIndex, bar: &Bar0) ->
> Result<u32> { fn config_space(pdev: &pci::Device<Bound>) {
> let config = pdev.config_space();
>
> - // TODO: use the register!() macro for defining PCI
> configuration space registers once it
> - // has been move out of nova-core.
> + // Some PCI configuration space registers.
> + ::kernel::register! {
> + VENDOR_ID(u16) @ 0x0 {
> + 15:0 vendor_id;
> + }
> +
> + REVISION_ID(u8) @ 0x8 {
> + 7:0 revision_id;
> + }
> +
> + BAR(u32)[6] @ 0x10 {
> + 31:0 value;
> + }
> + }
> +
> dev_info!(
> pdev.as_ref(),
> "pci-testdev config space read8 rev ID: {:x}\n",
> - config.read8(0x8)
> + REVISION_ID::read(&&config).revision_id()
> );
>
> dev_info!(
> pdev.as_ref(),
> "pci-testdev config space read16 vendor ID: {:x}\n",
> - config.read16(0)
> + VENDOR_ID::read(&&config).vendor_id()
> );
>
> dev_info!(
> pdev.as_ref(),
> "pci-testdev config space read32 BAR 0: {:x}\n",
> - config.read32(0x10)
> + BAR::read(&&config, 0).value()
> );
> }
> }
>
On Wed Jan 28, 2026 at 9:35 PM JST, Zhi Wang wrote: > On Wed, 28 Jan 2026 11:37:32 +0900 > Alexandre Courbot <acourbot@nvidia.com> wrote: > >> Convert the direct IO accesses to properly defined registers. >> > > Tested-by: Zhi Wang <zhiw@nvidia.com> > > I can see the correct value of the registers read by the sample driver > from the demesg. Thanks! > > Additionally, Clippy was complaining about unnecssary unsafe blocks and > can be fixed by: (I haven't fully gone through the code, just applied this > for getting rid of the warnnings.) This is because `Bounded::__new` has become unsafe in `rust-next` ; this is not reflected in `driver-core-next` yet, but won't appear in -rc1.
On Wed Jan 28, 2026 at 1:27 PM GMT, Alexandre Courbot wrote: > On Wed Jan 28, 2026 at 9:35 PM JST, Zhi Wang wrote: >> On Wed, 28 Jan 2026 11:37:32 +0900 >> Alexandre Courbot <acourbot@nvidia.com> wrote: >> >>> Convert the direct IO accesses to properly defined registers. >>> >> >> Tested-by: Zhi Wang <zhiw@nvidia.com> >> >> I can see the correct value of the registers read by the sample driver >> from the demesg. > > Thanks! > >> >> Additionally, Clippy was complaining about unnecssary unsafe blocks and >> can be fixed by: (I haven't fully gone through the code, just applied this >> for getting rid of the warnnings.) > > This is because `Bounded::__new` has become unsafe in `rust-next` ; this > is not reflected in `driver-core-next` yet, but won't appear in -rc1. Any reason that you send the patch based on driver-core-next, instead of linux-next? You won't have the issue if this is based on linux-next. Best, Gary
On Thu Jan 29, 2026 at 12:46 AM JST, Gary Guo wrote: > On Wed Jan 28, 2026 at 1:27 PM GMT, Alexandre Courbot wrote: >> On Wed Jan 28, 2026 at 9:35 PM JST, Zhi Wang wrote: >>> On Wed, 28 Jan 2026 11:37:32 +0900 >>> Alexandre Courbot <acourbot@nvidia.com> wrote: >>> >>>> Convert the direct IO accesses to properly defined registers. >>>> >>> >>> Tested-by: Zhi Wang <zhiw@nvidia.com> >>> >>> I can see the correct value of the registers read by the sample driver >>> from the demesg. >> >> Thanks! >> >>> >>> Additionally, Clippy was complaining about unnecssary unsafe blocks and >>> can be fixed by: (I haven't fully gone through the code, just applied this >>> for getting rid of the warnnings.) >> >> This is because `Bounded::__new` has become unsafe in `rust-next` ; this >> is not reflected in `driver-core-next` yet, but won't appear in -rc1. > > Any reason that you send the patch based on driver-core-next, instead of > linux-next? You won't have the issue if this is based on linux-next. driver-core-next is where the patch is going to be merged, so I use that as the base for the patchset.
© 2016 - 2026 Red Hat, Inc.