> > > 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; > > > } So I tried the 5 patches you listed in 1, and the patch in 2. It still results in the same failure. Here is a cleaner link to the trace: https://0paste.com/66912 It's pretty straight forward: 0) | /* iommu_dma_alloc: sdhci-acpi AMDI0040:00: size: 3596 */ 0) | /* iommu_dma_map_sg: sdhci-acpi AMDI0040:00: nents: 1 */ 0) | /* sdhci_set_adma_addr: dma_addr: 0xfffffffffffff200 */ 0) | sdhci_adma_show_error() { I'm going to try reverting be62dbf554c5 now that we know why the ACPI matching wasn't working.