diff options
author | Alexandru Elisei <alexandru.elisei@arm.com> | 2020-05-14 16:38:21 +0100 |
---|---|---|
committer | Will Deacon <will@kernel.org> | 2020-05-19 17:38:01 +0100 |
commit | a05e576f7fd883be1a405e7acac136eef1d601e0 (patch) | |
tree | 370b60839ddd985ac99a1e8c9482cc798b155fa4 | |
parent | e539f3e425fbaa90d9959df606e92850513011dc (diff) | |
download | kvmtool-a05e576f7fd883be1a405e7acac136eef1d601e0.tar.gz |
vfio: Reserve ioports when configuring the BAR
Let's be consistent and reserve ioports when we are configuring the BAR,
not when we map it, just like we do with mmio regions.
Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Link: https://lore.kernel.org/r/1589470709-4104-5-git-send-email-alexandru.elisei@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
-rw-r--r-- | vfio/core.c | 9 | ||||
-rw-r--r-- | vfio/pci.c | 4 |
2 files changed, 6 insertions, 7 deletions
diff --git a/vfio/core.c b/vfio/core.c index b80ebf3b..bad3c7c8 100644 --- a/vfio/core.c +++ b/vfio/core.c @@ -202,14 +202,11 @@ static int vfio_setup_trap_region(struct kvm *kvm, struct vfio_device *vdev, struct vfio_region *region) { if (region->is_ioport) { - int port = pci_get_io_port_block(region->info.size); - - port = ioport__register(kvm, port, &vfio_ioport_ops, - region->info.size, region); + int port = ioport__register(kvm, region->port_base, + &vfio_ioport_ops, region->info.size, + region); if (port < 0) return port; - - region->port_base = port; return 0; } @@ -894,7 +894,9 @@ static int vfio_pci_configure_bar(struct kvm *kvm, struct vfio_device *vdev, } } - if (!region->is_ioport) { + if (region->is_ioport) { + region->port_base = pci_get_io_port_block(region->info.size); + } else { /* Grab some MMIO space in the guest */ map_size = ALIGN(region->info.size, PAGE_SIZE); region->guest_phys_addr = pci_get_mmio_block(map_size); |