From: Sebastian Ott Date: Fri, 3 Jun 2016 17:05:38 +0000 (+0200) Subject: s390/pci: ensure to not cross a dma segment boundary X-Git-Tag: v4.8-rc1~167^2~48 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8ee2db3cf1dc02ff9f2c65ac8bd7f478ba79abbe;p=platform%2Fkernel%2Flinux-exynos.git s390/pci: ensure to not cross a dma segment boundary When we use the iommu_area_alloc helper to get dma addresses we specify the boundary_size parameter but not the offset (called shift in this context). As long as the offset (start_dma) is a multiple of the boundary we're ok (on current machines start_dma always seems to be 4GB). Don't leave this to chance and specify the offset for iommu_area_alloc. Signed-off-by: Sebastian Ott Reviewed-by: Gerald Schaefer Signed-off-by: Martin Schwidefsky --- diff --git a/arch/s390/pci/pci_dma.c b/arch/s390/pci/pci_dma.c index 494eb83..070f1ae 100644 --- a/arch/s390/pci/pci_dma.c +++ b/arch/s390/pci/pci_dma.c @@ -226,7 +226,8 @@ static unsigned long __dma_alloc_iommu(struct device *dev, boundary_size = ALIGN(dma_get_seg_boundary(dev) + 1, PAGE_SIZE) >> PAGE_SHIFT; return iommu_area_alloc(zdev->iommu_bitmap, zdev->iommu_pages, - start, size, 0, boundary_size, 0); + start, size, zdev->start_dma >> PAGE_SHIFT, + boundary_size, 0); } static unsigned long dma_alloc_iommu(struct device *dev, int size)