vmm: Conditionally update ioeventfds for virtio PCI device

The specific part of PCI BAR reprogramming that happens for a virtio PCI
device is the update of the ioeventfds addresses KVM should listen to.
This should not be triggered for every BAR reprogramming associated with
the virtio device since a virtio PCI device might have multiple BARs.

The update of the ioeventfds addresses should only happen when the BAR
related to those addresses is being moved.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
Sebastien Boeuf
2019-10-30 09:13:29 -07:00
committed by Samuel Ortiz
parent de21c9ba4f
commit c7cabc88b4
4 changed files with 29 additions and 26 deletions
+2 -2
View File
@@ -563,11 +563,11 @@ impl PciConfiguration {
pub fn get_bar_addr(&self, bar_num: usize) -> u64 {
let bar_idx = BAR0_REG + bar_num;
let mut addr = u64::from(self.registers[bar_idx] & self.writable_bits[bar_idx]);
let mut addr = u64::from(self.bar_addr[bar_num] & self.writable_bits[bar_idx]);
if let Some(bar_type) = self.bar_type[bar_num] {
if bar_type == PciBarRegionType::Memory64BitRegion {
addr |= u64::from(self.registers[bar_idx + 1]) << 32;
addr |= u64::from(self.bar_addr[bar_num + 1]) << 32;
}
}