Merge "msm: ipa3: Fix to unmap sgt pages with correct size"

This commit is contained in:
qctecmdr 2020-10-09 12:49:33 -07:00 • committed by Gerrit - the friendly Code Review server
commit 222ef78f75

View file

@ -420,14 +420,33 @@ int ipa3_smmu_map_peer_buff(u64 iova, u32 size, bool map, struct sg_table *sgt,
}
}
} else {
res = iommu_unmap(smmu_domain,
rounddown(iova, PAGE_SIZE),
roundup(size + iova - rounddown(iova, PAGE_SIZE),
PAGE_SIZE));
if (res != roundup(size + iova - rounddown(iova, PAGE_SIZE),
PAGE_SIZE)) {
IPAERR("Fail to unmap 0x%llx\n", iova);
return -EINVAL;
if (sgt != NULL) {
va = rounddown(iova, PAGE_SIZE);
len = 0;
for_each_sg(sgt->sgl, sg, sgt->nents, i) {
len = PAGE_ALIGN(sg->offset + sg->length);
res = iommu_unmap(smmu_domain, va,
roundup(len, PAGE_SIZE));
if (res !=
roundup(len, PAGE_SIZE)) {
IPAERR("Fail to unmap iova=%llx\n",
iova);
return -EINVAL;
}
va += len;
count++;
}
} else {
res = iommu_unmap(smmu_domain,
rounddown(iova, PAGE_SIZE),
roundup(size + iova -
rounddown(iova, PAGE_SIZE),
PAGE_SIZE));
if (res != roundup(size + iova -
rounddown(iova, PAGE_SIZE), PAGE_SIZE)) {
IPAERR("Fail to unmap 0x%llx\n", iova);
return -EINVAL;
}
}
}
IPADBG("Peer buff %s 0x%llx\n", map ? "map" : "unmap", iova);