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