Lines Matching refs:pgdir
137 struct mlx5_db_pgdir *pgdir;
139 pgdir = kzalloc_node(sizeof(*pgdir), GFP_KERNEL, node);
140 if (!pgdir)
143 pgdir->bitmap = bitmap_zalloc_node(db_per_page, GFP_KERNEL, node);
144 if (!pgdir->bitmap) {
145 kfree(pgdir);
149 bitmap_fill(pgdir->bitmap, db_per_page);
151 pgdir->db_page = mlx5_dma_zalloc_coherent_node(dev, PAGE_SIZE,
152 &pgdir->db_dma, node);
153 if (!pgdir->db_page) {
154 bitmap_free(pgdir->bitmap);
155 kfree(pgdir);
159 return pgdir;
162 static int mlx5_alloc_db_from_pgdir(struct mlx5_db_pgdir *pgdir,
169 i = find_first_bit(pgdir->bitmap, db_per_page);
173 __clear_bit(i, pgdir->bitmap);
175 db->u.pgdir = pgdir;
178 db->db = pgdir->db_page + offset / sizeof(*pgdir->db_page);
179 db->dma = pgdir->db_dma + offset;
189 struct mlx5_db_pgdir *pgdir;
194 list_for_each_entry(pgdir, &dev->priv.pgdir_list, list)
195 if (!mlx5_alloc_db_from_pgdir(pgdir, db))
198 pgdir = mlx5_alloc_db_pgdir(dev, node);
199 if (!pgdir) {
204 list_add(&pgdir->list, &dev->priv.pgdir_list);
207 WARN_ON(mlx5_alloc_db_from_pgdir(pgdir, db));
222 __set_bit(db->index, db->u.pgdir->bitmap);
224 if (bitmap_full(db->u.pgdir->bitmap, db_per_page)) {
226 db->u.pgdir->db_page, db->u.pgdir->db_dma);
227 list_del(&db->u.pgdir->list);
228 bitmap_free(db->u.pgdir->bitmap);
229 kfree(db->u.pgdir);