aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorDoug Moore <dougm@FreeBSD.org>2022-09-16 20:32:11 +0000
committerDoug Moore <dougm@FreeBSD.org>2022-09-16 20:32:11 +0000
commit87cd087a4ae7b272986ce3bcf27ffe4930f15e55 (patch)
tree24c003e1ffdc9542871f0a09956d2fe0dcac9728 /sys/dev
parentdaa85548d5cfc65e4beb7a211a155ae9b9fc41d9 (diff)
downloadsrc-87cd087a4ae7b272986ce3bcf27ffe4930f15e55.tar.gz
src-87cd087a4ae7b272986ce3bcf27ffe4930f15e55.zip
iommu_gas: don't remove and insert boundary entry
Avoid removing an item in iommu_gas_free_region only to reinsert it, by avoiding removing an entry that is either first_place or last_place. Reviewed by: kib MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D36597
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/iommu/iommu_gas.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/sys/dev/iommu/iommu_gas.c b/sys/dev/iommu/iommu_gas.c
index ca5a614060fe..68e22f16c69f 100644
--- a/sys/dev/iommu/iommu_gas.c
+++ b/sys/dev/iommu/iommu_gas.c
@@ -580,7 +580,6 @@ void
iommu_gas_free_region(struct iommu_map_entry *entry)
{
struct iommu_domain *domain;
- struct iommu_map_entry *next, *prev;
domain = entry->domain;
KASSERT((entry->flags & (IOMMU_MAP_ENTRY_PLACE | IOMMU_MAP_ENTRY_RMRR |
@@ -588,15 +587,10 @@ iommu_gas_free_region(struct iommu_map_entry *entry)
("non-RMRR entry %p %p", domain, entry));
IOMMU_DOMAIN_LOCK(domain);
- prev = RB_PREV(iommu_gas_entries_tree, &domain->rb_root, entry);
- next = RB_NEXT(iommu_gas_entries_tree, &domain->rb_root, entry);
- iommu_gas_rb_remove(domain, entry);
+ if (entry != domain->first_place &&
+ entry != domain->last_place)
+ iommu_gas_rb_remove(domain, entry);
entry->flags &= ~IOMMU_MAP_ENTRY_RMRR;
-
- if (prev == NULL)
- iommu_gas_rb_insert(domain, domain->first_place);
- if (next == NULL)
- iommu_gas_rb_insert(domain, domain->last_place);
IOMMU_DOMAIN_UNLOCK(domain);
}
@@ -608,7 +602,7 @@ iommu_gas_remove_clip_left(struct iommu_domain *domain, iommu_gaddr_t start,
IOMMU_DOMAIN_ASSERT_LOCKED(domain);
MPASS(start <= end);
- MPASS(end <= domain->last_place->end);
+ MPASS(end <= domain->end);
/*
* Find an entry which contains the supplied guest's address