vmm: Add ACPI Generic Initiator support

Support ACPI Generic Initiator Affinity to associate
PCI devices with NUMA proximity domains

Add GenericInitiatorAffinity struct

Add from_pci_bdf() to encode PCI Segment:Bus:Device.Function

Add from_acpi_device() for ACPI device handles (future use)

Generate SRAT Type 5 entries for nodes with device_id

Improve create_slit_table() to check distance symmetry when
forward distance is missing

Track device ID to BDF mappings in DeviceManager

Includes comprehensive unit tests

Signed-off-by: Saravanan D <saravanand@crusoe.ai>
This commit is contained in:
Saravanan D
2026-01-14 08:08:33 +00:00
committed by Rob Bradford
parent fa43548975
commit dc0c306dd9
3 changed files with 301 additions and 3 deletions

View File

@@ -58,7 +58,7 @@ use linux_loader::loader::bzimage::BzImage;
use linux_loader::loader::elf::PvhBootCapability::PvhEntryPresent;
#[cfg(any(target_arch = "aarch64", target_arch = "riscv64"))]
use linux_loader::loader::pe::Error::InvalidImageMagicNumber;
use log::{error, info};
use log::{error, info, warn};
use seccompiler::SeccompAction;
use serde::{Deserialize, Serialize};
use thiserror::Error;
@@ -1032,6 +1032,12 @@ impl Vm {
let dest = distance.destination;
let dist = distance.distance;
if dest == config.guest_numa_id && dist != 10 {
warn!(
"Ignoring self-distance {dest}@{dist} (must be 10 per ACPI spec)"
);
}
if !configs.iter().any(|cfg| cfg.guest_numa_id == dest) {
error!("Unknown destination NUMA node {dest}");
return Err(Error::InvalidNumaConfig);