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

source

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.

source

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

source

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

source

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.

source

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§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V