Lines Matching refs:chunk

63 static void mthca_free_icm_pages(struct mthca_dev *dev, struct mthca_icm_chunk *chunk)  in mthca_free_icm_pages()  argument
67 if (chunk->nsg > 0) in mthca_free_icm_pages()
68 pci_unmap_sg(dev->pdev, chunk->mem, chunk->npages, in mthca_free_icm_pages()
71 for (i = 0; i < chunk->npages; ++i) in mthca_free_icm_pages()
72 __free_pages(sg_page(&chunk->mem[i]), in mthca_free_icm_pages()
73 get_order(chunk->mem[i].length)); in mthca_free_icm_pages()
76 static void mthca_free_icm_coherent(struct mthca_dev *dev, struct mthca_icm_chunk *chunk) in mthca_free_icm_coherent() argument
80 for (i = 0; i < chunk->npages; ++i) { in mthca_free_icm_coherent()
81 dma_free_coherent(&dev->pdev->dev, chunk->mem[i].length, in mthca_free_icm_coherent()
82 lowmem_page_address(sg_page(&chunk->mem[i])), in mthca_free_icm_coherent()
83 sg_dma_address(&chunk->mem[i])); in mthca_free_icm_coherent()
89 struct mthca_icm_chunk *chunk, *tmp; in mthca_free_icm() local
94 list_for_each_entry_safe(chunk, tmp, &icm->chunk_list, list) { in mthca_free_icm()
96 mthca_free_icm_coherent(dev, chunk); in mthca_free_icm()
98 mthca_free_icm_pages(dev, chunk); in mthca_free_icm()
100 kfree(chunk); in mthca_free_icm()
140 struct mthca_icm_chunk *chunk = NULL; in mthca_alloc_icm() local
157 if (!chunk) { in mthca_alloc_icm()
158 chunk = kmalloc(sizeof *chunk, in mthca_alloc_icm()
160 if (!chunk) in mthca_alloc_icm()
163 sg_init_table(chunk->mem, MTHCA_ICM_CHUNK_LEN); in mthca_alloc_icm()
164 chunk->npages = 0; in mthca_alloc_icm()
165 chunk->nsg = 0; in mthca_alloc_icm()
166 list_add_tail(&chunk->list, &icm->chunk_list); in mthca_alloc_icm()
174 &chunk->mem[chunk->npages], in mthca_alloc_icm()
177 ret = mthca_alloc_icm_pages(&chunk->mem[chunk->npages], in mthca_alloc_icm()
181 ++chunk->npages; in mthca_alloc_icm()
184 ++chunk->nsg; in mthca_alloc_icm()
185 else if (chunk->npages == MTHCA_ICM_CHUNK_LEN) { in mthca_alloc_icm()
186 chunk->nsg = pci_map_sg(dev->pdev, chunk->mem, in mthca_alloc_icm()
187 chunk->npages, in mthca_alloc_icm()
190 if (chunk->nsg <= 0) in mthca_alloc_icm()
194 if (chunk->npages == MTHCA_ICM_CHUNK_LEN) in mthca_alloc_icm()
195 chunk = NULL; in mthca_alloc_icm()
205 if (!coherent && chunk) { in mthca_alloc_icm()
206 chunk->nsg = pci_map_sg(dev->pdev, chunk->mem, in mthca_alloc_icm()
207 chunk->npages, in mthca_alloc_icm()
210 if (chunk->nsg <= 0) in mthca_alloc_icm()
280 struct mthca_icm_chunk *chunk; in mthca_table_find() local
296 list_for_each_entry(chunk, &icm->chunk_list, list) { in mthca_table_find()
297 for (i = 0; i < chunk->npages; ++i) { in mthca_table_find()
299 if (sg_dma_len(&chunk->mem[i]) > dma_offset) in mthca_table_find()
300 *dma_handle = sg_dma_address(&chunk->mem[i]) + in mthca_table_find()
302 dma_offset -= sg_dma_len(&chunk->mem[i]); in mthca_table_find()
307 if (chunk->mem[i].length > offset) { in mthca_table_find()
308 page = sg_page(&chunk->mem[i]); in mthca_table_find()
311 offset -= chunk->mem[i].length; in mthca_table_find()