net/mlx4_core: Fix mpt_entry initialization in mlx4_mr_rereg_mem_write()
authorMaor Gottlieb <maorg@mellanox.com>
Tue, 3 Feb 2015 15:57:15 +0000 (17:57 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 5 Feb 2015 00:17:45 +0000 (16:17 -0800)
a) Previously, mlx4_mr_rereg_write filled the MPT's start
   and length with the old MPT's values.
   Fixing the initialization to take the new start and length.

b) In addition access flags in mpt_status were initialized instead of
   status due to bad boolean operation. Fixing the operation.

c) Initialization of pd_slave caused a protection error.
   Fix - removing this initialization.

d) In resource_tracker.c: Fixing vf encoding to be one-based.

Fixes: e630664c ('mlx4_core: Add helper functions to support MR re-registration')
Signed-off-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/mr.c
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c

index d21e884a08387c82f6a5f3b58ec2a760aa198ea7..78f51e103880d4dcae7745ec5cb5b2425e370e73 100644 (file)
@@ -598,14 +598,11 @@ int mlx4_mr_rereg_mem_write(struct mlx4_dev *dev, struct mlx4_mr *mr,
        if (err)
                return err;
 
-       mpt_entry->start       = cpu_to_be64(mr->iova);
-       mpt_entry->length      = cpu_to_be64(mr->size);
-       mpt_entry->entity_size = cpu_to_be32(mr->mtt.page_shift);
-
-       mpt_entry->pd_flags &= cpu_to_be32(MLX4_MPT_PD_MASK |
-                                          MLX4_MPT_PD_FLAG_EN_INV);
-       mpt_entry->flags    &= cpu_to_be32(MLX4_MPT_FLAG_FREE |
-                                          MLX4_MPT_FLAG_SW_OWNS);
+       mpt_entry->start       = cpu_to_be64(iova);
+       mpt_entry->length      = cpu_to_be64(size);
+       mpt_entry->entity_size = cpu_to_be32(page_shift);
+       mpt_entry->flags    &= ~(cpu_to_be32(MLX4_MPT_FLAG_FREE |
+                                          MLX4_MPT_FLAG_SW_OWNS));
        if (mr->mtt.order < 0) {
                mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_PHYSICAL);
                mpt_entry->mtt_addr = 0;
index c5f3dfca226b5f9140b12bfac3a908822e4529a1..486e3d26cd4a9ef4bb6a23995b85ac50cd413776 100644 (file)
@@ -2541,7 +2541,7 @@ int mlx4_SW2HW_MPT_wrapper(struct mlx4_dev *dev, int slave,
        /* Make sure that the PD bits related to the slave id are zeros. */
        pd = mr_get_pd(inbox->buf);
        pd_slave = (pd >> 17) & 0x7f;
-       if (pd_slave != 0 && pd_slave != slave) {
+       if (pd_slave != 0 && --pd_slave != slave) {
                err = -EPERM;
                goto ex_abort;
        }