Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/iommu/iommu_gas.c
Show First 20 Lines • Show All 632 Lines • ▼ Show 20 Lines | KASSERT(entry->end < domain->end, ("allocated GPA %jx, max GPA %jx", | ||||
(uintmax_t)entry->end, (uintmax_t)domain->end)); | (uintmax_t)entry->end, (uintmax_t)domain->end)); | ||||
entry->flags |= eflags; | entry->flags |= eflags; | ||||
IOMMU_DOMAIN_UNLOCK(domain); | IOMMU_DOMAIN_UNLOCK(domain); | ||||
error = domain->ops->map(domain, entry->start, | error = domain->ops->map(domain, entry->start, | ||||
entry->end - entry->start, ma, eflags, | entry->end - entry->start, ma, eflags, | ||||
((flags & IOMMU_MF_CANWAIT) != 0 ? IOMMU_PGF_WAITOK : 0)); | ((flags & IOMMU_MF_CANWAIT) != 0 ? IOMMU_PGF_WAITOK : 0)); | ||||
if (error == ENOMEM) { | if (error == ENOMEM) { | ||||
iommu_domain_unload_entry(entry, true); | iommu_domain_unload_entry(entry, true, | ||||
(flags & IOMMU_MF_CANWAIT) != 0); | |||||
return (error); | return (error); | ||||
} | } | ||||
KASSERT(error == 0, | KASSERT(error == 0, | ||||
("unexpected error %d from domain_map_buf", error)); | ("unexpected error %d from domain_map_buf", error)); | ||||
*res = entry; | *res = entry; | ||||
return (0); | return (0); | ||||
} | } | ||||
Show All 21 Lines | iommu_gas_map_region(struct iommu_domain *domain, struct iommu_map_entry *entry, | ||||
IOMMU_DOMAIN_UNLOCK(domain); | IOMMU_DOMAIN_UNLOCK(domain); | ||||
if (entry->end == entry->start) | if (entry->end == entry->start) | ||||
return (0); | return (0); | ||||
error = domain->ops->map(domain, entry->start, | error = domain->ops->map(domain, entry->start, | ||||
entry->end - entry->start, ma + OFF_TO_IDX(start - entry->start), | entry->end - entry->start, ma + OFF_TO_IDX(start - entry->start), | ||||
eflags, ((flags & IOMMU_MF_CANWAIT) != 0 ? IOMMU_PGF_WAITOK : 0)); | eflags, ((flags & IOMMU_MF_CANWAIT) != 0 ? IOMMU_PGF_WAITOK : 0)); | ||||
if (error == ENOMEM) { | if (error == ENOMEM) { | ||||
iommu_domain_unload_entry(entry, false); | iommu_domain_unload_entry(entry, false, | ||||
(flags & IOMMU_MF_CANWAIT) != 0); | |||||
return (error); | return (error); | ||||
} | } | ||||
KASSERT(error == 0, | KASSERT(error == 0, | ||||
("unexpected error %d from domain_map_buf", error)); | ("unexpected error %d from domain_map_buf", error)); | ||||
return (0); | return (0); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 181 Lines • Show Last 20 Lines |