Lines Matching refs:pgdir
152 struct mlx5_db_pgdir *pgdir;
154 pgdir = kzalloc(sizeof(*pgdir), GFP_KERNEL);
156 bitmap_fill(pgdir->bitmap, MLX5_DB_PER_PAGE);
158 pgdir->fw_page = mlx5_fwp_alloc(dev, GFP_KERNEL, 1);
159 if (pgdir->fw_page != NULL) {
160 pgdir->db_page = pgdir->fw_page->virt_addr;
161 pgdir->db_dma = pgdir->fw_page->dma_addr;
164 memset(pgdir->db_page, 0, MLX5_ADAPTER_PAGE_SIZE);
167 mlx5_fwp_flush(pgdir->fw_page);
169 if (!pgdir->db_page) {
170 kfree(pgdir);
174 return pgdir;
177 static int mlx5_alloc_db_from_pgdir(struct mlx5_db_pgdir *pgdir,
183 i = find_first_bit(pgdir->bitmap, MLX5_DB_PER_PAGE);
187 __clear_bit(i, pgdir->bitmap);
189 db->u.pgdir = pgdir;
192 db->db = pgdir->db_page + offset / sizeof(*pgdir->db_page);
193 db->dma = pgdir->db_dma + offset;
203 struct mlx5_db_pgdir *pgdir;
208 list_for_each_entry(pgdir, &dev->priv.pgdir_list, list)
209 if (!mlx5_alloc_db_from_pgdir(pgdir, db))
212 pgdir = mlx5_alloc_db_pgdir(dev);
213 if (!pgdir) {
218 list_add(&pgdir->list, &dev->priv.pgdir_list);
221 WARN_ON(mlx5_alloc_db_from_pgdir(pgdir, db));
234 __set_bit(db->index, db->u.pgdir->bitmap);
236 if (bitmap_full(db->u.pgdir->bitmap, MLX5_DB_PER_PAGE)) {
237 mlx5_fwp_free(db->u.pgdir->fw_page);
238 list_del(&db->u.pgdir->list);
239 kfree(db->u.pgdir);