Lines Matching defs:db_tab

447 		      struct mthca_user_db_table *db_tab, int index, u64 uaddr)
459 mutex_lock(&db_tab->mutex);
463 if ((db_tab->page[i].refcount >= MTHCA_DB_REC_PER_PAGE) ||
464 (db_tab->page[i].uvirt && db_tab->page[i].uvirt != uaddr) ||
470 if (db_tab->page[i].refcount) {
471 ++db_tab->page[i].refcount;
480 sg_set_page(&db_tab->page[i].mem, pages[0], MTHCA_ICM_PAGE_SIZE,
483 ret = dma_map_sg(&dev->pdev->dev, &db_tab->page[i].mem, 1,
490 ret = mthca_MAP_ICM_page(dev, sg_dma_address(&db_tab->page[i].mem),
493 dma_unmap_sg(&dev->pdev->dev, &db_tab->page[i].mem, 1,
495 unpin_user_page(sg_page(&db_tab->page[i].mem));
499 db_tab->page[i].uvirt = uaddr;
500 db_tab->page[i].refcount = 1;
503 mutex_unlock(&db_tab->mutex);
508 struct mthca_user_db_table *db_tab, int index)
518 mutex_lock(&db_tab->mutex);
520 --db_tab->page[index / MTHCA_DB_REC_PER_PAGE].refcount;
522 mutex_unlock(&db_tab->mutex);
527 struct mthca_user_db_table *db_tab;
535 db_tab = kmalloc(struct_size(db_tab, page, npages), GFP_KERNEL);
536 if (!db_tab)
539 mutex_init(&db_tab->mutex);
541 db_tab->page[i].refcount = 0;
542 db_tab->page[i].uvirt = 0;
543 sg_init_table(&db_tab->page[i].mem, 1);
546 return db_tab;
550 struct mthca_user_db_table *db_tab)
558 if (db_tab->page[i].uvirt) {
560 dma_unmap_sg(&dev->pdev->dev, &db_tab->page[i].mem, 1,
562 unpin_user_page(sg_page(&db_tab->page[i].mem));
566 kfree(db_tab);
578 mutex_lock(&dev->db_tab->mutex);
585 end = dev->db_tab->max_group1;
593 start = dev->db_tab->npages - 1;
594 end = dev->db_tab->min_group2;
604 if (dev->db_tab->page[i].db_rec &&
605 !bitmap_full(dev->db_tab->page[i].used,
607 page = dev->db_tab->page + i;
612 if (!dev->db_tab->page[i].db_rec) {
613 page = dev->db_tab->page + i;
617 if (dev->db_tab->max_group1 >= dev->db_tab->min_group2 - 1) {
623 ++dev->db_tab->max_group1;
625 --dev->db_tab->min_group2;
627 page = dev->db_tab->page + end;
662 mutex_unlock(&dev->db_tab->mutex);
675 page = dev->db_tab->page + i;
677 mutex_lock(&dev->db_tab->mutex);
680 if (i >= dev->db_tab->min_group2)
685 i >= dev->db_tab->max_group1 - 1) {
692 if (i == dev->db_tab->max_group1) {
693 --dev->db_tab->max_group1;
696 if (i == dev->db_tab->min_group2)
697 ++dev->db_tab->min_group2;
700 mutex_unlock(&dev->db_tab->mutex);
710 dev->db_tab = kmalloc(sizeof *dev->db_tab, GFP_KERNEL);
711 if (!dev->db_tab)
714 mutex_init(&dev->db_tab->mutex);
716 dev->db_tab->npages = dev->uar_table.uarc_size / MTHCA_ICM_PAGE_SIZE;
717 dev->db_tab->max_group1 = 0;
718 dev->db_tab->min_group2 = dev->db_tab->npages - 1;
720 dev->db_tab->page = kmalloc_array(dev->db_tab->npages,
721 sizeof(*dev->db_tab->page),
723 if (!dev->db_tab->page) {
724 kfree(dev->db_tab);
728 for (i = 0; i < dev->db_tab->npages; ++i)
729 dev->db_tab->page[i].db_rec = NULL;
747 for (i = 0; i < dev->db_tab->npages; ++i) {
748 if (!dev->db_tab->page[i].db_rec)
751 if (!bitmap_empty(dev->db_tab->page[i].used, MTHCA_DB_REC_PER_PAGE))
757 dev->db_tab->page[i].db_rec,
758 dev->db_tab->page[i].mapping);
761 kfree(dev->db_tab->page);
762 kfree(dev->db_tab);