Lines Matching refs:pgdir

643 	struct mlx4_db_pgdir *pgdir;  in mlx4_alloc_db_pgdir()  local
645 pgdir = kzalloc(sizeof(*pgdir), GFP_KERNEL); in mlx4_alloc_db_pgdir()
646 if (!pgdir) in mlx4_alloc_db_pgdir()
649 bitmap_fill(pgdir->order1, MLX4_DB_PER_PAGE / 2); in mlx4_alloc_db_pgdir()
650 pgdir->bits[0] = pgdir->order0; in mlx4_alloc_db_pgdir()
651 pgdir->bits[1] = pgdir->order1; in mlx4_alloc_db_pgdir()
652 pgdir->db_page = dma_alloc_coherent(dma_device, PAGE_SIZE, in mlx4_alloc_db_pgdir()
653 &pgdir->db_dma, GFP_KERNEL); in mlx4_alloc_db_pgdir()
654 if (!pgdir->db_page) { in mlx4_alloc_db_pgdir()
655 kfree(pgdir); in mlx4_alloc_db_pgdir()
659 return pgdir; in mlx4_alloc_db_pgdir()
662 static int mlx4_alloc_db_from_pgdir(struct mlx4_db_pgdir *pgdir, in mlx4_alloc_db_from_pgdir() argument
669 i = find_first_bit(pgdir->bits[o], MLX4_DB_PER_PAGE >> o); in mlx4_alloc_db_from_pgdir()
677 clear_bit(i, pgdir->bits[o]); in mlx4_alloc_db_from_pgdir()
682 set_bit(i ^ 1, pgdir->bits[order]); in mlx4_alloc_db_from_pgdir()
684 db->u.pgdir = pgdir; in mlx4_alloc_db_from_pgdir()
686 db->db = pgdir->db_page + db->index; in mlx4_alloc_db_from_pgdir()
687 db->dma = pgdir->db_dma + db->index * 4; in mlx4_alloc_db_from_pgdir()
696 struct mlx4_db_pgdir *pgdir; in mlx4_db_alloc() local
701 list_for_each_entry(pgdir, &priv->pgdir_list, list) in mlx4_db_alloc()
702 if (!mlx4_alloc_db_from_pgdir(pgdir, db, order)) in mlx4_db_alloc()
705 pgdir = mlx4_alloc_db_pgdir(&dev->persist->pdev->dev); in mlx4_db_alloc()
706 if (!pgdir) { in mlx4_db_alloc()
711 list_add(&pgdir->list, &priv->pgdir_list); in mlx4_db_alloc()
714 WARN_ON(mlx4_alloc_db_from_pgdir(pgdir, db, order)); in mlx4_db_alloc()
734 if (db->order == 0 && test_bit(i ^ 1, db->u.pgdir->order0)) { in mlx4_db_free()
735 clear_bit(i ^ 1, db->u.pgdir->order0); in mlx4_db_free()
739 set_bit(i, db->u.pgdir->bits[o]); in mlx4_db_free()
741 if (bitmap_full(db->u.pgdir->order1, MLX4_DB_PER_PAGE / 2)) { in mlx4_db_free()
743 db->u.pgdir->db_page, db->u.pgdir->db_dma); in mlx4_db_free()
744 list_del(&db->u.pgdir->list); in mlx4_db_free()
745 kfree(db->u.pgdir); in mlx4_db_free()