mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-02 19:45:46 +00:00
vm-virtio: pci: Update the BARs used by the VirtioPciDevice
In order to support freeing the memory that is allocated we need to make sure that we update the internal representation so that free_bars() can correctly free the memory if the device has its BARs moved. Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
parent
56207a0328
commit
8ff3633782
@ -787,6 +787,18 @@ impl PciDevice for VirtioPciDevice {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn move_bar(&mut self, old_base: u64, new_base: u64) -> result::Result<(), std::io::Error> {
|
||||||
|
// We only update our idea of the bar in order to support free_bars() above.
|
||||||
|
// The majority of the reallocation is done inside DeviceManager.
|
||||||
|
for (addr, _, _) in self.bar_regions.iter_mut() {
|
||||||
|
if (*addr).0 == old_base {
|
||||||
|
*addr = GuestAddress(new_base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn read_bar(&mut self, _base: u64, offset: u64, data: &mut [u8]) {
|
fn read_bar(&mut self, _base: u64, offset: u64, data: &mut [u8]) {
|
||||||
match offset {
|
match offset {
|
||||||
o if o < COMMON_CONFIG_BAR_OFFSET + COMMON_CONFIG_SIZE => self.common_config.read(
|
o if o < COMMON_CONFIG_BAR_OFFSET + COMMON_CONFIG_SIZE => self.common_config.read(
|
||||||
|
Loading…
Reference in New Issue
Block a user