Commit e56429b0 authored by Tasos Sahanidis's avatar Tasos Sahanidis Committed by Mauro Carvalho Chehab
Browse files

media: saa7146: use sg_dma_len when building pgtable



The new AMD IOMMU DMA implementation concatenates sglist entries under
certain conditions, and because saa7146 accessed the length member
directly, it did not support this scenario.

This fixes IO_PAGE_FAULTs by using the sg_dma_len macro.

Fixes: be62dbf5 ("iommu/amd: Convert AMD iommu driver to the dma-iommu api")
Signed-off-by: default avatarTasos Sahanidis <tasos@tasossah.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 4e1cb753
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -253,7 +253,7 @@ int saa7146_pgtable_build_single(struct pci_dev *pci, struct saa7146_pgtable *pt
			 i, sg_dma_address(list), sg_dma_len(list),
			 list->offset);
*/
		for (p = 0; p * 4096 < list->length; p++, ptr++) {
		for (p = 0; p * 4096 < sg_dma_len(list); p++, ptr++) {
			*ptr = cpu_to_le32(sg_dma_address(list) + p * 4096);
			nr_pages++;
		}
+1 −2
Original line number Diff line number Diff line
@@ -247,10 +247,9 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu

		/* walk all pages, copy all page addresses to ptr1 */
		for (i = 0; i < length; i++, list++) {
			for (p = 0; p * 4096 < list->length; p++, ptr1++) {
			for (p = 0; p * 4096 < sg_dma_len(list); p++, ptr1++)
				*ptr1 = cpu_to_le32(sg_dma_address(list) - list->offset);
		}
		}
/*
		ptr1 = pt1->cpu;
		for(j=0;j<40;j++) {