Author: dougm
Date: Sat Feb  1 21:47:34 2020
New Revision: 357389
URL: https://svnweb.freebsd.org/changeset/base/357389

Log:
  In dmar_gas_lowermatch, skip searching a subtree if all its addresses are 
greater than lowaddr.
  In dmar_gas_uppermatch, skip searching a subtree if all its 
gaps-between-alloctions are too small.
  
  Reviewed by:  kib
  Tested by:    pho
  Differential Revision:        https://reviews.freebsd.org/D23391

Modified:
  head/sys/x86/iommu/intel_gas.c

Modified: head/sys/x86/iommu/intel_gas.c
==============================================================================
--- head/sys/x86/iommu/intel_gas.c      Sat Feb  1 21:43:45 2020        
(r357388)
+++ head/sys/x86/iommu/intel_gas.c      Sat Feb  1 21:47:34 2020        
(r357389)
@@ -370,6 +370,8 @@ dmar_gas_lowermatch(struct dmar_gas_match_args *a, str
        }
        if (entry->free_down < a->size + a->offset + DMAR_PAGE_SIZE)
                return (ENOMEM);
+       if (entry->first >= a->common->lowaddr)
+               return (ENOMEM);
        child = RB_LEFT(entry, rb_entry);
        if (child != NULL && 0 == dmar_gas_lowermatch(a, child))
                return (0);
@@ -390,6 +392,8 @@ dmar_gas_uppermatch(struct dmar_gas_match_args *a, str
 {
        struct dmar_map_entry *child;
 
+       if (entry->free_down < a->size + a->offset + DMAR_PAGE_SIZE)
+               return (ENOMEM);
        if (entry->last < a->common->highaddr)
                return (ENOMEM);
        child = RB_LEFT(entry, rb_entry);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to