mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-14 15:44:58 +00:00
runtime-rs: Get available port node in the PCIe topology
This commit implements the `find_available_node` function, which searches the PCIe topology for the first available `TopologyPortDevice` or `SwitchDownPort`. If no available node is found in either the `pcie_port_devices` or the connected switches' downstream ports, the function returns `None`. Fixes # 10361 Signed-off-by: alex.lyn <alex.lyn@antgroup.com>
This commit is contained in:
parent
533d07a2c3
commit
01b822de16
@ -318,6 +318,13 @@ pub enum Strategy {
|
|||||||
MultipleRootPorts,
|
MultipleRootPorts,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Represents an available node in the PCIe topology.
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub enum AvailableNode {
|
||||||
|
TopologyPortDevice(TopologyPortDevice),
|
||||||
|
SwitchDownPort(SwitchDownPort),
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default)]
|
#[derive(Clone, Debug, Default)]
|
||||||
pub struct PCIeTopology {
|
pub struct PCIeTopology {
|
||||||
pub hypervisor_name: String,
|
pub hypervisor_name: String,
|
||||||
@ -648,6 +655,31 @@ impl PCIeTopology {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Finds an availabled node in the PCIe topology.
|
||||||
|
/// Returns the first available node found, either a TopologyPortDevice or a SwitchDownPort.
|
||||||
|
pub fn find_available_node(&mut self) -> Option<AvailableNode> {
|
||||||
|
// search in pcie_port_devices
|
||||||
|
for port_device in self.pcie_port_devices.values_mut() {
|
||||||
|
if !port_device.allocated {
|
||||||
|
port_device.allocated = true;
|
||||||
|
return Some(AvailableNode::TopologyPortDevice(port_device.clone()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// search in connected switch's downstream ports
|
||||||
|
if let Some(switch) = &mut port_device.connected_switch {
|
||||||
|
for switch_port in switch.switch_ports.values_mut() {
|
||||||
|
if !switch_port.allocated {
|
||||||
|
switch_port.allocated = true;
|
||||||
|
return Some(AvailableNode::SwitchDownPort(switch_port.clone()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// No available node found
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// do_add_pcie_endpoint do add a device into PCIe topology with pcie endpoint
|
// do_add_pcie_endpoint do add a device into PCIe topology with pcie endpoint
|
||||||
|
Loading…
Reference in New Issue
Block a user