git: 42e4938fdbf8 - main - vm_assign_pptdev: only call vm_iommu_map() once
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 09 Apr 2025 12:20:14 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=42e4938fdbf8e2b5180e0d6aeb0075c589cf3bca
commit 42e4938fdbf8e2b5180e0d6aeb0075c589cf3bca
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2025-04-09 11:20:30 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2025-04-09 12:20:08 +0000
vm_assign_pptdev: only call vm_iommu_map() once
for the first assigned pass-through device.
PR: 285976
Sponsored by: The FreeBSD Foundation
---
sys/amd64/vmm/vmm.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/sys/amd64/vmm/vmm.c b/sys/amd64/vmm/vmm.c
index bd703f63b557..c42da02d0bf6 100644
--- a/sys/amd64/vmm/vmm.c
+++ b/sys/amd64/vmm/vmm.c
@@ -851,6 +851,7 @@ vm_assign_pptdev(struct vm *vm, int bus, int slot, int func)
{
int error;
vm_paddr_t maxaddr;
+ bool map = false;
/* Set up the IOMMU to do the 'gpa' to 'hpa' translation */
if (ppt_assigned_devices(vm) == 0) {
@@ -860,12 +861,12 @@ vm_assign_pptdev(struct vm *vm, int bus, int slot, int func)
vm->iommu = iommu_create_domain(maxaddr);
if (vm->iommu == NULL)
return (ENXIO);
+ map = true;
}
error = ppt_assign_device(vm, bus, slot, func);
- if (error != 0)
- return (error);
- error = vm_iommu_map(vm);
+ if (error == 0 && map)
+ error = vm_iommu_map(vm);
return (error);
}