Struct 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

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( &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.

Source

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.

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

Source§

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

Source§

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