From: leonidk Date: Mon, 10 Apr 2006 17:52:50 +0000 (+0000) Subject: [MTHCA] fixed a bug in release resources X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=d23a856cf8b4ea5c37511c03f85f41045e9a85cd;p=~shefty%2Frdma-win.git [MTHCA] fixed a bug in release resources git-svn-id: svn://openib.tc.cornell.edu/gen1@305 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/hw/mthca/kernel/mthca_memfree.c b/trunk/hw/mthca/kernel/mthca_memfree.c index ad469f0b..6949da6f 100644 --- a/trunk/hw/mthca/kernel/mthca_memfree.c +++ b/trunk/hw/mthca/kernel/mthca_memfree.c @@ -456,6 +456,8 @@ out: 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)) @@ -468,7 +470,12 @@ void mthca_unmap_user_db(struct mthca_dev *dev, struct mthca_uar *uar, 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); }