mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
iommu: parisc: pass struct device to iommu_alloc_range
This adds struct device argument to sba_alloc_range and ccio_alloc_range, a preparation for modifications to fix the IOMMU segment boundary problem. This change enables ccio_alloc_range to access to LLD's segment boundary limits. [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Cc: Kyle McMartin <kyle@parisc-linux.org> Cc: Matthew Wilcox <matthew@wil.cx> Cc: Grant Grundler <grundler@parisc-linux.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3715863aa1
commit
7c8cda625a
3 changed files with 7 additions and 7 deletions
|
@ -341,7 +341,7 @@ static int ioc_count;
|
||||||
* of available pages for the requested size.
|
* of available pages for the requested size.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
ccio_alloc_range(struct ioc *ioc, size_t size)
|
ccio_alloc_range(struct ioc *ioc, struct device *dev, size_t size)
|
||||||
{
|
{
|
||||||
unsigned int pages_needed = size >> IOVP_SHIFT;
|
unsigned int pages_needed = size >> IOVP_SHIFT;
|
||||||
unsigned int res_idx;
|
unsigned int res_idx;
|
||||||
|
@ -760,7 +760,7 @@ ccio_map_single(struct device *dev, void *addr, size_t size,
|
||||||
ioc->msingle_pages += size >> IOVP_SHIFT;
|
ioc->msingle_pages += size >> IOVP_SHIFT;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
idx = ccio_alloc_range(ioc, size);
|
idx = ccio_alloc_range(ioc, dev, size);
|
||||||
iovp = (dma_addr_t)MKIOVP(idx);
|
iovp = (dma_addr_t)MKIOVP(idx);
|
||||||
|
|
||||||
pdir_start = &(ioc->pdir_base[idx]);
|
pdir_start = &(ioc->pdir_base[idx]);
|
||||||
|
|
|
@ -96,8 +96,8 @@ iommu_fill_pdir(struct ioc *ioc, struct scatterlist *startsg, int nents,
|
||||||
|
|
||||||
static inline unsigned int
|
static inline unsigned int
|
||||||
iommu_coalesce_chunks(struct ioc *ioc, struct device *dev,
|
iommu_coalesce_chunks(struct ioc *ioc, struct device *dev,
|
||||||
struct scatterlist *startsg, int nents,
|
struct scatterlist *startsg, int nents,
|
||||||
int (*iommu_alloc_range)(struct ioc *, size_t))
|
int (*iommu_alloc_range)(struct ioc *, struct device *, size_t))
|
||||||
{
|
{
|
||||||
struct scatterlist *contig_sg; /* contig chunk head */
|
struct scatterlist *contig_sg; /* contig chunk head */
|
||||||
unsigned long dma_offset, dma_len; /* start/len of DMA stream */
|
unsigned long dma_offset, dma_len; /* start/len of DMA stream */
|
||||||
|
@ -166,7 +166,7 @@ iommu_coalesce_chunks(struct ioc *ioc, struct device *dev,
|
||||||
dma_len = ALIGN(dma_len + dma_offset, IOVP_SIZE);
|
dma_len = ALIGN(dma_len + dma_offset, IOVP_SIZE);
|
||||||
sg_dma_address(contig_sg) =
|
sg_dma_address(contig_sg) =
|
||||||
PIDE_FLAG
|
PIDE_FLAG
|
||||||
| (iommu_alloc_range(ioc, dma_len) << IOVP_SHIFT)
|
| (iommu_alloc_range(ioc, dev, dma_len) << IOVP_SHIFT)
|
||||||
| dma_offset;
|
| dma_offset;
|
||||||
n_mappings++;
|
n_mappings++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -404,7 +404,7 @@ sba_search_bitmap(struct ioc *ioc, unsigned long bits_wanted)
|
||||||
* resource bit map.
|
* resource bit map.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
sba_alloc_range(struct ioc *ioc, size_t size)
|
sba_alloc_range(struct ioc *ioc, struct device *dev, size_t size)
|
||||||
{
|
{
|
||||||
unsigned int pages_needed = size >> IOVP_SHIFT;
|
unsigned int pages_needed = size >> IOVP_SHIFT;
|
||||||
#ifdef SBA_COLLECT_STATS
|
#ifdef SBA_COLLECT_STATS
|
||||||
|
@ -710,7 +710,7 @@ sba_map_single(struct device *dev, void *addr, size_t size,
|
||||||
ioc->msingle_calls++;
|
ioc->msingle_calls++;
|
||||||
ioc->msingle_pages += size >> IOVP_SHIFT;
|
ioc->msingle_pages += size >> IOVP_SHIFT;
|
||||||
#endif
|
#endif
|
||||||
pide = sba_alloc_range(ioc, size);
|
pide = sba_alloc_range(ioc, dev, size);
|
||||||
iovp = (dma_addr_t) pide << IOVP_SHIFT;
|
iovp = (dma_addr_t) pide << IOVP_SHIFT;
|
||||||
|
|
||||||
DBG_RUN("%s() 0x%p -> 0x%lx\n",
|
DBG_RUN("%s() 0x%p -> 0x%lx\n",
|
||||||
|
|
Loading…
Reference in a new issue