aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru Elisei <alexandru.elisei@arm.com>2020-05-14 16:38:21 +0100
committerWill Deacon <will@kernel.org>2020-05-19 17:38:01 +0100
commita05e576f7fd883be1a405e7acac136eef1d601e0 (patch)
tree370b60839ddd985ac99a1e8c9482cc798b155fa4
parente539f3e425fbaa90d9959df606e92850513011dc (diff)
downloadkvmtool-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.c9
-rw-r--r--vfio/pci.c4
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;
}
diff --git a/vfio/pci.c b/vfio/pci.c
index 89d29b89..0b548e4b 100644
--- a/vfio/pci.c
+++ b/vfio/pci.c
@@ -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);