IB/mthca: Fix allocation of ICM chunks in coherent memory
authorRoland Dreier <rolandd@cisco.com>
Fri, 16 Feb 2007 21:57:33 +0000 (13:57 -0800)
committerRoland Dreier <rolandd@cisco.com>
Fri, 16 Feb 2007 21:57:33 +0000 (13:57 -0800)
The change to allow allocating ICM chunks from coherent memory did not
increment the count of sg entries properly, so a chunk that required
more than allocation would not be mapped properly by the HCA.

Fix this by adding the missing increment of chunk->nsg.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/mthca/mthca_memfree.c

index 0b9d053a599d2c3a328913aceccafb5721ed5698..48f7c65e9aedb372336ec0db1e299276f94e01e8 100644 (file)
@@ -175,7 +175,9 @@ struct mthca_icm *mthca_alloc_icm(struct mthca_dev *dev, int npages,
                if (!ret) {
                        ++chunk->npages;
 
-                       if (!coherent && chunk->npages == MTHCA_ICM_CHUNK_LEN) {
+                       if (coherent)
+                               ++chunk->nsg;
+                       else if (chunk->npages == MTHCA_ICM_CHUNK_LEN) {
                                chunk->nsg = pci_map_sg(dev->pdev, chunk->mem,
                                                        chunk->npages,
                                                        PCI_DMA_BIDIRECTIONAL);