Skip to content

Commit 0dfc516

Browse files
authored
nvme_test: added handler and resolver for the NvmeFaultController (#1890)
[bug fix] The resolver in the `nvme_test` crate should resolve the `NvmeFaultController` type. This was a bug during the initial push to the nvme_test crate. For now the behavior of the NvmeFaultControllerHandler is scoped to a no-fault behavior. Support for defining faults in the vmm test will be coming in a follow up PR
1 parent 390e38f commit 0dfc516

File tree

5 files changed

+30
-8
lines changed

5 files changed

+30
-8
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5133,6 +5133,7 @@ dependencies = [
51335133
"net_tap",
51345134
"netvsp",
51355135
"nvme",
5136+
"nvme_test",
51365137
"rusqlite",
51375138
"scsidisk",
51385139
"serial_16550",

openvmm/openvmm_resources/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ vmcore.workspace = true
5757
# PCI devices
5858
gdma.workspace = true
5959
nvme.workspace = true
60+
nvme_test.workspace = true
6061

6162
# SCSI
6263
scsidisk.workspace = true

openvmm/openvmm_resources/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ vm_resource::register_static_resolvers! {
6161
// PCI devices
6262
gdma::resolver::GdmaDeviceResolver,
6363
nvme::resolver::NvmeControllerResolver,
64+
nvme_test::resolver::NvmeFaultControllerResolver,
6465
virtio::resolver::VirtioPciResolver,
6566

6667
// SCSI

vm/devices/storage/nvme_resources/src/lib.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,23 @@ impl ResourceId<PciDeviceHandleKind> for NvmeControllerHandle {
2929
const ID: &'static str = "nvme";
3030
}
3131

32+
/// A handle to a NVMe fault controller.
33+
#[derive(MeshPayload)]
34+
pub struct NvmeFaultControllerHandle {
35+
/// The subsystem ID to use when responding to controller identify queries.
36+
pub subsystem_id: Guid,
37+
/// The number of MSI-X interrupts to support.
38+
pub msix_count: u16,
39+
/// The number of IO queues to support.
40+
pub max_io_queues: u16,
41+
/// The initial set of namespaces.
42+
pub namespaces: Vec<NamespaceDefinition>,
43+
}
44+
45+
impl ResourceId<PciDeviceHandleKind> for NvmeFaultControllerHandle {
46+
const ID: &'static str = "nvme_fault";
47+
}
48+
3249
/// A controller namespace definition.
3350
#[derive(MeshPayload)]
3451
pub struct NamespaceDefinition {

vm/devices/storage/nvme_test/src/resolver.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::NvmeFaultControllerCaps;
1010
use async_trait::async_trait;
1111
use disk_backend::resolve::ResolveDiskParameters;
1212
use nvme_resources::NamespaceDefinition;
13-
use nvme_resources::NvmeControllerHandle;
13+
use nvme_resources::NvmeFaultControllerHandle;
1414
use pci_resources::ResolvePciDeviceHandleParams;
1515
use pci_resources::ResolvedPciDevice;
1616
use thiserror::Error;
@@ -20,15 +20,15 @@ use vm_resource::ResourceResolver;
2020
use vm_resource::declare_static_async_resolver;
2121
use vm_resource::kind::PciDeviceHandleKind;
2222

23-
/// Resource resolver for [`NvmeControllerHandle`].
24-
pub struct NvmeControllerResolver;
23+
/// Resource resolver for [`NvmeFaultControllerHandle`].
24+
pub struct NvmeFaultControllerResolver;
2525

2626
declare_static_async_resolver! {
27-
NvmeControllerResolver,
28-
(PciDeviceHandleKind, NvmeControllerHandle),
27+
NvmeFaultControllerResolver,
28+
(PciDeviceHandleKind, NvmeFaultControllerHandle),
2929
}
3030

31-
/// Error returned by [`NvmeControllerResolver`].
31+
/// Error returned by [`NvmeFaultControllerResolver`].
3232
#[derive(Debug, Error)]
3333
#[expect(missing_docs)]
3434
pub enum Error {
@@ -43,14 +43,16 @@ pub enum Error {
4343
}
4444

4545
#[async_trait]
46-
impl AsyncResolveResource<PciDeviceHandleKind, NvmeControllerHandle> for NvmeControllerResolver {
46+
impl AsyncResolveResource<PciDeviceHandleKind, NvmeFaultControllerHandle>
47+
for NvmeFaultControllerResolver
48+
{
4749
type Output = ResolvedPciDevice;
4850
type Error = Error;
4951

5052
async fn resolve(
5153
&self,
5254
resolver: &ResourceResolver,
53-
resource: NvmeControllerHandle,
55+
resource: NvmeFaultControllerHandle,
5456
input: ResolvePciDeviceHandleParams<'_>,
5557
) -> Result<Self::Output, Self::Error> {
5658
let controller = NvmeFaultController::new(

0 commit comments

Comments
 (0)