void mthca_unmap_user_db(struct mthca_dev *dev, struct mthca_uar *uar,
struct mthca_user_db_table *db_tab, int index)
{
+ u8 status;
+ int ix = index / MTHCA_DB_REC_PER_PAGE;
UNREFERENCED_PARAMETER(uar);
if (!mthca_is_memfree(dev))
down(&db_tab->mutex);
- --db_tab->page[index / MTHCA_DB_REC_PER_PAGE].refcount;
+ if (!--db_tab->page[ix].refcount) {
+ mthca_UNMAP_ICM(dev, mthca_uarc_virt(dev, uar, ix), 1, &status);
+ pci_unmap_sg(dev, &db_tab->page[ix].mem, 1, PCI_DMA_TODEVICE);
+ put_page(&db_tab->page[ix].mem);
+ db_tab->page[ix].uvirt = 0;
+ }
up(&db_tab->mutex);
}