Lines Matching refs:pgdir
682 struct mlx4_db_pgdir *pgdir; in mlx4_alloc_db_pgdir() local
684 pgdir = kzalloc(sizeof *pgdir, gfp); in mlx4_alloc_db_pgdir()
685 if (!pgdir) in mlx4_alloc_db_pgdir()
688 bitmap_fill(pgdir->order1, MLX4_DB_PER_PAGE / 2); in mlx4_alloc_db_pgdir()
689 pgdir->bits[0] = pgdir->order0; in mlx4_alloc_db_pgdir()
690 pgdir->bits[1] = pgdir->order1; in mlx4_alloc_db_pgdir()
691 pgdir->db_page = dma_alloc_coherent(dma_device, PAGE_SIZE, in mlx4_alloc_db_pgdir()
692 &pgdir->db_dma, gfp); in mlx4_alloc_db_pgdir()
693 if (!pgdir->db_page) { in mlx4_alloc_db_pgdir()
694 kfree(pgdir); in mlx4_alloc_db_pgdir()
698 return pgdir; in mlx4_alloc_db_pgdir()
701 static int mlx4_alloc_db_from_pgdir(struct mlx4_db_pgdir *pgdir, in mlx4_alloc_db_from_pgdir() argument
708 i = find_first_bit(pgdir->bits[o], MLX4_DB_PER_PAGE >> o); in mlx4_alloc_db_from_pgdir()
716 clear_bit(i, pgdir->bits[o]); in mlx4_alloc_db_from_pgdir()
721 set_bit(i ^ 1, pgdir->bits[order]); in mlx4_alloc_db_from_pgdir()
723 db->u.pgdir = pgdir; in mlx4_alloc_db_from_pgdir()
725 db->db = pgdir->db_page + db->index; in mlx4_alloc_db_from_pgdir()
726 db->dma = pgdir->db_dma + db->index * 4; in mlx4_alloc_db_from_pgdir()
735 struct mlx4_db_pgdir *pgdir; in mlx4_db_alloc() local
740 list_for_each_entry(pgdir, &priv->pgdir_list, list) in mlx4_db_alloc()
741 if (!mlx4_alloc_db_from_pgdir(pgdir, db, order)) in mlx4_db_alloc()
744 pgdir = mlx4_alloc_db_pgdir(&dev->persist->pdev->dev, gfp); in mlx4_db_alloc()
745 if (!pgdir) { in mlx4_db_alloc()
750 list_add(&pgdir->list, &priv->pgdir_list); in mlx4_db_alloc()
753 WARN_ON(mlx4_alloc_db_from_pgdir(pgdir, db, order)); in mlx4_db_alloc()
773 if (db->order == 0 && test_bit(i ^ 1, db->u.pgdir->order0)) { in mlx4_db_free()
774 clear_bit(i ^ 1, db->u.pgdir->order0); in mlx4_db_free()
778 set_bit(i, db->u.pgdir->bits[o]); in mlx4_db_free()
780 if (bitmap_full(db->u.pgdir->order1, MLX4_DB_PER_PAGE / 2)) { in mlx4_db_free()
782 db->u.pgdir->db_page, db->u.pgdir->db_dma); in mlx4_db_free()
783 list_del(&db->u.pgdir->list); in mlx4_db_free()
784 kfree(db->u.pgdir); in mlx4_db_free()