Struct crosvm::crosvm::sys::linux::pci_hotplug_manager::PciHotPlugManager
source · 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<V: VmArch, Vcpu: VcpuArch>(
&mut self,
resource_carriers: Vec<ResourceCarrier>,
linux: &mut RunnableLinuxVm<V, Vcpu>,
resources: &mut SystemAllocator
) -> Result<u8, Error>
pub fn hotplug_device<V: VmArch, Vcpu: VcpuArch>( &mut self, resource_carriers: Vec<ResourceCarrier>, linux: &mut RunnableLinuxVm<V, Vcpu>, 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<V: VmArch, Vcpu: VcpuArch>(
&mut self,
bus: u8,
linux: &mut RunnableLinuxVm<V, Vcpu>,
resources: &mut SystemAllocator
) -> Result<(), Error>
pub fn remove_hotplug_device<V: VmArch, Vcpu: VcpuArch>( &mut self, bus: u8, linux: &mut RunnableLinuxVm<V, Vcpu>, resources: &mut SystemAllocator ) -> Result<(), Error>
Removes all hotplugged devices on the hotplug bus.
Auto Trait Implementations§
impl !RefUnwindSafe for PciHotPlugManager
impl !Send for PciHotPlugManager
impl !Sync for PciHotPlugManager
impl Unpin for PciHotPlugManager
impl !UnwindSafe for PciHotPlugManager
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.