Lines Matching refs:pgdir

665 	struct mlx4_db_pgdir *pgdir;  in mlx4_alloc_db_pgdir()  local
667 pgdir = kzalloc(sizeof(*pgdir), GFP_KERNEL); in mlx4_alloc_db_pgdir()
668 if (!pgdir) in mlx4_alloc_db_pgdir()
671 bitmap_fill(pgdir->order1, MLX4_DB_PER_PAGE / 2); in mlx4_alloc_db_pgdir()
672 pgdir->bits[0] = pgdir->order0; in mlx4_alloc_db_pgdir()
673 pgdir->bits[1] = pgdir->order1; in mlx4_alloc_db_pgdir()
674 pgdir->db_page = dma_alloc_coherent(dma_device, PAGE_SIZE, in mlx4_alloc_db_pgdir()
675 &pgdir->db_dma, GFP_KERNEL); in mlx4_alloc_db_pgdir()
676 if (!pgdir->db_page) { in mlx4_alloc_db_pgdir()
677 kfree(pgdir); in mlx4_alloc_db_pgdir()
681 return pgdir; in mlx4_alloc_db_pgdir()
684 static int mlx4_alloc_db_from_pgdir(struct mlx4_db_pgdir *pgdir, in mlx4_alloc_db_from_pgdir() argument
691 i = find_first_bit(pgdir->bits[o], MLX4_DB_PER_PAGE >> o); in mlx4_alloc_db_from_pgdir()
699 clear_bit(i, pgdir->bits[o]); in mlx4_alloc_db_from_pgdir()
704 set_bit(i ^ 1, pgdir->bits[order]); in mlx4_alloc_db_from_pgdir()
706 db->u.pgdir = pgdir; in mlx4_alloc_db_from_pgdir()
708 db->db = pgdir->db_page + db->index; in mlx4_alloc_db_from_pgdir()
709 db->dma = pgdir->db_dma + db->index * 4; in mlx4_alloc_db_from_pgdir()
718 struct mlx4_db_pgdir *pgdir; in mlx4_db_alloc() local
723 list_for_each_entry(pgdir, &priv->pgdir_list, list) in mlx4_db_alloc()
724 if (!mlx4_alloc_db_from_pgdir(pgdir, db, order)) in mlx4_db_alloc()
727 pgdir = mlx4_alloc_db_pgdir(&dev->persist->pdev->dev); in mlx4_db_alloc()
728 if (!pgdir) { in mlx4_db_alloc()
733 list_add(&pgdir->list, &priv->pgdir_list); in mlx4_db_alloc()
736 WARN_ON(mlx4_alloc_db_from_pgdir(pgdir, db, order)); in mlx4_db_alloc()
756 if (db->order == 0 && test_bit(i ^ 1, db->u.pgdir->order0)) { in mlx4_db_free()
757 clear_bit(i ^ 1, db->u.pgdir->order0); in mlx4_db_free()
761 set_bit(i, db->u.pgdir->bits[o]); in mlx4_db_free()
763 if (bitmap_full(db->u.pgdir->order1, MLX4_DB_PER_PAGE / 2)) { in mlx4_db_free()
765 db->u.pgdir->db_page, db->u.pgdir->db_dma); in mlx4_db_free()
766 list_del(&db->u.pgdir->list); in mlx4_db_free()
767 kfree(db->u.pgdir); in mlx4_db_free()