diff options
| -rw-r--r-- | drivers/infiniband/core/uverbs_cmd.c | 13 | ||||
| -rw-r--r-- | drivers/infiniband/hw/amso1100/c2_rnic.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch_provider.c | 3 | ||||
| -rw-r--r-- | drivers/infiniband/hw/cxgb3/iwch_qp.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ehca/ehca_reqs.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_rc.c | 8 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_ruc.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_uc.c | 8 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ipath/ipath_ud.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mlx4/qp.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mthca/mthca_qp.c | 6 | ||||
| -rw-r--r-- | drivers/infiniband/hw/nes/nes_hw.c | 2 | ||||
| -rw-r--r-- | include/rdma/ib_user_verbs.h | 5 | ||||
| -rw-r--r-- | include/rdma/ib_verbs.h | 11 | ||||
| -rw-r--r-- | net/sunrpc/xprtrdma/verbs.c | 1 |
15 files changed, 46 insertions, 31 deletions
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c index 9e98cec6230f..2c3bff5fe867 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c | |||
| @@ -1463,7 +1463,6 @@ ssize_t ib_uverbs_post_send(struct ib_uverbs_file *file, | |||
| 1463 | next->num_sge = user_wr->num_sge; | 1463 | next->num_sge = user_wr->num_sge; |
| 1464 | next->opcode = user_wr->opcode; | 1464 | next->opcode = user_wr->opcode; |
| 1465 | next->send_flags = user_wr->send_flags; | 1465 | next->send_flags = user_wr->send_flags; |
| 1466 | next->imm_data = (__be32 __force) user_wr->imm_data; | ||
| 1467 | 1466 | ||
| 1468 | if (is_ud) { | 1467 | if (is_ud) { |
| 1469 | next->wr.ud.ah = idr_read_ah(user_wr->wr.ud.ah, | 1468 | next->wr.ud.ah = idr_read_ah(user_wr->wr.ud.ah, |
| @@ -1476,14 +1475,24 @@ ssize_t ib_uverbs_post_send(struct ib_uverbs_file *file, | |||
| 1476 | next->wr.ud.remote_qkey = user_wr->wr.ud.remote_qkey; | 1475 | next->wr.ud.remote_qkey = user_wr->wr.ud.remote_qkey; |
| 1477 | } else { | 1476 | } else { |
| 1478 | switch (next->opcode) { | 1477 | switch (next->opcode) { |
| 1479 | case IB_WR_RDMA_WRITE: | ||
| 1480 | case IB_WR_RDMA_WRITE_WITH_IMM: | 1478 | case IB_WR_RDMA_WRITE_WITH_IMM: |
| 1479 | next->ex.imm_data = | ||
| 1480 | (__be32 __force) user_wr->ex.imm_data; | ||
| 1481 | case IB_WR_RDMA_WRITE: | ||
| 1481 | case IB_WR_RDMA_READ: | 1482 | case IB_WR_RDMA_READ: |
| 1482 | next->wr.rdma.remote_addr = | 1483 | next->wr.rdma.remote_addr = |
| 1483 | user_wr->wr.rdma.remote_addr; | 1484 | user_wr->wr.rdma.remote_addr; |
| 1484 | next->wr.rdma.rkey = | 1485 | next->wr.rdma.rkey = |
| 1485 | user_wr->wr.rdma.rkey; | 1486 | user_wr->wr.rdma.rkey; |
| 1486 | break; | 1487 | break; |
| 1488 | case IB_WR_SEND_WITH_IMM: | ||
| 1489 | next->ex.imm_data = | ||
| 1490 | (__be32 __force) user_wr->ex.imm_data; | ||
| 1491 | break; | ||
| 1492 | case IB_WR_SEND_WITH_INV: | ||
| 1493 | next->ex.invalidate_rkey = | ||
| 1494 | user_wr->ex.invalidate_rkey; | ||
| 1495 | break; | ||
| 1487 | case IB_WR_ATOMIC_CMP_AND_SWP: | 1496 | case IB_WR_ATOMIC_CMP_AND_SWP: |
| 1488 | case IB_WR_ATOMIC_FETCH_AND_ADD: | 1497 | case IB_WR_ATOMIC_FETCH_AND_ADD: |
| 1489 | next->wr.atomic.remote_addr = | 1498 | next->wr.atomic.remote_addr = |
diff --git a/drivers/infiniband/hw/amso1100/c2_rnic.c b/drivers/infiniband/hw/amso1100/c2_rnic.c index 7a625524e0c5..b1441aeb60c2 100644 --- a/drivers/infiniband/hw/amso1100/c2_rnic.c +++ b/drivers/infiniband/hw/amso1100/c2_rnic.c | |||
| @@ -455,7 +455,7 @@ int __devinit c2_rnic_init(struct c2_dev *c2dev) | |||
| 455 | IB_DEVICE_CURR_QP_STATE_MOD | | 455 | IB_DEVICE_CURR_QP_STATE_MOD | |
| 456 | IB_DEVICE_SYS_IMAGE_GUID | | 456 | IB_DEVICE_SYS_IMAGE_GUID | |
| 457 | IB_DEVICE_ZERO_STAG | | 457 | IB_DEVICE_ZERO_STAG | |
| 458 | IB_DEVICE_SEND_W_INV | IB_DEVICE_MEM_WINDOW); | 458 | IB_DEVICE_MEM_WINDOW); |
| 459 | 459 | ||
| 460 | /* Allocate the qptr_array */ | 460 | /* Allocate the qptr_array */ |
| 461 | c2dev->qptr_array = vmalloc(C2_MAX_CQS * sizeof(void *)); | 461 | c2dev->qptr_array = vmalloc(C2_MAX_CQS * sizeof(void *)); |
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c index 50e1f2a16e0c..ca7265443c05 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_provider.c +++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c | |||
| @@ -1109,8 +1109,7 @@ int iwch_register_device(struct iwch_dev *dev) | |||
| 1109 | memcpy(&dev->ibdev.node_guid, dev->rdev.t3cdev_p->lldev->dev_addr, 6); | 1109 | memcpy(&dev->ibdev.node_guid, dev->rdev.t3cdev_p->lldev->dev_addr, 6); |
| 1110 | dev->ibdev.owner = THIS_MODULE; | 1110 | dev->ibdev.owner = THIS_MODULE; |
| 1111 | dev->device_cap_flags = | 1111 | dev->device_cap_flags = |
| 1112 | (IB_DEVICE_ZERO_STAG | | 1112 | (IB_DEVICE_ZERO_STAG | IB_DEVICE_MEM_WINDOW); |
| 1113 | IB_DEVICE_SEND_W_INV | IB_DEVICE_MEM_WINDOW); | ||
| 1114 | 1113 | ||
| 1115 | dev->ibdev.uverbs_cmd_mask = | 1114 | dev->ibdev.uverbs_cmd_mask = |
| 1116 | (1ull << IB_USER_VERBS_CMD_GET_CONTEXT) | | 1115 | (1ull << IB_USER_VERBS_CMD_GET_CONTEXT) | |
diff --git a/drivers/infiniband/hw/cxgb3/iwch_qp.c b/drivers/infiniband/hw/cxgb3/iwch_qp.c index bc5d9b0813e5..8891c3b0a3d5 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_qp.c +++ b/drivers/infiniband/hw/cxgb3/iwch_qp.c | |||
| @@ -72,7 +72,7 @@ static int iwch_build_rdma_send(union t3_wr *wqe, struct ib_send_wr *wr, | |||
| 72 | wqe->send.reserved[2] = 0; | 72 | wqe->send.reserved[2] = 0; |
| 73 | if (wr->opcode == IB_WR_SEND_WITH_IMM) { | 73 | if (wr->opcode == IB_WR_SEND_WITH_IMM) { |
| 74 | plen = 4; | 74 | plen = 4; |
| 75 | wqe->send.sgl[0].stag = wr->imm_data; | 75 | wqe->send.sgl[0].stag = wr->ex.imm_data; |
| 76 | wqe->send.sgl[0].len = __constant_cpu_to_be32(0); | 76 | wqe->send.sgl[0].len = __constant_cpu_to_be32(0); |
| 77 | wqe->send.num_sgle = __constant_cpu_to_be32(0); | 77 | wqe->send.num_sgle = __constant_cpu_to_be32(0); |
| 78 | *flit_cnt = 5; | 78 | *flit_cnt = 5; |
| @@ -112,7 +112,7 @@ static int iwch_build_rdma_write(union t3_wr *wqe, struct ib_send_wr *wr, | |||
| 112 | 112 | ||
| 113 | if (wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) { | 113 | if (wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) { |
| 114 | plen = 4; | 114 | plen = 4; |
| 115 | wqe->write.sgl[0].stag = wr->imm_data; | 115 | wqe->write.sgl[0].stag = wr->ex.imm_data; |
| 116 | wqe->write.sgl[0].len = __constant_cpu_to_be32(0); | 116 | wqe->write.sgl[0].len = __constant_cpu_to_be32(0); |
| 117 | wqe->write.num_sgle = __constant_cpu_to_be32(0); | 117 | wqe->write.num_sgle = __constant_cpu_to_be32(0); |
| 118 | *flit_cnt = 6; | 118 | *flit_cnt = 6; |
diff --git a/drivers/infiniband/hw/ehca/ehca_reqs.c b/drivers/infiniband/hw/ehca/ehca_reqs.c index 2ce8cffb8664..a20bbf466188 100644 --- a/drivers/infiniband/hw/ehca/ehca_reqs.c +++ b/drivers/infiniband/hw/ehca/ehca_reqs.c | |||
| @@ -188,7 +188,7 @@ static inline int ehca_write_swqe(struct ehca_qp *qp, | |||
| 188 | if (send_wr->opcode == IB_WR_SEND_WITH_IMM || | 188 | if (send_wr->opcode == IB_WR_SEND_WITH_IMM || |
| 189 | send_wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) { | 189 | send_wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) { |
| 190 | /* this might not work as long as HW does not support it */ | 190 | /* this might not work as long as HW does not support it */ |
| 191 | wqe_p->immediate_data = be32_to_cpu(send_wr->imm_data); | 191 | wqe_p->immediate_data = be32_to_cpu(send_wr->ex.imm_data); |
| 192 | wqe_p->wr_flag |= WQE_WRFLAG_IMM_DATA_PRESENT; | 192 | wqe_p->wr_flag |= WQE_WRFLAG_IMM_DATA_PRESENT; |
| 193 | } | 193 | } |
| 194 | 194 | ||
diff --git a/drivers/infiniband/hw/ipath/ipath_rc.c b/drivers/infiniband/hw/ipath/ipath_rc.c index 467981905bbe..c405dfba5531 100644 --- a/drivers/infiniband/hw/ipath/ipath_rc.c +++ b/drivers/infiniband/hw/ipath/ipath_rc.c | |||
| @@ -308,7 +308,7 @@ int ipath_make_rc_req(struct ipath_qp *qp) | |||
| 308 | else { | 308 | else { |
| 309 | qp->s_state = OP(SEND_ONLY_WITH_IMMEDIATE); | 309 | qp->s_state = OP(SEND_ONLY_WITH_IMMEDIATE); |
| 310 | /* Immediate data comes after the BTH */ | 310 | /* Immediate data comes after the BTH */ |
| 311 | ohdr->u.imm_data = wqe->wr.imm_data; | 311 | ohdr->u.imm_data = wqe->wr.ex.imm_data; |
| 312 | hwords += 1; | 312 | hwords += 1; |
| 313 | } | 313 | } |
| 314 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) | 314 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) |
| @@ -346,7 +346,7 @@ int ipath_make_rc_req(struct ipath_qp *qp) | |||
| 346 | qp->s_state = | 346 | qp->s_state = |
| 347 | OP(RDMA_WRITE_ONLY_WITH_IMMEDIATE); | 347 | OP(RDMA_WRITE_ONLY_WITH_IMMEDIATE); |
| 348 | /* Immediate data comes after RETH */ | 348 | /* Immediate data comes after RETH */ |
| 349 | ohdr->u.rc.imm_data = wqe->wr.imm_data; | 349 | ohdr->u.rc.imm_data = wqe->wr.ex.imm_data; |
| 350 | hwords += 1; | 350 | hwords += 1; |
| 351 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) | 351 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) |
| 352 | bth0 |= 1 << 23; | 352 | bth0 |= 1 << 23; |
| @@ -490,7 +490,7 @@ int ipath_make_rc_req(struct ipath_qp *qp) | |||
| 490 | else { | 490 | else { |
| 491 | qp->s_state = OP(SEND_LAST_WITH_IMMEDIATE); | 491 | qp->s_state = OP(SEND_LAST_WITH_IMMEDIATE); |
| 492 | /* Immediate data comes after the BTH */ | 492 | /* Immediate data comes after the BTH */ |
| 493 | ohdr->u.imm_data = wqe->wr.imm_data; | 493 | ohdr->u.imm_data = wqe->wr.ex.imm_data; |
| 494 | hwords += 1; | 494 | hwords += 1; |
| 495 | } | 495 | } |
| 496 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) | 496 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) |
| @@ -526,7 +526,7 @@ int ipath_make_rc_req(struct ipath_qp *qp) | |||
| 526 | else { | 526 | else { |
| 527 | qp->s_state = OP(RDMA_WRITE_LAST_WITH_IMMEDIATE); | 527 | qp->s_state = OP(RDMA_WRITE_LAST_WITH_IMMEDIATE); |
| 528 | /* Immediate data comes after the BTH */ | 528 | /* Immediate data comes after the BTH */ |
| 529 | ohdr->u.imm_data = wqe->wr.imm_data; | 529 | ohdr->u.imm_data = wqe->wr.ex.imm_data; |
| 530 | hwords += 1; | 530 | hwords += 1; |
| 531 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) | 531 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) |
| 532 | bth0 |= 1 << 23; | 532 | bth0 |= 1 << 23; |
diff --git a/drivers/infiniband/hw/ipath/ipath_ruc.c b/drivers/infiniband/hw/ipath/ipath_ruc.c index bcaa2914e341..8ac5c1d82ccd 100644 --- a/drivers/infiniband/hw/ipath/ipath_ruc.c +++ b/drivers/infiniband/hw/ipath/ipath_ruc.c | |||
| @@ -310,7 +310,7 @@ again: | |||
| 310 | switch (wqe->wr.opcode) { | 310 | switch (wqe->wr.opcode) { |
| 311 | case IB_WR_SEND_WITH_IMM: | 311 | case IB_WR_SEND_WITH_IMM: |
| 312 | wc.wc_flags = IB_WC_WITH_IMM; | 312 | wc.wc_flags = IB_WC_WITH_IMM; |
| 313 | wc.imm_data = wqe->wr.imm_data; | 313 | wc.imm_data = wqe->wr.ex.imm_data; |
| 314 | /* FALLTHROUGH */ | 314 | /* FALLTHROUGH */ |
| 315 | case IB_WR_SEND: | 315 | case IB_WR_SEND: |
| 316 | if (!ipath_get_rwqe(qp, 0)) { | 316 | if (!ipath_get_rwqe(qp, 0)) { |
| @@ -339,7 +339,7 @@ again: | |||
| 339 | goto err; | 339 | goto err; |
| 340 | } | 340 | } |
| 341 | wc.wc_flags = IB_WC_WITH_IMM; | 341 | wc.wc_flags = IB_WC_WITH_IMM; |
| 342 | wc.imm_data = wqe->wr.imm_data; | 342 | wc.imm_data = wqe->wr.ex.imm_data; |
| 343 | if (!ipath_get_rwqe(qp, 1)) | 343 | if (!ipath_get_rwqe(qp, 1)) |
| 344 | goto rnr_nak; | 344 | goto rnr_nak; |
| 345 | /* FALLTHROUGH */ | 345 | /* FALLTHROUGH */ |
diff --git a/drivers/infiniband/hw/ipath/ipath_uc.c b/drivers/infiniband/hw/ipath/ipath_uc.c index 2dd8de20d221..bfe8926b5514 100644 --- a/drivers/infiniband/hw/ipath/ipath_uc.c +++ b/drivers/infiniband/hw/ipath/ipath_uc.c | |||
| @@ -94,7 +94,7 @@ int ipath_make_uc_req(struct ipath_qp *qp) | |||
| 94 | qp->s_state = | 94 | qp->s_state = |
| 95 | OP(SEND_ONLY_WITH_IMMEDIATE); | 95 | OP(SEND_ONLY_WITH_IMMEDIATE); |
| 96 | /* Immediate data comes after the BTH */ | 96 | /* Immediate data comes after the BTH */ |
| 97 | ohdr->u.imm_data = wqe->wr.imm_data; | 97 | ohdr->u.imm_data = wqe->wr.ex.imm_data; |
| 98 | hwords += 1; | 98 | hwords += 1; |
| 99 | } | 99 | } |
| 100 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) | 100 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) |
| @@ -123,7 +123,7 @@ int ipath_make_uc_req(struct ipath_qp *qp) | |||
| 123 | qp->s_state = | 123 | qp->s_state = |
| 124 | OP(RDMA_WRITE_ONLY_WITH_IMMEDIATE); | 124 | OP(RDMA_WRITE_ONLY_WITH_IMMEDIATE); |
| 125 | /* Immediate data comes after the RETH */ | 125 | /* Immediate data comes after the RETH */ |
| 126 | ohdr->u.rc.imm_data = wqe->wr.imm_data; | 126 | ohdr->u.rc.imm_data = wqe->wr.ex.imm_data; |
| 127 | hwords += 1; | 127 | hwords += 1; |
| 128 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) | 128 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) |
| 129 | bth0 |= 1 << 23; | 129 | bth0 |= 1 << 23; |
| @@ -152,7 +152,7 @@ int ipath_make_uc_req(struct ipath_qp *qp) | |||
| 152 | else { | 152 | else { |
| 153 | qp->s_state = OP(SEND_LAST_WITH_IMMEDIATE); | 153 | qp->s_state = OP(SEND_LAST_WITH_IMMEDIATE); |
| 154 | /* Immediate data comes after the BTH */ | 154 | /* Immediate data comes after the BTH */ |
| 155 | ohdr->u.imm_data = wqe->wr.imm_data; | 155 | ohdr->u.imm_data = wqe->wr.ex.imm_data; |
| 156 | hwords += 1; | 156 | hwords += 1; |
| 157 | } | 157 | } |
| 158 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) | 158 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) |
| @@ -177,7 +177,7 @@ int ipath_make_uc_req(struct ipath_qp *qp) | |||
| 177 | qp->s_state = | 177 | qp->s_state = |
| 178 | OP(RDMA_WRITE_LAST_WITH_IMMEDIATE); | 178 | OP(RDMA_WRITE_LAST_WITH_IMMEDIATE); |
| 179 | /* Immediate data comes after the BTH */ | 179 | /* Immediate data comes after the BTH */ |
| 180 | ohdr->u.imm_data = wqe->wr.imm_data; | 180 | ohdr->u.imm_data = wqe->wr.ex.imm_data; |
| 181 | hwords += 1; | 181 | hwords += 1; |
| 182 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) | 182 | if (wqe->wr.send_flags & IB_SEND_SOLICITED) |
| 183 | bth0 |= 1 << 23; | 183 | bth0 |= 1 << 23; |
diff --git a/drivers/infiniband/hw/ipath/ipath_ud.c b/drivers/infiniband/hw/ipath/ipath_ud.c index 918f52070653..8b6a261c89e3 100644 --- a/drivers/infiniband/hw/ipath/ipath_ud.c +++ b/drivers/infiniband/hw/ipath/ipath_ud.c | |||
| @@ -95,7 +95,7 @@ static void ipath_ud_loopback(struct ipath_qp *sqp, struct ipath_swqe *swqe) | |||
| 95 | 95 | ||
| 96 | if (swqe->wr.opcode == IB_WR_SEND_WITH_IMM) { | 96 | if (swqe->wr.opcode == IB_WR_SEND_WITH_IMM) { |
| 97 | wc.wc_flags = IB_WC_WITH_IMM; | 97 | wc.wc_flags = IB_WC_WITH_IMM; |
| 98 | wc.imm_data = swqe->wr.imm_data; | 98 | wc.imm_data = swqe->wr.ex.imm_data; |
| 99 | } else { | 99 | } else { |
| 100 | wc.wc_flags = 0; | 100 | wc.wc_flags = 0; |
| 101 | wc.imm_data = 0; | 101 | wc.imm_data = 0; |
| @@ -327,7 +327,7 @@ int ipath_make_ud_req(struct ipath_qp *qp) | |||
| 327 | } | 327 | } |
| 328 | if (wqe->wr.opcode == IB_WR_SEND_WITH_IMM) { | 328 | if (wqe->wr.opcode == IB_WR_SEND_WITH_IMM) { |
| 329 | qp->s_hdrwords++; | 329 | qp->s_hdrwords++; |
| 330 | ohdr->u.ud.imm_data = wqe->wr.imm_data; | 330 | ohdr->u.ud.imm_data = wqe->wr.ex.imm_data; |
| 331 | bth0 = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE << 24; | 331 | bth0 = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE << 24; |
| 332 | } else | 332 | } else |
| 333 | bth0 = IB_OPCODE_UD_SEND_ONLY << 24; | 333 | bth0 = IB_OPCODE_UD_SEND_ONLY << 24; |
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index f5210c17e312..38e651a67589 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c | |||
| @@ -1249,7 +1249,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr, | |||
| 1249 | case IB_WR_SEND_WITH_IMM: | 1249 | case IB_WR_SEND_WITH_IMM: |
| 1250 | sqp->ud_header.bth.opcode = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE; | 1250 | sqp->ud_header.bth.opcode = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE; |
| 1251 | sqp->ud_header.immediate_present = 1; | 1251 | sqp->ud_header.immediate_present = 1; |
| 1252 | sqp->ud_header.immediate_data = wr->imm_data; | 1252 | sqp->ud_header.immediate_data = wr->ex.imm_data; |
| 1253 | break; | 1253 | break; |
| 1254 | default: | 1254 | default: |
| 1255 | return -EINVAL; | 1255 | return -EINVAL; |
| @@ -1492,7 +1492,7 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
| 1492 | 1492 | ||
| 1493 | if (wr->opcode == IB_WR_SEND_WITH_IMM || | 1493 | if (wr->opcode == IB_WR_SEND_WITH_IMM || |
| 1494 | wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) | 1494 | wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) |
| 1495 | ctrl->imm = wr->imm_data; | 1495 | ctrl->imm = wr->ex.imm_data; |
| 1496 | else | 1496 | else |
| 1497 | ctrl->imm = 0; | 1497 | ctrl->imm = 0; |
| 1498 | 1498 | ||
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c index 8433897624bc..b3fd6b05d79d 100644 --- a/drivers/infiniband/hw/mthca/mthca_qp.c +++ b/drivers/infiniband/hw/mthca/mthca_qp.c | |||
| @@ -1532,7 +1532,7 @@ static int build_mlx_header(struct mthca_dev *dev, struct mthca_sqp *sqp, | |||
| 1532 | case IB_WR_SEND_WITH_IMM: | 1532 | case IB_WR_SEND_WITH_IMM: |
| 1533 | sqp->ud_header.bth.opcode = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE; | 1533 | sqp->ud_header.bth.opcode = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE; |
| 1534 | sqp->ud_header.immediate_present = 1; | 1534 | sqp->ud_header.immediate_present = 1; |
| 1535 | sqp->ud_header.immediate_data = wr->imm_data; | 1535 | sqp->ud_header.immediate_data = wr->ex.imm_data; |
| 1536 | break; | 1536 | break; |
| 1537 | default: | 1537 | default: |
| 1538 | return -EINVAL; | 1538 | return -EINVAL; |
| @@ -1679,7 +1679,7 @@ int mthca_tavor_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
| 1679 | cpu_to_be32(1); | 1679 | cpu_to_be32(1); |
| 1680 | if (wr->opcode == IB_WR_SEND_WITH_IMM || | 1680 | if (wr->opcode == IB_WR_SEND_WITH_IMM || |
| 1681 | wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) | 1681 | wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) |
| 1682 | ((struct mthca_next_seg *) wqe)->imm = wr->imm_data; | 1682 | ((struct mthca_next_seg *) wqe)->imm = wr->ex.imm_data; |
| 1683 | 1683 | ||
| 1684 | wqe += sizeof (struct mthca_next_seg); | 1684 | wqe += sizeof (struct mthca_next_seg); |
| 1685 | size = sizeof (struct mthca_next_seg) / 16; | 1685 | size = sizeof (struct mthca_next_seg) / 16; |
| @@ -2020,7 +2020,7 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
| 2020 | cpu_to_be32(1); | 2020 | cpu_to_be32(1); |
| 2021 | if (wr->opcode == IB_WR_SEND_WITH_IMM || | 2021 | if (wr->opcode == IB_WR_SEND_WITH_IMM || |
| 2022 | wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) | 2022 | wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM) |
| 2023 | ((struct mthca_next_seg *) wqe)->imm = wr->imm_data; | 2023 | ((struct mthca_next_seg *) wqe)->imm = wr->ex.imm_data; |
| 2024 | 2024 | ||
| 2025 | wqe += sizeof (struct mthca_next_seg); | 2025 | wqe += sizeof (struct mthca_next_seg); |
| 2026 | size = sizeof (struct mthca_next_seg) / 16; | 2026 | size = sizeof (struct mthca_next_seg) / 16; |
diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c index 134189d77ed3..aa53aab91bf8 100644 --- a/drivers/infiniband/hw/nes/nes_hw.c +++ b/drivers/infiniband/hw/nes/nes_hw.c | |||
| @@ -393,7 +393,7 @@ struct nes_adapter *nes_init_adapter(struct nes_device *nesdev, u8 hw_rev) { | |||
| 393 | nesadapter->base_pd = 1; | 393 | nesadapter->base_pd = 1; |
| 394 | 394 | ||
| 395 | nesadapter->device_cap_flags = | 395 | nesadapter->device_cap_flags = |
| 396 | IB_DEVICE_ZERO_STAG | IB_DEVICE_SEND_W_INV | IB_DEVICE_MEM_WINDOW; | 396 | IB_DEVICE_ZERO_STAG | IB_DEVICE_MEM_WINDOW; |
| 397 | 397 | ||
| 398 | nesadapter->allocated_qps = (unsigned long *)&(((unsigned char *)nesadapter) | 398 | nesadapter->allocated_qps = (unsigned long *)&(((unsigned char *)nesadapter) |
| 399 | [(sizeof(struct nes_adapter)+(sizeof(unsigned long)-1))&(~(sizeof(unsigned long)-1))]); | 399 | [(sizeof(struct nes_adapter)+(sizeof(unsigned long)-1))&(~(sizeof(unsigned long)-1))]); |
diff --git a/include/rdma/ib_user_verbs.h b/include/rdma/ib_user_verbs.h index 64a721fcbc1c..8d65bf0a625b 100644 --- a/include/rdma/ib_user_verbs.h +++ b/include/rdma/ib_user_verbs.h | |||
| @@ -533,7 +533,10 @@ struct ib_uverbs_send_wr { | |||
| 533 | __u32 num_sge; | 533 | __u32 num_sge; |
| 534 | __u32 opcode; | 534 | __u32 opcode; |
| 535 | __u32 send_flags; | 535 | __u32 send_flags; |
| 536 | __u32 imm_data; | 536 | union { |
| 537 | __u32 imm_data; | ||
| 538 | __u32 invalidate_rkey; | ||
| 539 | } ex; | ||
| 537 | union { | 540 | union { |
| 538 | struct { | 541 | struct { |
| 539 | __u64 remote_addr; | 542 | __u64 remote_addr; |
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 66928e9cab19..c48f6af5ef9a 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
| @@ -94,7 +94,7 @@ enum ib_device_cap_flags { | |||
| 94 | IB_DEVICE_SRQ_RESIZE = (1<<13), | 94 | IB_DEVICE_SRQ_RESIZE = (1<<13), |
| 95 | IB_DEVICE_N_NOTIFY_CQ = (1<<14), | 95 | IB_DEVICE_N_NOTIFY_CQ = (1<<14), |
| 96 | IB_DEVICE_ZERO_STAG = (1<<15), | 96 | IB_DEVICE_ZERO_STAG = (1<<15), |
| 97 | IB_DEVICE_SEND_W_INV = (1<<16), | 97 | IB_DEVICE_RESERVED = (1<<16), /* old SEND_W_INV */ |
| 98 | IB_DEVICE_MEM_WINDOW = (1<<17), | 98 | IB_DEVICE_MEM_WINDOW = (1<<17), |
| 99 | /* | 99 | /* |
| 100 | * Devices should set IB_DEVICE_UD_IP_SUM if they support | 100 | * Devices should set IB_DEVICE_UD_IP_SUM if they support |
| @@ -105,6 +105,7 @@ enum ib_device_cap_flags { | |||
| 105 | */ | 105 | */ |
| 106 | IB_DEVICE_UD_IP_CSUM = (1<<18), | 106 | IB_DEVICE_UD_IP_CSUM = (1<<18), |
| 107 | IB_DEVICE_UD_TSO = (1<<19), | 107 | IB_DEVICE_UD_TSO = (1<<19), |
| 108 | IB_DEVICE_SEND_W_INV = (1<<21), | ||
| 108 | }; | 109 | }; |
| 109 | 110 | ||
| 110 | enum ib_atomic_cap { | 111 | enum ib_atomic_cap { |
| @@ -625,7 +626,8 @@ enum ib_wr_opcode { | |||
| 625 | IB_WR_RDMA_READ, | 626 | IB_WR_RDMA_READ, |
| 626 | IB_WR_ATOMIC_CMP_AND_SWP, | 627 | IB_WR_ATOMIC_CMP_AND_SWP, |
| 627 | IB_WR_ATOMIC_FETCH_AND_ADD, | 628 | IB_WR_ATOMIC_FETCH_AND_ADD, |
| 628 | IB_WR_LSO | 629 | IB_WR_LSO, |
| 630 | IB_WR_SEND_WITH_INV, | ||
| 629 | }; | 631 | }; |
| 630 | 632 | ||
| 631 | enum ib_send_flags { | 633 | enum ib_send_flags { |
| @@ -649,7 +651,10 @@ struct ib_send_wr { | |||
| 649 | int num_sge; | 651 | int num_sge; |
| 650 | enum ib_wr_opcode opcode; | 652 | enum ib_wr_opcode opcode; |
| 651 | int send_flags; | 653 | int send_flags; |
| 652 | __be32 imm_data; | 654 | union { |
| 655 | __be32 imm_data; | ||
| 656 | u32 invalidate_rkey; | ||
| 657 | } ex; | ||
| 653 | union { | 658 | union { |
| 654 | struct { | 659 | struct { |
| 655 | u64 remote_addr; | 660 | u64 remote_addr; |
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c index ffbf22a1d2ca..8ea283ecc522 100644 --- a/net/sunrpc/xprtrdma/verbs.c +++ b/net/sunrpc/xprtrdma/verbs.c | |||
| @@ -1573,7 +1573,6 @@ rpcrdma_ep_post(struct rpcrdma_ia *ia, | |||
| 1573 | send_wr.sg_list = req->rl_send_iov; | 1573 | send_wr.sg_list = req->rl_send_iov; |
| 1574 | send_wr.num_sge = req->rl_niovs; | 1574 | send_wr.num_sge = req->rl_niovs; |
| 1575 | send_wr.opcode = IB_WR_SEND; | 1575 | send_wr.opcode = IB_WR_SEND; |
| 1576 | send_wr.imm_data = 0; | ||
| 1577 | if (send_wr.num_sge == 4) /* no need to sync any pad (constant) */ | 1576 | if (send_wr.num_sge == 4) /* no need to sync any pad (constant) */ |
| 1578 | ib_dma_sync_single_for_device(ia->ri_id->device, | 1577 | ib_dma_sync_single_for_device(ia->ri_id->device, |
| 1579 | req->rl_send_iov[3].addr, req->rl_send_iov[3].length, | 1578 | req->rl_send_iov[3].addr, req->rl_send_iov[3].length, |
