On Wed, May 06, 2020 at 03:00:21PM -0600, Raul Rangel wrote: > Any suggestions would be appreciated. Two possibilities: 1) Please try the 5 patches from this branch: https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git/log/?h=iommu/fixes The fix some race-condition issues, I think it is unlikely you hit them, but it is worth a test. 2) Dma-iommu code does sg-merging, which the previous DMA-API implementation did not. Can you try attached diff from Robin Murphy to disable sg-merging? It that helps it is an issue in the eMMC driver. Regards, Joerg diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index a2e96a5fd9a7..a6b71bad518e 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -779,7 +779,7 @@ static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents, * - but doesn't fall at a segment boundary * - and wouldn't make the resulting output segment too long */ - if (cur_len && !s_iova_off && (dma_addr & seg_mask) && + if (0 && cur_len && !s_iova_off && (dma_addr & seg_mask) && (max_len - cur_len >= s_length)) { /* ...then concatenate it with the previous one */ cur_len += s_length; @@ -799,6 +799,7 @@ static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents, if (s_length + s_iova_off < s_iova_len) cur_len = 0; } + WARN_ON(count < nents); return count; }