mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-28 08:17:37 +00:00
agent/device: Rename and clarify semantics of get_pci_device_address()
get_pci_device_address() has pretty confusing semantics. Both its input and output are in other parts of the code described as a "PCI address", but neither is *actually* a PCI address (in the standard DDDD:BB:DD.F format). What it's really about is resolving a "PCI path" - that is way to locate a PCI device by using it's slot number and the slot number of the bridge leading to it - into a sysfs path. Rename the function, and change a bunch of variable names to make those semantics clearer. Forward port of https://github.com/kata-containers/agent/pull/855/commits/0eb612f06484 Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
7e92831c7a
commit
3715c5775f
@ -45,17 +45,19 @@ pub fn online_device(path: &str) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
// get_pci_device_address fetches the complete PCI address in sysfs, based on the PCI
|
// pcipath_to_sysfs fetches the sysfs path for a PCI device, relative
|
||||||
// identifier provided. This should be in the format: "bridgeAddr/deviceAddr".
|
// to the syfs path for the PCI host bridge, based on the PCI path
|
||||||
// Here, bridgeAddr is the address at which the bridge is attached on the root bus,
|
// provided. The path should be in the format "bridgeAddr/deviceAddr",
|
||||||
// while deviceAddr is the address at which the device is attached on the bridge.
|
// where bridgeAddr is the address at which the brige is attached on
|
||||||
fn get_pci_device_address(pci_id: &str) -> Result<String> {
|
// the root bus, while deviceAddr is the address at which the device
|
||||||
let tokens: Vec<&str> = pci_id.split('/').collect();
|
// is attached on the bridge.
|
||||||
|
fn pcipath_to_sysfs(pcipath: &str) -> Result<String> {
|
||||||
|
let tokens: Vec<&str> = pcipath.split('/').collect();
|
||||||
|
|
||||||
if tokens.len() != 2 {
|
if tokens.len() != 2 {
|
||||||
return Err(anyhow!(
|
return Err(anyhow!(
|
||||||
"PCI Identifier for device should be of format [bridgeAddr/deviceAddr], got {}",
|
"PCI path for device should be of format [bridgeAddr/deviceAddr], got {:?}",
|
||||||
pci_id
|
pcipath
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,14 +91,14 @@ fn get_pci_device_address(pci_id: &str) -> Result<String> {
|
|||||||
// We do not pass devices as multifunction, hence the trailing 0 in the address.
|
// We do not pass devices as multifunction, hence the trailing 0 in the address.
|
||||||
let pci_device_addr = format!("{}:{}.0", bus, device_id);
|
let pci_device_addr = format!("{}:{}.0", bus, device_id);
|
||||||
|
|
||||||
let bridge_device_pci_addr = format!("{}/{}", pci_bridge_addr, pci_device_addr);
|
let sysfs_rel_path = format!("{}/{}", pci_bridge_addr, pci_device_addr);
|
||||||
|
|
||||||
info!(
|
info!(
|
||||||
sl!(),
|
sl!(),
|
||||||
"Fetched PCI address for device PCIAddr:{}\n", bridge_device_pci_addr
|
"Fetched sysfs relative path for PCI device {}\n", sysfs_rel_path
|
||||||
);
|
);
|
||||||
|
|
||||||
Ok(bridge_device_pci_addr)
|
Ok(sysfs_rel_path)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn get_device_name(sandbox: &Arc<Mutex<Sandbox>>, dev_addr: &str) -> Result<String> {
|
async fn get_device_name(sandbox: &Arc<Mutex<Sandbox>>, dev_addr: &str) -> Result<String> {
|
||||||
@ -155,11 +157,11 @@ pub async fn get_scsi_device_name(
|
|||||||
get_device_name(sandbox, &dev_sub_path).await
|
get_device_name(sandbox, &dev_sub_path).await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_pci_device_name(sandbox: &Arc<Mutex<Sandbox>>, pci_id: &str) -> Result<String> {
|
pub async fn get_pci_device_name(sandbox: &Arc<Mutex<Sandbox>>, pcipath: &str) -> Result<String> {
|
||||||
let pci_addr = get_pci_device_address(pci_id)?;
|
let sysfs_rel_path = pcipath_to_sysfs(pcipath)?;
|
||||||
|
|
||||||
rescan_pci_bus()?;
|
rescan_pci_bus()?;
|
||||||
get_device_name(sandbox, &pci_addr).await
|
get_device_name(sandbox, &sysfs_rel_path).await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_pmem_device_name(
|
pub async fn get_pmem_device_name(
|
||||||
|
Loading…
Reference in New Issue
Block a user