• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/infiniband/hw/mthca/

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;
475 &db_tab->page[i].mem.page, NULL);
479 db_tab->page[i].mem.length = MTHCA_ICM_PAGE_SIZE;
480 db_tab->page[i].mem.offset = uaddr & ~PAGE_MASK;
482 ret = pci_map_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE);
484 put_page(db_tab->page[i].mem.page);
488 ret = mthca_MAP_ICM_page(dev, sg_dma_address(&db_tab->page[i].mem),
493 pci_unmap_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE);
494 put_page(db_tab->page[i].mem.page);
498 db_tab->page[i].uvirt = uaddr;
499 db_tab->page[i].refcount = 1;
502 mutex_unlock(&db_tab->mutex);
507 struct mthca_user_db_table *db_tab, int index)
517 mutex_lock(&db_tab->mutex);
519 --db_tab->page[index / MTHCA_DB_REC_PER_PAGE].refcount;
521 mutex_unlock(&db_tab->mutex);
526 struct mthca_user_db_table *db_tab;
534 db_tab = kmalloc(sizeof *db_tab + npages * sizeof *db_tab->page, GFP_KERNEL);
535 if (!db_tab)
538 mutex_init(&db_tab->mutex);
540 db_tab->page[i].refcount = 0;
541 db_tab->page[i].uvirt = 0;
544 return db_tab;
548 struct mthca_user_db_table *db_tab)
557 if (db_tab->page[i].uvirt) {
559 pci_unmap_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE);
560 put_page(db_tab->page[i].mem.page);
564 kfree(db_tab);
577 mutex_lock(&dev->db_tab->mutex);
584 end = dev->db_tab->max_group1;
592 start = dev->db_tab->npages - 1;
593 end = dev->db_tab->min_group2;
603 if (dev->db_tab->page[i].db_rec &&
604 !bitmap_full(dev->db_tab->page[i].used,
606 page = dev->db_tab->page + i;
611 if (!dev->db_tab->page[i].db_rec) {
612 page = dev->db_tab->page + i;
616 if (dev->db_tab->max_group1 >= dev->db_tab->min_group2 - 1) {
622 ++dev->db_tab->max_group1;
624 --dev->db_tab->min_group2;
626 page = dev->db_tab->page + end;
663 mutex_unlock(&dev->db_tab->mutex);
677 page = dev->db_tab->page + i;
679 mutex_lock(&dev->db_tab->mutex);
682 if (i >= dev->db_tab->min_group2)
687 i >= dev->db_tab->max_group1 - 1) {
694 if (i == dev->db_tab->max_group1) {
695 --dev->db_tab->max_group1;
697 if (i == dev->db_tab->min_group2)
698 ++dev->db_tab->min_group2;
701 mutex_unlock(&dev->db_tab->mutex);
711 dev->db_tab = kmalloc(sizeof *dev->db_tab, GFP_KERNEL);
712 if (!dev->db_tab)
715 mutex_init(&dev->db_tab->mutex);
717 dev->db_tab->npages = dev->uar_table.uarc_size / MTHCA_ICM_PAGE_SIZE;
718 dev->db_tab->max_group1 = 0;
719 dev->db_tab->min_group2 = dev->db_tab->npages - 1;
721 dev->db_tab->page = kmalloc(dev->db_tab->npages *
722 sizeof *dev->db_tab->page,
724 if (!dev->db_tab->page) {
725 kfree(dev->db_tab);
729 for (i = 0; i < dev->db_tab->npages; ++i)
730 dev->db_tab->page[i].db_rec = NULL;
749 for (i = 0; i < dev->db_tab->npages; ++i) {
750 if (!dev->db_tab->page[i].db_rec)
753 if (!bitmap_empty(dev->db_tab->page[i].used, MTHCA_DB_REC_PER_PAGE))
759 dev->db_tab->page[i].db_rec,
760 dev->db_tab->page[i].mapping);
763 kfree(dev->db_tab->page);
764 kfree(dev->db_tab);