Index: head/sys/x86/iommu/intel_gas.c =================================================================== --- head/sys/x86/iommu/intel_gas.c +++ head/sys/x86/iommu/intel_gas.c @@ -370,6 +370,8 @@ } 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 @@ { 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);