The branch main has been updated by dougm:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=70b5d8fa0f9457833027e4a1c57b4e68a9351cac

commit 70b5d8fa0f9457833027e4a1c57b4e68a9351cac
Author:     Doug Moore <do...@freebsd.org>
AuthorDate: 2022-06-21 00:34:46 +0000
Commit:     Doug Moore <do...@freebsd.org>
CommitDate: 2022-06-21 00:34:46 +0000

    iommu_gas: Drop needless bound check in lowermatch
    
    The loop iteration in iommu_gas_lowermatch checks the bound
    a->common->lowaddr twice per loop iteration. Rewrite to test only once
    per iteration.  Do not worry about passing to iommu_gas_match_one a
    range wholly beyond lowaddr. Since that function checks the upper end
    of the range against lowaddr, it'll get rejected there.
    
    Reviewed by:    alc
    MFC after:      3 weeks
    Differential Revision:  https://reviews.freebsd.org/D35522
---
 sys/dev/iommu/iommu_gas.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/sys/dev/iommu/iommu_gas.c b/sys/dev/iommu/iommu_gas.c
index f25519552d1c..70eef9a0a1f7 100644
--- a/sys/dev/iommu/iommu_gas.c
+++ b/sys/dev/iommu/iommu_gas.c
@@ -398,16 +398,11 @@ iommu_gas_lowermatch(struct iommu_gas_match_args *a, 
struct iommu_map_entry *ent
         */
        entry = first;
        while (entry != NULL) {
-               if ((first = RB_LEFT(entry, rb_entry)) != NULL) {
-                       if (first->last >= a->common->lowaddr) {
-                               /* All remaining ranges >= lowaddr */
-                               break;
-                       }
-                       if (iommu_gas_match_one(a, first->last, entry->start,
-                           a->common->lowaddr)) {
-                               iommu_gas_match_insert(a);
-                               return (0);
-                       }
+               if ((first = RB_LEFT(entry, rb_entry)) != NULL &&
+                   iommu_gas_match_one(a, first->last, entry->start,
+                   a->common->lowaddr)) {
+                       iommu_gas_match_insert(a);
+                       return (0);
                }
                if (entry->end >= a->common->lowaddr) {
                        /* All remaining ranges >= lowaddr */

Reply via email to