diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-22 03:57:28 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-22 03:57:28 +0300 |
commit | f614c8178b0696d070b23f36a2a27b5128f6c372 (patch) | |
tree | f953fbab722965378a9310c43b4b1c90bfd21eb3 /drivers | |
parent | b8ce8d7222b52200e61ea29523993e20751baaaa (diff) | |
parent | c19edb6946d250db6d4a3dbd6146f7b23bf3468b (diff) | |
download | linux-f614c8178b0696d070b23f36a2a27b5128f6c372.tar.xz |
Merge branch 'parisc-4.1-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux
Pull parisc fixes from Helge Deller:
"The patch by Guenter Roeck fixes the build on parisc which got broken
because of commit f24ffde43237 ("parisc: expose number of page table
levels on Kconfig level") and the patch from Matthew Wilcox converts
our code to use the generic scatterlist.h header file"
* 'parisc-4.1-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
parisc: Replace PT_NLEVELS with CONFIG_PGTABLE_LEVELS
parisc: Eliminate sg_virt_addr() and private scatterlist.h
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/parisc/ccio-dma.c | 6 | ||||
-rw-r--r-- | drivers/parisc/iommu-helpers.h | 26 | ||||
-rw-r--r-- | drivers/parisc/sba_iommu.c | 7 |
3 files changed, 20 insertions, 19 deletions
diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c index 6bc16809c504..02ff84fcfa61 100644 --- a/drivers/parisc/ccio-dma.c +++ b/drivers/parisc/ccio-dma.c @@ -916,7 +916,7 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents, /* Fast path single entry scatterlists. */ if (nents == 1) { sg_dma_address(sglist) = ccio_map_single(dev, - (void *)sg_virt_addr(sglist), sglist->length, + sg_virt(sglist), sglist->length, direction); sg_dma_len(sglist) = sglist->length; return 1; @@ -983,8 +983,8 @@ ccio_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, BUG_ON(!dev); ioc = GET_IOC(dev); - DBG_RUN_SG("%s() START %d entries, %08lx,%x\n", - __func__, nents, sg_virt_addr(sglist), sglist->length); + DBG_RUN_SG("%s() START %d entries, %p,%x\n", + __func__, nents, sg_virt(sglist), sglist->length); #ifdef CCIO_COLLECT_STATS ioc->usg_calls++; diff --git a/drivers/parisc/iommu-helpers.h b/drivers/parisc/iommu-helpers.h index 8c33491b21fe..761e77bfce5d 100644 --- a/drivers/parisc/iommu-helpers.h +++ b/drivers/parisc/iommu-helpers.h @@ -30,9 +30,9 @@ iommu_fill_pdir(struct ioc *ioc, struct scatterlist *startsg, int nents, unsigned long vaddr; long size; - DBG_RUN_SG(" %d : %08lx/%05x %08lx/%05x\n", nents, + DBG_RUN_SG(" %d : %08lx/%05x %p/%05x\n", nents, (unsigned long)sg_dma_address(startsg), cnt, - sg_virt_addr(startsg), startsg->length + sg_virt(startsg), startsg->length ); @@ -66,7 +66,7 @@ iommu_fill_pdir(struct ioc *ioc, struct scatterlist *startsg, int nents, BUG_ON(pdirp == NULL); - vaddr = sg_virt_addr(startsg); + vaddr = (unsigned long)sg_virt(startsg); sg_dma_len(dma_sg) += startsg->length; size = startsg->length + dma_offset; dma_offset = 0; @@ -113,7 +113,7 @@ iommu_coalesce_chunks(struct ioc *ioc, struct device *dev, */ contig_sg = startsg; dma_len = startsg->length; - dma_offset = sg_virt_addr(startsg) & ~IOVP_MASK; + dma_offset = startsg->offset; /* PARANOID: clear entries */ sg_dma_address(startsg) = 0; @@ -124,14 +124,13 @@ iommu_coalesce_chunks(struct ioc *ioc, struct device *dev, ** it's always looking one "ahead". */ while(--nents > 0) { - unsigned long prevstartsg_end, startsg_end; + unsigned long prev_end, sg_start; - prevstartsg_end = sg_virt_addr(startsg) + - startsg->length; + prev_end = (unsigned long)sg_virt(startsg) + + startsg->length; startsg++; - startsg_end = sg_virt_addr(startsg) + - startsg->length; + sg_start = (unsigned long)sg_virt(startsg); /* PARANOID: clear entries */ sg_dma_address(startsg) = 0; @@ -150,10 +149,13 @@ iommu_coalesce_chunks(struct ioc *ioc, struct device *dev, break; /* - ** Next see if we can append the next chunk (i.e. - ** it must end on one page and begin on another + * Next see if we can append the next chunk (i.e. + * it must end on one page and begin on another, or + * it must start on the same address as the previous + * entry ended. */ - if (unlikely(((prevstartsg_end | sg_virt_addr(startsg)) & ~PAGE_MASK) != 0)) + if (unlikely((prev_end != sg_start) || + ((prev_end | sg_start) & ~PAGE_MASK))) break; dma_len += startsg->length; diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c index f07471264689..f1441e466c06 100644 --- a/drivers/parisc/sba_iommu.c +++ b/drivers/parisc/sba_iommu.c @@ -278,7 +278,7 @@ sba_dump_sg( struct ioc *ioc, struct scatterlist *startsg, int nents) nents, (unsigned long) sg_dma_address(startsg), sg_dma_len(startsg), - sg_virt_addr(startsg), startsg->length); + sg_virt(startsg), startsg->length); startsg++; } } @@ -945,8 +945,7 @@ sba_map_sg(struct device *dev, struct scatterlist *sglist, int nents, /* Fast path single entry scatterlists. */ if (nents == 1) { - sg_dma_address(sglist) = sba_map_single(dev, - (void *)sg_virt_addr(sglist), + sg_dma_address(sglist) = sba_map_single(dev, sg_virt(sglist), sglist->length, direction); sg_dma_len(sglist) = sglist->length; return 1; @@ -1025,7 +1024,7 @@ sba_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, #endif DBG_RUN_SG("%s() START %d entries, %p,%x\n", - __func__, nents, sg_virt_addr(sglist), sglist->length); + __func__, nents, sg_virt(sglist), sglist->length); ioc = GET_IOC(dev); |