Lines Matching defs:db_tab

446 		      struct mthca_user_db_table *db_tab, int index, u64 uaddr)
458 mutex_lock(&db_tab->mutex);
462 if ((db_tab->page[i].refcount >= MTHCA_DB_REC_PER_PAGE) ||
463 (db_tab->page[i].uvirt && db_tab->page[i].uvirt != uaddr) ||
469 if (db_tab->page[i].refcount) {
470 ++db_tab->page[i].refcount;
478 sg_set_page(&db_tab->page[i].mem, pages[0], MTHCA_ICM_PAGE_SIZE,
481 ret = pci_map_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE);
487 ret = mthca_MAP_ICM_page(dev, sg_dma_address(&db_tab->page[i].mem),
490 pci_unmap_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE);
491 put_page(sg_page(&db_tab->page[i].mem));
495 db_tab->page[i].uvirt = uaddr;
496 db_tab->page[i].refcount = 1;
499 mutex_unlock(&db_tab->mutex);
504 struct mthca_user_db_table *db_tab, int index)
514 mutex_lock(&db_tab->mutex);
516 --db_tab->page[index / MTHCA_DB_REC_PER_PAGE].refcount;
518 mutex_unlock(&db_tab->mutex);
523 struct mthca_user_db_table *db_tab;
531 db_tab = kmalloc(sizeof *db_tab + npages * sizeof *db_tab->page, GFP_KERNEL);
532 if (!db_tab)
535 mutex_init(&db_tab->mutex);
537 db_tab->page[i].refcount = 0;
538 db_tab->page[i].uvirt = 0;
539 sg_init_table(&db_tab->page[i].mem, 1);
542 return db_tab;
546 struct mthca_user_db_table *db_tab)
554 if (db_tab->page[i].uvirt) {
556 pci_unmap_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE);
557 put_page(sg_page(&db_tab->page[i].mem));
561 kfree(db_tab);
573 mutex_lock(&dev->db_tab->mutex);
580 end = dev->db_tab->max_group1;
588 start = dev->db_tab->npages - 1;
589 end = dev->db_tab->min_group2;
599 if (dev->db_tab->page[i].db_rec &&
600 !bitmap_full(dev->db_tab->page[i].used,
602 page = dev->db_tab->page + i;
607 if (!dev->db_tab->page[i].db_rec) {
608 page = dev->db_tab->page + i;
612 if (dev->db_tab->max_group1 >= dev->db_tab->min_group2 - 1) {
618 ++dev->db_tab->max_group1;
620 --dev->db_tab->min_group2;
622 page = dev->db_tab->page + end;
657 mutex_unlock(&dev->db_tab->mutex);
670 page = dev->db_tab->page + i;
672 mutex_lock(&dev->db_tab->mutex);
675 if (i >= dev->db_tab->min_group2)
680 i >= dev->db_tab->max_group1 - 1) {
687 if (i == dev->db_tab->max_group1) {
688 --dev->db_tab->max_group1;
691 if (i == dev->db_tab->min_group2)
692 ++dev->db_tab->min_group2;
695 mutex_unlock(&dev->db_tab->mutex);
705 dev->db_tab = kmalloc(sizeof *dev->db_tab, GFP_KERNEL);
706 if (!dev->db_tab)
709 mutex_init(&dev->db_tab->mutex);
711 dev->db_tab->npages = dev->uar_table.uarc_size / MTHCA_ICM_PAGE_SIZE;
712 dev->db_tab->max_group1 = 0;
713 dev->db_tab->min_group2 = dev->db_tab->npages - 1;
715 dev->db_tab->page = kmalloc(dev->db_tab->npages *
716 sizeof *dev->db_tab->page,
718 if (!dev->db_tab->page) {
719 kfree(dev->db_tab);
723 for (i = 0; i < dev->db_tab->npages; ++i)
724 dev->db_tab->page[i].db_rec = NULL;
742 for (i = 0; i < dev->db_tab->npages; ++i) {
743 if (!dev->db_tab->page[i].db_rec)
746 if (!bitmap_empty(dev->db_tab->page[i].used, MTHCA_DB_REC_PER_PAGE))
752 dev->db_tab->page[i].db_rec,
753 dev->db_tab->page[i].mapping);
756 kfree(dev->db_tab->page);
757 kfree(dev->db_tab);