Lines Matching refs:chunk
54 static void mlx4_free_icm_pages(struct mlx4_dev *dev, struct mlx4_icm_chunk *chunk) in mlx4_free_icm_pages() argument
58 if (chunk->nsg > 0) in mlx4_free_icm_pages()
59 pci_unmap_sg(dev->persist->pdev, chunk->mem, chunk->npages, in mlx4_free_icm_pages()
62 for (i = 0; i < chunk->npages; ++i) in mlx4_free_icm_pages()
63 __free_pages(sg_page(&chunk->mem[i]), in mlx4_free_icm_pages()
64 get_order(chunk->mem[i].length)); in mlx4_free_icm_pages()
67 static void mlx4_free_icm_coherent(struct mlx4_dev *dev, struct mlx4_icm_chunk *chunk) in mlx4_free_icm_coherent() argument
71 for (i = 0; i < chunk->npages; ++i) in mlx4_free_icm_coherent()
73 chunk->mem[i].length, in mlx4_free_icm_coherent()
74 lowmem_page_address(sg_page(&chunk->mem[i])), in mlx4_free_icm_coherent()
75 sg_dma_address(&chunk->mem[i])); in mlx4_free_icm_coherent()
80 struct mlx4_icm_chunk *chunk, *tmp; in mlx4_free_icm() local
85 list_for_each_entry_safe(chunk, tmp, &icm->chunk_list, list) { in mlx4_free_icm()
87 mlx4_free_icm_coherent(dev, chunk); in mlx4_free_icm()
89 mlx4_free_icm_pages(dev, chunk); in mlx4_free_icm()
91 kfree(chunk); in mlx4_free_icm()
131 struct mlx4_icm_chunk *chunk = NULL; in mlx4_alloc_icm() local
154 if (!chunk) { in mlx4_alloc_icm()
155 chunk = kmalloc_node(sizeof(*chunk), in mlx4_alloc_icm()
159 if (!chunk) { in mlx4_alloc_icm()
160 chunk = kmalloc(sizeof(*chunk), in mlx4_alloc_icm()
163 if (!chunk) in mlx4_alloc_icm()
167 sg_init_table(chunk->mem, MLX4_ICM_CHUNK_LEN); in mlx4_alloc_icm()
168 chunk->npages = 0; in mlx4_alloc_icm()
169 chunk->nsg = 0; in mlx4_alloc_icm()
170 list_add_tail(&chunk->list, &icm->chunk_list); in mlx4_alloc_icm()
178 &chunk->mem[chunk->npages], in mlx4_alloc_icm()
181 ret = mlx4_alloc_icm_pages(&chunk->mem[chunk->npages], in mlx4_alloc_icm()
192 ++chunk->npages; in mlx4_alloc_icm()
195 ++chunk->nsg; in mlx4_alloc_icm()
196 else if (chunk->npages == MLX4_ICM_CHUNK_LEN) { in mlx4_alloc_icm()
197 chunk->nsg = pci_map_sg(dev->persist->pdev, chunk->mem, in mlx4_alloc_icm()
198 chunk->npages, in mlx4_alloc_icm()
201 if (chunk->nsg <= 0) in mlx4_alloc_icm()
205 if (chunk->npages == MLX4_ICM_CHUNK_LEN) in mlx4_alloc_icm()
206 chunk = NULL; in mlx4_alloc_icm()
211 if (!coherent && chunk) { in mlx4_alloc_icm()
212 chunk->nsg = pci_map_sg(dev->persist->pdev, chunk->mem, in mlx4_alloc_icm()
213 chunk->npages, in mlx4_alloc_icm()
216 if (chunk->nsg <= 0) in mlx4_alloc_icm()
311 struct mlx4_icm_chunk *chunk; in mlx4_table_find() local
327 list_for_each_entry(chunk, &icm->chunk_list, list) { in mlx4_table_find()
328 for (i = 0; i < chunk->npages; ++i) { in mlx4_table_find()
330 if (sg_dma_len(&chunk->mem[i]) > dma_offset) in mlx4_table_find()
331 *dma_handle = sg_dma_address(&chunk->mem[i]) + in mlx4_table_find()
333 dma_offset -= sg_dma_len(&chunk->mem[i]); in mlx4_table_find()
340 if (chunk->mem[i].length > offset) { in mlx4_table_find()
341 page = sg_page(&chunk->mem[i]); in mlx4_table_find()
344 offset -= chunk->mem[i].length; in mlx4_table_find()