diff options
| -rw-r--r-- | drivers/infiniband/hw/mlx4/qp.c | 6 | ||||
| -rw-r--r-- | drivers/infiniband/hw/nes/nes_cm.c | 11 | ||||
| -rw-r--r-- | drivers/net/mlx4/mr.c | 10 | ||||
| -rw-r--r-- | include/linux/mlx4/device.h | 4 |
4 files changed, 18 insertions, 13 deletions
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index f29dbb767e87..9559248f265b 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c | |||
| @@ -1342,6 +1342,12 @@ static __be32 convert_access(int acc) | |||
| 1342 | static void set_fmr_seg(struct mlx4_wqe_fmr_seg *fseg, struct ib_send_wr *wr) | 1342 | static void set_fmr_seg(struct mlx4_wqe_fmr_seg *fseg, struct ib_send_wr *wr) |
| 1343 | { | 1343 | { |
| 1344 | struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(wr->wr.fast_reg.page_list); | 1344 | struct mlx4_ib_fast_reg_page_list *mfrpl = to_mfrpl(wr->wr.fast_reg.page_list); |
| 1345 | int i; | ||
| 1346 | |||
| 1347 | for (i = 0; i < wr->wr.fast_reg.page_list_len; ++i) | ||
| 1348 | wr->wr.fast_reg.page_list->page_list[i] = | ||
| 1349 | cpu_to_be64(wr->wr.fast_reg.page_list->page_list[i] | | ||
| 1350 | MLX4_MTT_FLAG_PRESENT); | ||
| 1345 | 1351 | ||
| 1346 | fseg->flags = convert_access(wr->wr.fast_reg.access_flags); | 1352 | fseg->flags = convert_access(wr->wr.fast_reg.access_flags); |
| 1347 | fseg->mem_key = cpu_to_be32(wr->wr.fast_reg.rkey); | 1353 | fseg->mem_key = cpu_to_be32(wr->wr.fast_reg.rkey); |
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index 9f0b964b2c99..499d3cf83e1f 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c | |||
| @@ -1956,13 +1956,6 @@ static int mini_cm_reject(struct nes_cm_core *cm_core, | |||
| 1956 | return ret; | 1956 | return ret; |
| 1957 | cleanup_retrans_entry(cm_node); | 1957 | cleanup_retrans_entry(cm_node); |
| 1958 | cm_node->state = NES_CM_STATE_CLOSED; | 1958 | cm_node->state = NES_CM_STATE_CLOSED; |
| 1959 | ret = send_fin(cm_node, NULL); | ||
| 1960 | |||
| 1961 | if (cm_node->accept_pend) { | ||
| 1962 | BUG_ON(!cm_node->listener); | ||
| 1963 | atomic_dec(&cm_node->listener->pend_accepts_cnt); | ||
| 1964 | BUG_ON(atomic_read(&cm_node->listener->pend_accepts_cnt) < 0); | ||
| 1965 | } | ||
| 1966 | 1959 | ||
| 1967 | ret = send_reset(cm_node, NULL); | 1960 | ret = send_reset(cm_node, NULL); |
| 1968 | return ret; | 1961 | return ret; |
| @@ -2383,6 +2376,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) | |||
| 2383 | atomic_inc(&cm_disconnects); | 2376 | atomic_inc(&cm_disconnects); |
| 2384 | cm_event.event = IW_CM_EVENT_DISCONNECT; | 2377 | cm_event.event = IW_CM_EVENT_DISCONNECT; |
| 2385 | if (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET) { | 2378 | if (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET) { |
| 2379 | issued_disconnect_reset = 1; | ||
| 2386 | cm_event.status = IW_CM_EVENT_STATUS_RESET; | 2380 | cm_event.status = IW_CM_EVENT_STATUS_RESET; |
| 2387 | nes_debug(NES_DBG_CM, "Generating a CM " | 2381 | nes_debug(NES_DBG_CM, "Generating a CM " |
| 2388 | "Disconnect Event (status reset) for " | 2382 | "Disconnect Event (status reset) for " |
| @@ -2508,7 +2502,6 @@ static int nes_disconnect(struct nes_qp *nesqp, int abrupt) | |||
| 2508 | nes_debug(NES_DBG_CM, "Call close API\n"); | 2502 | nes_debug(NES_DBG_CM, "Call close API\n"); |
| 2509 | 2503 | ||
| 2510 | g_cm_core->api->close(g_cm_core, nesqp->cm_node); | 2504 | g_cm_core->api->close(g_cm_core, nesqp->cm_node); |
| 2511 | nesqp->cm_node = NULL; | ||
| 2512 | } | 2505 | } |
| 2513 | 2506 | ||
| 2514 | return ret; | 2507 | return ret; |
| @@ -2837,6 +2830,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) | |||
| 2837 | cm_node->apbvt_set = 1; | 2830 | cm_node->apbvt_set = 1; |
| 2838 | nesqp->cm_node = cm_node; | 2831 | nesqp->cm_node = cm_node; |
| 2839 | cm_node->nesqp = nesqp; | 2832 | cm_node->nesqp = nesqp; |
| 2833 | nes_add_ref(&nesqp->ibqp); | ||
| 2840 | 2834 | ||
| 2841 | return 0; | 2835 | return 0; |
| 2842 | } | 2836 | } |
| @@ -3167,7 +3161,6 @@ static void cm_event_connect_error(struct nes_cm_event *event) | |||
| 3167 | if (ret) | 3161 | if (ret) |
| 3168 | printk(KERN_ERR "%s[%u] OFA CM event_handler returned, " | 3162 | printk(KERN_ERR "%s[%u] OFA CM event_handler returned, " |
| 3169 | "ret=%d\n", __func__, __LINE__, ret); | 3163 | "ret=%d\n", __func__, __LINE__, ret); |
| 3170 | nes_rem_ref(&nesqp->ibqp); | ||
| 3171 | cm_id->rem_ref(cm_id); | 3164 | cm_id->rem_ref(cm_id); |
| 3172 | 3165 | ||
| 3173 | rem_ref_cm_node(event->cm_node->cm_core, event->cm_node); | 3166 | rem_ref_cm_node(event->cm_node->cm_core, event->cm_node); |
diff --git a/drivers/net/mlx4/mr.c b/drivers/net/mlx4/mr.c index 62071d9c4a55..d1dd5b48dbd1 100644 --- a/drivers/net/mlx4/mr.c +++ b/drivers/net/mlx4/mr.c | |||
| @@ -67,11 +67,10 @@ struct mlx4_mpt_entry { | |||
| 67 | #define MLX4_MPT_FLAG_PHYSICAL (1 << 9) | 67 | #define MLX4_MPT_FLAG_PHYSICAL (1 << 9) |
| 68 | #define MLX4_MPT_FLAG_REGION (1 << 8) | 68 | #define MLX4_MPT_FLAG_REGION (1 << 8) |
| 69 | 69 | ||
| 70 | #define MLX4_MPT_PD_FLAG_FAST_REG (1 << 26) | 70 | #define MLX4_MPT_PD_FLAG_FAST_REG (1 << 27) |
| 71 | #define MLX4_MPT_PD_FLAG_RAE (1 << 28) | ||
| 71 | #define MLX4_MPT_PD_FLAG_EN_INV (3 << 24) | 72 | #define MLX4_MPT_PD_FLAG_EN_INV (3 << 24) |
| 72 | 73 | ||
| 73 | #define MLX4_MTT_FLAG_PRESENT 1 | ||
| 74 | |||
| 75 | #define MLX4_MPT_STATUS_SW 0xF0 | 74 | #define MLX4_MPT_STATUS_SW 0xF0 |
| 76 | #define MLX4_MPT_STATUS_HW 0x00 | 75 | #define MLX4_MPT_STATUS_HW 0x00 |
| 77 | 76 | ||
| @@ -348,7 +347,10 @@ int mlx4_mr_enable(struct mlx4_dev *dev, struct mlx4_mr *mr) | |||
| 348 | if (mr->mtt.order >= 0 && mr->mtt.page_shift == 0) { | 347 | if (mr->mtt.order >= 0 && mr->mtt.page_shift == 0) { |
| 349 | /* fast register MR in free state */ | 348 | /* fast register MR in free state */ |
| 350 | mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_FREE); | 349 | mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_FREE); |
| 351 | mpt_entry->pd_flags |= cpu_to_be32(MLX4_MPT_PD_FLAG_FAST_REG); | 350 | mpt_entry->pd_flags |= cpu_to_be32(MLX4_MPT_PD_FLAG_FAST_REG | |
| 351 | MLX4_MPT_PD_FLAG_RAE); | ||
| 352 | mpt_entry->mtt_sz = cpu_to_be32((1 << mr->mtt.order) * | ||
| 353 | MLX4_MTT_ENTRY_PER_SEG); | ||
| 352 | } else { | 354 | } else { |
| 353 | mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_SW_OWNS); | 355 | mpt_entry->flags |= cpu_to_be32(MLX4_MPT_FLAG_SW_OWNS); |
| 354 | } | 356 | } |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index 655ea0d1ee14..b2f944468313 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
| @@ -141,6 +141,10 @@ enum { | |||
| 141 | MLX4_STAT_RATE_OFFSET = 5 | 141 | MLX4_STAT_RATE_OFFSET = 5 |
| 142 | }; | 142 | }; |
| 143 | 143 | ||
| 144 | enum { | ||
| 145 | MLX4_MTT_FLAG_PRESENT = 1 | ||
| 146 | }; | ||
| 147 | |||
| 144 | static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor) | 148 | static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor) |
| 145 | { | 149 | { |
| 146 | return (major << 32) | (minor << 16) | subminor; | 150 | return (major << 32) | (minor << 16) | subminor; |
