pub struct PciHotPlugManager {
port_stubs: BTreeMap<PciAddress, PortManagerStub>,
bus_address_map: BTreeMap<u8, PciAddress>,
jail_warden: Box<dyn JailWarden>,
worker_client: Option<WorkerClient>,
}Expand description
PciHotPlugManager manages hotplug ports, and handles PCI device hot plug and hot removal.
Fields§
§port_stubs: BTreeMap<PciAddress, PortManagerStub>map of ports managed
bus_address_map: BTreeMap<u8, PciAddress>map of downstream bus to upstream PCI address
jail_warden: Box<dyn JailWarden>JailWarden for jailing hotplug devices
worker_client: Option<WorkerClient>Client on Manager side of PciHotPlugWorker
Implementations§
Source§impl PciHotPlugManager
impl PciHotPlugManager
Sourcepub fn new(
guest_memory: GuestMemory,
config: &Config,
swap_device_helper: Option<SwapDeviceHelper>,
) -> Result<Self, Error>
pub fn new( guest_memory: GuestMemory, config: &Config, swap_device_helper: Option<SwapDeviceHelper>, ) -> Result<Self, Error>
Constructs PciHotPlugManager.
Constructor uses forking, therefore has to be called early, before crosvm enters a multi-threaded context.
Sourcepub fn set_rootbus_controller(
&mut self,
rootbus_controller: Sender<PciRootCommand>,
) -> Result<(), Error>
pub fn set_rootbus_controller( &mut self, rootbus_controller: Sender<PciRootCommand>, ) -> Result<(), Error>
Starts PciHotPlugManager. Required before any other commands.
PciHotPlugManager::new must be called in a single-threaded context as it forks. However, rootbus_controller is only available after VM boots when crosvm is multi-threaded.
TODO(293801301): Remove unused after aarch64 support
Sourcepub fn add_port(
&mut self,
port: Arc<Mutex<dyn HotPlugBus>>,
) -> Result<(), Error>
pub fn add_port( &mut self, port: Arc<Mutex<dyn HotPlugBus>>, ) -> Result<(), Error>
Adds a hotplug capable port to manage.
PciHotPlugManager assumes exclusive control for adding and removing devices to this port. TODO(293801301): Remove unused_variables after aarch64 support
Sourcepub fn hotplug_device(
&mut self,
resource_carriers: Vec<ResourceCarrier>,
linux: &mut RunnableLinuxVm,
resources: &mut SystemAllocator,
) -> Result<u8, Error>
pub fn hotplug_device( &mut self, resource_carriers: Vec<ResourceCarrier>, linux: &mut RunnableLinuxVm, resources: &mut SystemAllocator, ) -> Result<u8, Error>
hotplugs up to 8 PCI devices as “functions of a device” (in PCI Bus Device Function sense).
returns the bus number of the bus on success.
Sourcepub fn remove_hotplug_device(
&mut self,
bus: u8,
linux: &mut RunnableLinuxVm,
resources: &mut SystemAllocator,
) -> Result<(), Error>
pub fn remove_hotplug_device( &mut self, bus: u8, linux: &mut RunnableLinuxVm, resources: &mut SystemAllocator, ) -> Result<(), Error>
Removes all hotplugged devices on the hotplug bus.