diff options
author | Steve Wise <swise@opengridcomputing.com> | 2008-08-04 14:05:43 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-08-04 14:05:43 -0400 |
commit | 1c355a6e80fd08e623416138631e240f431385f2 (patch) | |
tree | 923c13058b6c21836d8f4990f050c7511bc06ec9 /drivers | |
parent | 5f0f66b022ba607db0a083bf5cc13e4a4336e366 (diff) |
RDMA/cxgb3: Fix up MW access rights
- MWs don't have local read/write permissions.
- Set the MW_BIND enabled bit if a MR has MW_BIND access.
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/infiniband/hw/cxgb3/cxio_hal.c | 6 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch_provider.h | 7 | ||||
-rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch_qp.c | 2 |
3 files changed, 11 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/cxgb3/cxio_hal.c b/drivers/infiniband/hw/cxgb3/cxio_hal.c index f6d5747153a5..4dcf08b3fd83 100644 --- a/drivers/infiniband/hw/cxgb3/cxio_hal.c +++ b/drivers/infiniband/hw/cxgb3/cxio_hal.c | |||
@@ -725,9 +725,9 @@ static int __cxio_tpt_op(struct cxio_rdev *rdev_p, u32 reset_tpt_entry, | |||
725 | V_TPT_STAG_TYPE(type) | V_TPT_PDID(pdid)); | 725 | V_TPT_STAG_TYPE(type) | V_TPT_PDID(pdid)); |
726 | BUG_ON(page_size >= 28); | 726 | BUG_ON(page_size >= 28); |
727 | tpt.flags_pagesize_qpid = cpu_to_be32(V_TPT_PERM(perm) | | 727 | tpt.flags_pagesize_qpid = cpu_to_be32(V_TPT_PERM(perm) | |
728 | F_TPT_MW_BIND_ENABLE | | 728 | ((perm & TPT_MW_BIND) ? F_TPT_MW_BIND_ENABLE : 0) | |
729 | V_TPT_ADDR_TYPE((zbva ? TPT_ZBTO : TPT_VATO)) | | 729 | V_TPT_ADDR_TYPE((zbva ? TPT_ZBTO : TPT_VATO)) | |
730 | V_TPT_PAGE_SIZE(page_size)); | 730 | V_TPT_PAGE_SIZE(page_size)); |
731 | tpt.rsvd_pbl_addr = reset_tpt_entry ? 0 : | 731 | tpt.rsvd_pbl_addr = reset_tpt_entry ? 0 : |
732 | cpu_to_be32(V_TPT_PBL_ADDR(PBL_OFF(rdev_p, pbl_addr)>>3)); | 732 | cpu_to_be32(V_TPT_PBL_ADDR(PBL_OFF(rdev_p, pbl_addr)>>3)); |
733 | tpt.len = cpu_to_be32(len); | 733 | tpt.len = cpu_to_be32(len); |
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.h b/drivers/infiniband/hw/cxgb3/iwch_provider.h index f5ceca05c435..a237d49bdcc9 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_provider.h +++ b/drivers/infiniband/hw/cxgb3/iwch_provider.h | |||
@@ -293,9 +293,16 @@ static inline u32 iwch_ib_to_tpt_access(int acc) | |||
293 | return (acc & IB_ACCESS_REMOTE_WRITE ? TPT_REMOTE_WRITE : 0) | | 293 | return (acc & IB_ACCESS_REMOTE_WRITE ? TPT_REMOTE_WRITE : 0) | |
294 | (acc & IB_ACCESS_REMOTE_READ ? TPT_REMOTE_READ : 0) | | 294 | (acc & IB_ACCESS_REMOTE_READ ? TPT_REMOTE_READ : 0) | |
295 | (acc & IB_ACCESS_LOCAL_WRITE ? TPT_LOCAL_WRITE : 0) | | 295 | (acc & IB_ACCESS_LOCAL_WRITE ? TPT_LOCAL_WRITE : 0) | |
296 | (acc & IB_ACCESS_MW_BIND ? TPT_MW_BIND : 0) | | ||
296 | TPT_LOCAL_READ; | 297 | TPT_LOCAL_READ; |
297 | } | 298 | } |
298 | 299 | ||
300 | static inline u32 iwch_ib_to_tpt_bind_access(int acc) | ||
301 | { | ||
302 | return (acc & IB_ACCESS_REMOTE_WRITE ? TPT_REMOTE_WRITE : 0) | | ||
303 | (acc & IB_ACCESS_REMOTE_READ ? TPT_REMOTE_READ : 0); | ||
304 | } | ||
305 | |||
299 | enum iwch_mmid_state { | 306 | enum iwch_mmid_state { |
300 | IWCH_STAG_STATE_VALID, | 307 | IWCH_STAG_STATE_VALID, |
301 | IWCH_STAG_STATE_INVALID | 308 | IWCH_STAG_STATE_INVALID |
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c index 893971612eda..3e4585c2318a 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_qp.c +++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c | |||
@@ -565,7 +565,7 @@ int iwch_bind_mw(struct ib_qp *qp, | |||
565 | wqe->bind.type = TPT_VATO; | 565 | wqe->bind.type = TPT_VATO; |
566 | 566 | ||
567 | /* TBD: check perms */ | 567 | /* TBD: check perms */ |
568 | wqe->bind.perms = iwch_ib_to_tpt_access(mw_bind->mw_access_flags); | 568 | wqe->bind.perms = iwch_ib_to_tpt_bind_access(mw_bind->mw_access_flags); |
569 | wqe->bind.mr_stag = cpu_to_be32(mw_bind->mr->lkey); | 569 | wqe->bind.mr_stag = cpu_to_be32(mw_bind->mr->lkey); |
570 | wqe->bind.mw_stag = cpu_to_be32(mw->rkey); | 570 | wqe->bind.mw_stag = cpu_to_be32(mw->rkey); |
571 | wqe->bind.mw_len = cpu_to_be32(mw_bind->length); | 571 | wqe->bind.mw_len = cpu_to_be32(mw_bind->length); |