Lines Matching refs:chunk

64 static void mthca_free_icm_pages(struct mthca_dev *dev, struct mthca_icm_chunk *chunk)  in mthca_free_icm_pages()  argument
68 if (chunk->nsg > 0) in mthca_free_icm_pages()
69 dma_unmap_sg(&dev->pdev->dev, chunk->mem, chunk->npages, in mthca_free_icm_pages()
72 for (i = 0; i < chunk->npages; ++i) in mthca_free_icm_pages()
73 __free_pages(sg_page(&chunk->mem[i]), in mthca_free_icm_pages()
74 get_order(chunk->mem[i].length)); in mthca_free_icm_pages()
77 static void mthca_free_icm_coherent(struct mthca_dev *dev, struct mthca_icm_chunk *chunk) in mthca_free_icm_coherent() argument
81 for (i = 0; i < chunk->npages; ++i) { in mthca_free_icm_coherent()
82 dma_free_coherent(&dev->pdev->dev, chunk->mem[i].length, in mthca_free_icm_coherent()
83 lowmem_page_address(sg_page(&chunk->mem[i])), in mthca_free_icm_coherent()
84 sg_dma_address(&chunk->mem[i])); in mthca_free_icm_coherent()
90 struct mthca_icm_chunk *chunk, *tmp; in mthca_free_icm() local
95 list_for_each_entry_safe(chunk, tmp, &icm->chunk_list, list) { in mthca_free_icm()
97 mthca_free_icm_coherent(dev, chunk); in mthca_free_icm()
99 mthca_free_icm_pages(dev, chunk); in mthca_free_icm()
101 kfree(chunk); in mthca_free_icm()
141 struct mthca_icm_chunk *chunk = NULL; in mthca_alloc_icm() local
158 if (!chunk) { in mthca_alloc_icm()
159 chunk = kmalloc(sizeof *chunk, in mthca_alloc_icm()
161 if (!chunk) in mthca_alloc_icm()
164 sg_init_table(chunk->mem, MTHCA_ICM_CHUNK_LEN); in mthca_alloc_icm()
165 chunk->npages = 0; in mthca_alloc_icm()
166 chunk->nsg = 0; in mthca_alloc_icm()
167 list_add_tail(&chunk->list, &icm->chunk_list); in mthca_alloc_icm()
175 &chunk->mem[chunk->npages], in mthca_alloc_icm()
178 ret = mthca_alloc_icm_pages(&chunk->mem[chunk->npages], in mthca_alloc_icm()
182 ++chunk->npages; in mthca_alloc_icm()
185 ++chunk->nsg; in mthca_alloc_icm()
186 else if (chunk->npages == MTHCA_ICM_CHUNK_LEN) { in mthca_alloc_icm()
187 chunk->nsg = in mthca_alloc_icm()
188 dma_map_sg(&dev->pdev->dev, chunk->mem, in mthca_alloc_icm()
189 chunk->npages, in mthca_alloc_icm()
192 if (chunk->nsg <= 0) in mthca_alloc_icm()
196 if (chunk->npages == MTHCA_ICM_CHUNK_LEN) in mthca_alloc_icm()
197 chunk = NULL; in mthca_alloc_icm()
207 if (!coherent && chunk) { in mthca_alloc_icm()
208 chunk->nsg = dma_map_sg(&dev->pdev->dev, chunk->mem, in mthca_alloc_icm()
209 chunk->npages, DMA_BIDIRECTIONAL); in mthca_alloc_icm()
211 if (chunk->nsg <= 0) in mthca_alloc_icm()
281 struct mthca_icm_chunk *chunk; in mthca_table_find() local
297 list_for_each_entry(chunk, &icm->chunk_list, list) { in mthca_table_find()
298 for (i = 0; i < chunk->npages; ++i) { in mthca_table_find()
300 if (sg_dma_len(&chunk->mem[i]) > dma_offset) in mthca_table_find()
301 *dma_handle = sg_dma_address(&chunk->mem[i]) + in mthca_table_find()
303 dma_offset -= sg_dma_len(&chunk->mem[i]); in mthca_table_find()
308 if (chunk->mem[i].length > offset) { in mthca_table_find()
309 page = sg_page(&chunk->mem[i]); in mthca_table_find()
312 offset -= chunk->mem[i].length; in mthca_table_find()