Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=11e75a7455a7bc73e752c0c985986c2b1f8c930a
Commit:     11e75a7455a7bc73e752c0c985986c2b1f8c930a
Parent:     e6028c0e004d334bb9ed75d4c918f4c763af1b9f
Author:     Jack Morgenstein <[EMAIL PROTECTED]>
AuthorDate: Thu Feb 14 13:41:29 2008 +0200
Committer:  Roland Dreier <[EMAIL PROTECTED]>
CommitDate: Thu Feb 14 10:43:48 2008 -0800

    mlx4_core: Move table_find from fmr_alloc to fmr_enable
    
    mlx4_table_find (for FMR MPTs) requires that ICM memory already be
    mapped.  Before this fix, FMR allocation depended on ICM memory
    already being mapped for the MPT entry.  If all currently mapped
    entries are taken, the find operation fails (even if the MPT ICM table
    still had more entries, which were just not mapped yet).
    
    This fix moves the mpt find operation to fmr_enable, to guarantee that
    any required ICM memory mapping has already occurred.
    
    Found by Oren Duer of Mellanox.
    
    Signed-off-by: Jack Morgenstein <[EMAIL PROTECTED]>
    Signed-off-by: Roland Dreier <[EMAIL PROTECTED]>
---
 drivers/net/mlx4/mr.c |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/drivers/net/mlx4/mr.c b/drivers/net/mlx4/mr.c
index 679dfdb..79b317b 100644
--- a/drivers/net/mlx4/mr.c
+++ b/drivers/net/mlx4/mr.c
@@ -578,13 +578,6 @@ int mlx4_fmr_alloc(struct mlx4_dev *dev, u32 pd, u32 
access, int max_pages,
                goto err_free;
        }
 
-       fmr->mpt = mlx4_table_find(&priv->mr_table.dmpt_table,
-                                   key_to_hw_index(fmr->mr.key), NULL);
-       if (!fmr->mpt) {
-               err = -ENOMEM;
-               goto err_free;
-       }
-
        return 0;
 
 err_free:
@@ -595,7 +588,19 @@ EXPORT_SYMBOL_GPL(mlx4_fmr_alloc);
 
 int mlx4_fmr_enable(struct mlx4_dev *dev, struct mlx4_fmr *fmr)
 {
-       return mlx4_mr_enable(dev, &fmr->mr);
+       struct mlx4_priv *priv = mlx4_priv(dev);
+       int err;
+
+       err = mlx4_mr_enable(dev, &fmr->mr);
+       if (err)
+               return err;
+
+       fmr->mpt = mlx4_table_find(&priv->mr_table.dmpt_table,
+                                   key_to_hw_index(fmr->mr.key), NULL);
+       if (!fmr->mpt)
+               return -ENOMEM;
+
+       return 0;
 }
 EXPORT_SYMBOL_GPL(mlx4_fmr_enable);
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to