]> err.no Git - linux-2.6/blobdiff - drivers/infiniband/hw/mthca/mthca_mr.c
xtensa: use DATA_DATA in xtensa
[linux-2.6] / drivers / infiniband / hw / mthca / mthca_mr.c
index 8e4846b5c641ea3451452e636485883df9b7019e..aa6c70a6a36f24c35fbfc3d7bff3b741a18f6cae 100644 (file)
@@ -297,7 +297,8 @@ out:
 
 int mthca_write_mtt_size(struct mthca_dev *dev)
 {
-       if (dev->mr_table.fmr_mtt_buddy != &dev->mr_table.mtt_buddy)
+       if (dev->mr_table.fmr_mtt_buddy != &dev->mr_table.mtt_buddy ||
+           !(dev->mthca_flags & MTHCA_FLAG_FMR))
                /*
                 * Be friendly to WRITE_MTT command
                 * and leave two empty slots for the
@@ -355,7 +356,8 @@ int mthca_write_mtt(struct mthca_dev *dev, struct mthca_mtt *mtt,
        int size = mthca_write_mtt_size(dev);
        int chunk;
 
-       if (dev->mr_table.fmr_mtt_buddy != &dev->mr_table.mtt_buddy)
+       if (dev->mr_table.fmr_mtt_buddy != &dev->mr_table.mtt_buddy ||
+           !(dev->mthca_flags & MTHCA_FLAG_FMR))
                return __mthca_write_mtt(dev, mtt, start_index, buffer_list, list_len);
 
        while (list_len > 0) {
@@ -835,6 +837,7 @@ void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr)
 
        key = arbel_key_to_hw_index(fmr->ibmr.lkey);
        key &= dev->limits.num_mpts - 1;
+       key = adjust_key(dev, key);
        fmr->ibmr.lkey = fmr->ibmr.rkey = arbel_hw_index_to_key(key);
 
        fmr->maps = 0;
@@ -881,8 +884,8 @@ int mthca_init_mr_table(struct mthca_dev *dev)
                }
                mpts = mtts = 1 << i;
        } else {
-               mpts = dev->limits.num_mtt_segs;
-               mtts = dev->limits.num_mpts;
+               mtts = dev->limits.num_mtt_segs;
+               mpts = dev->limits.num_mpts;
        }
 
        if (!mthca_is_memfree(dev) &&