diff options
author | Jack Morgenstein <jackm@dev.mellanox.co.il> | 2007-06-08 02:24:38 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2007-06-08 02:24:38 -0400 |
commit | b2d9308ae43a9cfa56cc9682dc6ed63347a8d2bf (patch) | |
tree | cfffa29e48314d38b23e69e3db94751277ed26d4 /drivers/net/mlx4 | |
parent | fe40900f408642e772739088d30636e2f3f7d0d8 (diff) |
mlx4_core: Don't set MTT address in dMPT entries with PA set
If a dMPT entry has the PA flag (direct physical address) set, then
the (unused) MTT base address field has to be set to 0.
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/net/mlx4')
-rw-r--r-- | drivers/net/mlx4/mr.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/mlx4/mr.c b/drivers/net/mlx4/mr.c index b33864dab179..d0808fa3ec82 100644 --- a/drivers/net/mlx4/mr.c +++ b/drivers/net/mlx4/mr.c | |||
@@ -324,15 +324,17 @@ int mlx4_mr_enable(struct mlx4_dev *dev, struct mlx4_mr *mr) | |||
324 | MLX4_MPT_FLAG_MIO | | 324 | MLX4_MPT_FLAG_MIO | |
325 | MLX4_MPT_FLAG_REGION | | 325 | MLX4_MPT_FLAG_REGION | |
326 | mr->access); | 326 | mr->access); |
327 | if (mr->mtt.order < 0) | ||
328 | mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_PHYSICAL); | ||
329 | 327 | ||
330 | mpt_entry->key = cpu_to_be32(key_to_hw_index(mr->key)); | 328 | mpt_entry->key = cpu_to_be32(key_to_hw_index(mr->key)); |
331 | mpt_entry->pd = cpu_to_be32(mr->pd); | 329 | mpt_entry->pd = cpu_to_be32(mr->pd); |
332 | mpt_entry->start = cpu_to_be64(mr->iova); | 330 | mpt_entry->start = cpu_to_be64(mr->iova); |
333 | mpt_entry->length = cpu_to_be64(mr->size); | 331 | mpt_entry->length = cpu_to_be64(mr->size); |
334 | mpt_entry->entity_size = cpu_to_be32(mr->mtt.page_shift); | 332 | mpt_entry->entity_size = cpu_to_be32(mr->mtt.page_shift); |
335 | mpt_entry->mtt_seg = cpu_to_be64(mlx4_mtt_addr(dev, &mr->mtt)); | 333 | if (mr->mtt.order < 0) { |
334 | mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_PHYSICAL); | ||
335 | mpt_entry->mtt_seg = 0; | ||
336 | } else | ||
337 | mpt_entry->mtt_seg = cpu_to_be64(mlx4_mtt_addr(dev, &mr->mtt)); | ||
336 | 338 | ||
337 | err = mlx4_SW2HW_MPT(dev, mailbox, | 339 | err = mlx4_SW2HW_MPT(dev, mailbox, |
338 | key_to_hw_index(mr->key) & (dev->caps.num_mpts - 1)); | 340 | key_to_hw_index(mr->key) & (dev->caps.num_mpts - 1)); |