1 /* QLogic qedr NIC Driver 2 * Copyright (c) 2015-2016 QLogic Corporation 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: 9 * 10 * Redistribution and use in source and binary forms, with or 11 * without modification, are permitted provided that the following 12 * conditions are met: 13 * 14 * - Redistributions of source code must retain the above 15 * copyright notice, this list of conditions and the following 16 * disclaimer. 17 * 18 * - Redistributions in binary form must reproduce the above 19 * copyright notice, this list of conditions and the following 20 * disclaimer in the documentation and /or other materials 21 * provided with the distribution. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 * SOFTWARE. 31 */ 32 #include <linux/dma-mapping.h> 33 #include <linux/crc32.h> 34 #include <net/ip.h> 35 #include <net/ipv6.h> 36 #include <net/udp.h> 37 #include <linux/iommu.h> 38 39 #include <rdma/ib_verbs.h> 40 #include <rdma/ib_user_verbs.h> 41 #include <rdma/iw_cm.h> 42 #include <rdma/ib_umem.h> 43 #include <rdma/ib_addr.h> 44 #include <rdma/ib_cache.h> 45 #include <rdma/uverbs_ioctl.h> 46 47 #include <linux/qed/common_hsi.h> 48 #include "qedr_hsi_rdma.h" 49 #include <linux/qed/qed_if.h> 50 #include "qedr.h" 51 #include "verbs.h" 52 #include <rdma/qedr-abi.h> 53 #include "qedr_roce_cm.h" 54 #include "qedr_iw_cm.h" 55 56 #define QEDR_SRQ_WQE_ELEM_SIZE sizeof(union rdma_srq_elm) 57 #define RDMA_MAX_SGE_PER_SRQ (4) 58 #define RDMA_MAX_SRQ_WQE_SIZE (RDMA_MAX_SGE_PER_SRQ + 1) 59 60 #define DB_ADDR_SHIFT(addr) ((addr) << DB_PWM_ADDR_OFFSET_SHIFT) 61 62 enum { 63 QEDR_USER_MMAP_IO_WC = 0, 64 QEDR_USER_MMAP_PHYS_PAGE, 65 }; 66 67 static inline int qedr_ib_copy_to_udata(struct ib_udata *udata, void *src, 68 size_t len) 69 { 70 size_t min_len = min_t(size_t, len, udata->outlen); 71 72 return ib_copy_to_udata(udata, src, min_len); 73 } 74 75 int qedr_query_pkey(struct ib_device *ibdev, u8 port, u16 index, u16 *pkey) 76 { 77 if (index >= QEDR_ROCE_PKEY_TABLE_LEN) 78 return -EINVAL; 79 80 *pkey = QEDR_ROCE_PKEY_DEFAULT; 81 return 0; 82 } 83 84 int qedr_iw_query_gid(struct ib_device *ibdev, u8 port, 85 int index, union ib_gid *sgid) 86 { 87 struct qedr_dev *dev = get_qedr_dev(ibdev); 88 89 memset(sgid->raw, 0, sizeof(sgid->raw)); 90 ether_addr_copy(sgid->raw, dev->ndev->dev_addr); 91 92 DP_DEBUG(dev, QEDR_MSG_INIT, "QUERY sgid[%d]=%llx:%llx\n", index, 93 sgid->global.interface_id, sgid->global.subnet_prefix); 94 95 return 0; 96 } 97 98 int qedr_query_srq(struct ib_srq *ibsrq, struct ib_srq_attr *srq_attr) 99 { 100 struct qedr_dev *dev = get_qedr_dev(ibsrq->device); 101 struct qedr_device_attr *qattr = &dev->attr; 102 struct qedr_srq *srq = get_qedr_srq(ibsrq); 103 104 srq_attr->srq_limit = srq->srq_limit; 105 srq_attr->max_wr = qattr->max_srq_wr; 106 srq_attr->max_sge = qattr->max_sge; 107 108 return 0; 109 } 110 111 int qedr_query_device(struct ib_device *ibdev, 112 struct ib_device_attr *attr, struct ib_udata *udata) 113 { 114 struct qedr_dev *dev = get_qedr_dev(ibdev); 115 struct qedr_device_attr *qattr = &dev->attr; 116 117 if (!dev->rdma_ctx) { 118 DP_ERR(dev, 119 "qedr_query_device called with invalid params rdma_ctx=%p\n", 120 dev->rdma_ctx); 121 return -EINVAL; 122 } 123 124 memset(attr, 0, sizeof(*attr)); 125 126 attr->fw_ver = qattr->fw_ver; 127 attr->sys_image_guid = qattr->sys_image_guid; 128 attr->max_mr_size = qattr->max_mr_size; 129 attr->page_size_cap = qattr->page_size_caps; 130 attr->vendor_id = qattr->vendor_id; 131 attr->vendor_part_id = qattr->vendor_part_id; 132 attr->hw_ver = qattr->hw_ver; 133 attr->max_qp = qattr->max_qp; 134 attr->max_qp_wr = max_t(u32, qattr->max_sqe, qattr->max_rqe); 135 attr->device_cap_flags = IB_DEVICE_CURR_QP_STATE_MOD | 136 IB_DEVICE_RC_RNR_NAK_GEN | 137 IB_DEVICE_LOCAL_DMA_LKEY | IB_DEVICE_MEM_MGT_EXTENSIONS; 138 139 if (!rdma_protocol_iwarp(&dev->ibdev, 1)) 140 attr->device_cap_flags |= IB_DEVICE_XRC; 141 attr->max_send_sge = qattr->max_sge; 142 attr->max_recv_sge = qattr->max_sge; 143 attr->max_sge_rd = qattr->max_sge; 144 attr->max_cq = qattr->max_cq; 145 attr->max_cqe = qattr->max_cqe; 146 attr->max_mr = qattr->max_mr; 147 attr->max_mw = qattr->max_mw; 148 attr->max_pd = qattr->max_pd; 149 attr->atomic_cap = dev->atomic_cap; 150 attr->max_qp_init_rd_atom = 151 1 << (fls(qattr->max_qp_req_rd_atomic_resc) - 1); 152 attr->max_qp_rd_atom = 153 min(1 << (fls(qattr->max_qp_resp_rd_atomic_resc) - 1), 154 attr->max_qp_init_rd_atom); 155 156 attr->max_srq = qattr->max_srq; 157 attr->max_srq_sge = qattr->max_srq_sge; 158 attr->max_srq_wr = qattr->max_srq_wr; 159 160 attr->local_ca_ack_delay = qattr->dev_ack_delay; 161 attr->max_fast_reg_page_list_len = qattr->max_mr / 8; 162 attr->max_pkeys = qattr->max_pkey; 163 attr->max_ah = qattr->max_ah; 164 165 return 0; 166 } 167 168 static inline void get_link_speed_and_width(int speed, u16 *ib_speed, 169 u8 *ib_width) 170 { 171 switch (speed) { 172 case 1000: 173 *ib_speed = IB_SPEED_SDR; 174 *ib_width = IB_WIDTH_1X; 175 break; 176 case 10000: 177 *ib_speed = IB_SPEED_QDR; 178 *ib_width = IB_WIDTH_1X; 179 break; 180 181 case 20000: 182 *ib_speed = IB_SPEED_DDR; 183 *ib_width = IB_WIDTH_4X; 184 break; 185 186 case 25000: 187 *ib_speed = IB_SPEED_EDR; 188 *ib_width = IB_WIDTH_1X; 189 break; 190 191 case 40000: 192 *ib_speed = IB_SPEED_QDR; 193 *ib_width = IB_WIDTH_4X; 194 break; 195 196 case 50000: 197 *ib_speed = IB_SPEED_HDR; 198 *ib_width = IB_WIDTH_1X; 199 break; 200 201 case 100000: 202 *ib_speed = IB_SPEED_EDR; 203 *ib_width = IB_WIDTH_4X; 204 break; 205 206 default: 207 /* Unsupported */ 208 *ib_speed = IB_SPEED_SDR; 209 *ib_width = IB_WIDTH_1X; 210 } 211 } 212 213 int qedr_query_port(struct ib_device *ibdev, u8 port, struct ib_port_attr *attr) 214 { 215 struct qedr_dev *dev; 216 struct qed_rdma_port *rdma_port; 217 218 dev = get_qedr_dev(ibdev); 219 220 if (!dev->rdma_ctx) { 221 DP_ERR(dev, "rdma_ctx is NULL\n"); 222 return -EINVAL; 223 } 224 225 rdma_port = dev->ops->rdma_query_port(dev->rdma_ctx); 226 227 /* *attr being zeroed by the caller, avoid zeroing it here */ 228 if (rdma_port->port_state == QED_RDMA_PORT_UP) { 229 attr->state = IB_PORT_ACTIVE; 230 attr->phys_state = IB_PORT_PHYS_STATE_LINK_UP; 231 } else { 232 attr->state = IB_PORT_DOWN; 233 attr->phys_state = IB_PORT_PHYS_STATE_DISABLED; 234 } 235 attr->max_mtu = IB_MTU_4096; 236 attr->lid = 0; 237 attr->lmc = 0; 238 attr->sm_lid = 0; 239 attr->sm_sl = 0; 240 attr->ip_gids = true; 241 if (rdma_protocol_iwarp(&dev->ibdev, 1)) { 242 attr->active_mtu = iboe_get_mtu(dev->iwarp_max_mtu); 243 attr->gid_tbl_len = 1; 244 } else { 245 attr->active_mtu = iboe_get_mtu(dev->ndev->mtu); 246 attr->gid_tbl_len = QEDR_MAX_SGID; 247 attr->pkey_tbl_len = QEDR_ROCE_PKEY_TABLE_LEN; 248 } 249 attr->bad_pkey_cntr = rdma_port->pkey_bad_counter; 250 attr->qkey_viol_cntr = 0; 251 get_link_speed_and_width(rdma_port->link_speed, 252 &attr->active_speed, &attr->active_width); 253 attr->max_msg_sz = rdma_port->max_msg_size; 254 attr->max_vl_num = 4; 255 256 return 0; 257 } 258 259 int qedr_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata) 260 { 261 struct ib_device *ibdev = uctx->device; 262 int rc; 263 struct qedr_ucontext *ctx = get_qedr_ucontext(uctx); 264 struct qedr_alloc_ucontext_resp uresp = {}; 265 struct qedr_alloc_ucontext_req ureq = {}; 266 struct qedr_dev *dev = get_qedr_dev(ibdev); 267 struct qed_rdma_add_user_out_params oparams; 268 struct qedr_user_mmap_entry *entry; 269 270 if (!udata) 271 return -EFAULT; 272 273 if (udata->inlen) { 274 rc = ib_copy_from_udata(&ureq, udata, 275 min(sizeof(ureq), udata->inlen)); 276 if (rc) { 277 DP_ERR(dev, "Problem copying data from user space\n"); 278 return -EFAULT; 279 } 280 ctx->edpm_mode = !!(ureq.context_flags & 281 QEDR_ALLOC_UCTX_EDPM_MODE); 282 ctx->db_rec = !!(ureq.context_flags & QEDR_ALLOC_UCTX_DB_REC); 283 } 284 285 rc = dev->ops->rdma_add_user(dev->rdma_ctx, &oparams); 286 if (rc) { 287 DP_ERR(dev, 288 "failed to allocate a DPI for a new RoCE application, rc=%d. To overcome this consider to increase the number of DPIs, increase the doorbell BAR size or just close unnecessary RoCE applications. In order to increase the number of DPIs consult the qedr readme\n", 289 rc); 290 return rc; 291 } 292 293 ctx->dpi = oparams.dpi; 294 ctx->dpi_addr = oparams.dpi_addr; 295 ctx->dpi_phys_addr = oparams.dpi_phys_addr; 296 ctx->dpi_size = oparams.dpi_size; 297 entry = kzalloc(sizeof(*entry), GFP_KERNEL); 298 if (!entry) { 299 rc = -ENOMEM; 300 goto err; 301 } 302 303 entry->io_address = ctx->dpi_phys_addr; 304 entry->length = ctx->dpi_size; 305 entry->mmap_flag = QEDR_USER_MMAP_IO_WC; 306 entry->dpi = ctx->dpi; 307 entry->dev = dev; 308 rc = rdma_user_mmap_entry_insert(uctx, &entry->rdma_entry, 309 ctx->dpi_size); 310 if (rc) { 311 kfree(entry); 312 goto err; 313 } 314 ctx->db_mmap_entry = &entry->rdma_entry; 315 316 if (!dev->user_dpm_enabled) 317 uresp.dpm_flags = 0; 318 else if (rdma_protocol_iwarp(&dev->ibdev, 1)) 319 uresp.dpm_flags = QEDR_DPM_TYPE_IWARP_LEGACY; 320 else 321 uresp.dpm_flags = QEDR_DPM_TYPE_ROCE_ENHANCED | 322 QEDR_DPM_TYPE_ROCE_LEGACY | 323 QEDR_DPM_TYPE_ROCE_EDPM_MODE; 324 325 if (ureq.context_flags & QEDR_SUPPORT_DPM_SIZES) { 326 uresp.dpm_flags |= QEDR_DPM_SIZES_SET; 327 uresp.ldpm_limit_size = QEDR_LDPM_MAX_SIZE; 328 uresp.edpm_trans_size = QEDR_EDPM_TRANS_SIZE; 329 uresp.edpm_limit_size = QEDR_EDPM_MAX_SIZE; 330 } 331 332 uresp.wids_enabled = 1; 333 uresp.wid_count = oparams.wid_count; 334 uresp.db_pa = rdma_user_mmap_get_offset(ctx->db_mmap_entry); 335 uresp.db_size = ctx->dpi_size; 336 uresp.max_send_wr = dev->attr.max_sqe; 337 uresp.max_recv_wr = dev->attr.max_rqe; 338 uresp.max_srq_wr = dev->attr.max_srq_wr; 339 uresp.sges_per_send_wr = QEDR_MAX_SQE_ELEMENTS_PER_SQE; 340 uresp.sges_per_recv_wr = QEDR_MAX_RQE_ELEMENTS_PER_RQE; 341 uresp.sges_per_srq_wr = dev->attr.max_srq_sge; 342 uresp.max_cqes = QEDR_MAX_CQES; 343 344 rc = qedr_ib_copy_to_udata(udata, &uresp, sizeof(uresp)); 345 if (rc) 346 goto err; 347 348 ctx->dev = dev; 349 350 DP_DEBUG(dev, QEDR_MSG_INIT, "Allocating user context %p\n", 351 &ctx->ibucontext); 352 return 0; 353 354 err: 355 if (!ctx->db_mmap_entry) 356 dev->ops->rdma_remove_user(dev->rdma_ctx, ctx->dpi); 357 else 358 rdma_user_mmap_entry_remove(ctx->db_mmap_entry); 359 360 return rc; 361 } 362 363 void qedr_dealloc_ucontext(struct ib_ucontext *ibctx) 364 { 365 struct qedr_ucontext *uctx = get_qedr_ucontext(ibctx); 366 367 DP_DEBUG(uctx->dev, QEDR_MSG_INIT, "Deallocating user context %p\n", 368 uctx); 369 370 rdma_user_mmap_entry_remove(uctx->db_mmap_entry); 371 } 372 373 void qedr_mmap_free(struct rdma_user_mmap_entry *rdma_entry) 374 { 375 struct qedr_user_mmap_entry *entry = get_qedr_mmap_entry(rdma_entry); 376 struct qedr_dev *dev = entry->dev; 377 378 if (entry->mmap_flag == QEDR_USER_MMAP_PHYS_PAGE) 379 free_page((unsigned long)entry->address); 380 else if (entry->mmap_flag == QEDR_USER_MMAP_IO_WC) 381 dev->ops->rdma_remove_user(dev->rdma_ctx, entry->dpi); 382 383 kfree(entry); 384 } 385 386 int qedr_mmap(struct ib_ucontext *ucontext, struct vm_area_struct *vma) 387 { 388 struct ib_device *dev = ucontext->device; 389 size_t length = vma->vm_end - vma->vm_start; 390 struct rdma_user_mmap_entry *rdma_entry; 391 struct qedr_user_mmap_entry *entry; 392 int rc = 0; 393 u64 pfn; 394 395 ibdev_dbg(dev, 396 "start %#lx, end %#lx, length = %#zx, pgoff = %#lx\n", 397 vma->vm_start, vma->vm_end, length, vma->vm_pgoff); 398 399 rdma_entry = rdma_user_mmap_entry_get(ucontext, vma); 400 if (!rdma_entry) { 401 ibdev_dbg(dev, "pgoff[%#lx] does not have valid entry\n", 402 vma->vm_pgoff); 403 return -EINVAL; 404 } 405 entry = get_qedr_mmap_entry(rdma_entry); 406 ibdev_dbg(dev, 407 "Mapping address[%#llx], length[%#zx], mmap_flag[%d]\n", 408 entry->io_address, length, entry->mmap_flag); 409 410 switch (entry->mmap_flag) { 411 case QEDR_USER_MMAP_IO_WC: 412 pfn = entry->io_address >> PAGE_SHIFT; 413 rc = rdma_user_mmap_io(ucontext, vma, pfn, length, 414 pgprot_writecombine(vma->vm_page_prot), 415 rdma_entry); 416 break; 417 case QEDR_USER_MMAP_PHYS_PAGE: 418 rc = vm_insert_page(vma, vma->vm_start, 419 virt_to_page(entry->address)); 420 break; 421 default: 422 rc = -EINVAL; 423 } 424 425 if (rc) 426 ibdev_dbg(dev, 427 "Couldn't mmap address[%#llx] length[%#zx] mmap_flag[%d] err[%d]\n", 428 entry->io_address, length, entry->mmap_flag, rc); 429 430 rdma_user_mmap_entry_put(rdma_entry); 431 return rc; 432 } 433 434 int qedr_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata) 435 { 436 struct ib_device *ibdev = ibpd->device; 437 struct qedr_dev *dev = get_qedr_dev(ibdev); 438 struct qedr_pd *pd = get_qedr_pd(ibpd); 439 u16 pd_id; 440 int rc; 441 442 DP_DEBUG(dev, QEDR_MSG_INIT, "Function called from: %s\n", 443 udata ? "User Lib" : "Kernel"); 444 445 if (!dev->rdma_ctx) { 446 DP_ERR(dev, "invalid RDMA context\n"); 447 return -EINVAL; 448 } 449 450 rc = dev->ops->rdma_alloc_pd(dev->rdma_ctx, &pd_id); 451 if (rc) 452 return rc; 453 454 pd->pd_id = pd_id; 455 456 if (udata) { 457 struct qedr_alloc_pd_uresp uresp = { 458 .pd_id = pd_id, 459 }; 460 struct qedr_ucontext *context = rdma_udata_to_drv_context( 461 udata, struct qedr_ucontext, ibucontext); 462 463 rc = qedr_ib_copy_to_udata(udata, &uresp, sizeof(uresp)); 464 if (rc) { 465 DP_ERR(dev, "copy error pd_id=0x%x.\n", pd_id); 466 dev->ops->rdma_dealloc_pd(dev->rdma_ctx, pd_id); 467 return rc; 468 } 469 470 pd->uctx = context; 471 pd->uctx->pd = pd; 472 } 473 474 return 0; 475 } 476 477 int qedr_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata) 478 { 479 struct qedr_dev *dev = get_qedr_dev(ibpd->device); 480 struct qedr_pd *pd = get_qedr_pd(ibpd); 481 482 DP_DEBUG(dev, QEDR_MSG_INIT, "Deallocating PD %d\n", pd->pd_id); 483 dev->ops->rdma_dealloc_pd(dev->rdma_ctx, pd->pd_id); 484 return 0; 485 } 486 487 488 int qedr_alloc_xrcd(struct ib_xrcd *ibxrcd, struct ib_udata *udata) 489 { 490 struct qedr_dev *dev = get_qedr_dev(ibxrcd->device); 491 struct qedr_xrcd *xrcd = get_qedr_xrcd(ibxrcd); 492 493 return dev->ops->rdma_alloc_xrcd(dev->rdma_ctx, &xrcd->xrcd_id); 494 } 495 496 int qedr_dealloc_xrcd(struct ib_xrcd *ibxrcd, struct ib_udata *udata) 497 { 498 struct qedr_dev *dev = get_qedr_dev(ibxrcd->device); 499 u16 xrcd_id = get_qedr_xrcd(ibxrcd)->xrcd_id; 500 501 dev->ops->rdma_dealloc_xrcd(dev->rdma_ctx, xrcd_id); 502 return 0; 503 } 504 static void qedr_free_pbl(struct qedr_dev *dev, 505 struct qedr_pbl_info *pbl_info, struct qedr_pbl *pbl) 506 { 507 struct pci_dev *pdev = dev->pdev; 508 int i; 509 510 for (i = 0; i < pbl_info->num_pbls; i++) { 511 if (!pbl[i].va) 512 continue; 513 dma_free_coherent(&pdev->dev, pbl_info->pbl_size, 514 pbl[i].va, pbl[i].pa); 515 } 516 517 kfree(pbl); 518 } 519 520 #define MIN_FW_PBL_PAGE_SIZE (4 * 1024) 521 #define MAX_FW_PBL_PAGE_SIZE (64 * 1024) 522 523 #define NUM_PBES_ON_PAGE(_page_size) (_page_size / sizeof(u64)) 524 #define MAX_PBES_ON_PAGE NUM_PBES_ON_PAGE(MAX_FW_PBL_PAGE_SIZE) 525 #define MAX_PBES_TWO_LAYER (MAX_PBES_ON_PAGE * MAX_PBES_ON_PAGE) 526 527 static struct qedr_pbl *qedr_alloc_pbl_tbl(struct qedr_dev *dev, 528 struct qedr_pbl_info *pbl_info, 529 gfp_t flags) 530 { 531 struct pci_dev *pdev = dev->pdev; 532 struct qedr_pbl *pbl_table; 533 dma_addr_t *pbl_main_tbl; 534 dma_addr_t pa; 535 void *va; 536 int i; 537 538 pbl_table = kcalloc(pbl_info->num_pbls, sizeof(*pbl_table), flags); 539 if (!pbl_table) 540 return ERR_PTR(-ENOMEM); 541 542 for (i = 0; i < pbl_info->num_pbls; i++) { 543 va = dma_alloc_coherent(&pdev->dev, pbl_info->pbl_size, &pa, 544 flags); 545 if (!va) 546 goto err; 547 548 pbl_table[i].va = va; 549 pbl_table[i].pa = pa; 550 } 551 552 /* Two-Layer PBLs, if we have more than one pbl we need to initialize 553 * the first one with physical pointers to all of the rest 554 */ 555 pbl_main_tbl = (dma_addr_t *)pbl_table[0].va; 556 for (i = 0; i < pbl_info->num_pbls - 1; i++) 557 pbl_main_tbl[i] = pbl_table[i + 1].pa; 558 559 return pbl_table; 560 561 err: 562 for (i--; i >= 0; i--) 563 dma_free_coherent(&pdev->dev, pbl_info->pbl_size, 564 pbl_table[i].va, pbl_table[i].pa); 565 566 qedr_free_pbl(dev, pbl_info, pbl_table); 567 568 return ERR_PTR(-ENOMEM); 569 } 570 571 static int qedr_prepare_pbl_tbl(struct qedr_dev *dev, 572 struct qedr_pbl_info *pbl_info, 573 u32 num_pbes, int two_layer_capable) 574 { 575 u32 pbl_capacity; 576 u32 pbl_size; 577 u32 num_pbls; 578 579 if ((num_pbes > MAX_PBES_ON_PAGE) && two_layer_capable) { 580 if (num_pbes > MAX_PBES_TWO_LAYER) { 581 DP_ERR(dev, "prepare pbl table: too many pages %d\n", 582 num_pbes); 583 return -EINVAL; 584 } 585 586 /* calculate required pbl page size */ 587 pbl_size = MIN_FW_PBL_PAGE_SIZE; 588 pbl_capacity = NUM_PBES_ON_PAGE(pbl_size) * 589 NUM_PBES_ON_PAGE(pbl_size); 590 591 while (pbl_capacity < num_pbes) { 592 pbl_size *= 2; 593 pbl_capacity = pbl_size / sizeof(u64); 594 pbl_capacity = pbl_capacity * pbl_capacity; 595 } 596 597 num_pbls = DIV_ROUND_UP(num_pbes, NUM_PBES_ON_PAGE(pbl_size)); 598 num_pbls++; /* One for the layer0 ( points to the pbls) */ 599 pbl_info->two_layered = true; 600 } else { 601 /* One layered PBL */ 602 num_pbls = 1; 603 pbl_size = max_t(u32, MIN_FW_PBL_PAGE_SIZE, 604 roundup_pow_of_two((num_pbes * sizeof(u64)))); 605 pbl_info->two_layered = false; 606 } 607 608 pbl_info->num_pbls = num_pbls; 609 pbl_info->pbl_size = pbl_size; 610 pbl_info->num_pbes = num_pbes; 611 612 DP_DEBUG(dev, QEDR_MSG_MR, 613 "prepare pbl table: num_pbes=%d, num_pbls=%d, pbl_size=%d\n", 614 pbl_info->num_pbes, pbl_info->num_pbls, pbl_info->pbl_size); 615 616 return 0; 617 } 618 619 static void qedr_populate_pbls(struct qedr_dev *dev, struct ib_umem *umem, 620 struct qedr_pbl *pbl, 621 struct qedr_pbl_info *pbl_info, u32 pg_shift) 622 { 623 int pbe_cnt, total_num_pbes = 0; 624 struct qedr_pbl *pbl_tbl; 625 struct ib_block_iter biter; 626 struct regpair *pbe; 627 628 if (!pbl_info->num_pbes) 629 return; 630 631 /* If we have a two layered pbl, the first pbl points to the rest 632 * of the pbls and the first entry lays on the second pbl in the table 633 */ 634 if (pbl_info->two_layered) 635 pbl_tbl = &pbl[1]; 636 else 637 pbl_tbl = pbl; 638 639 pbe = (struct regpair *)pbl_tbl->va; 640 if (!pbe) { 641 DP_ERR(dev, "cannot populate PBL due to a NULL PBE\n"); 642 return; 643 } 644 645 pbe_cnt = 0; 646 647 rdma_umem_for_each_dma_block (umem, &biter, BIT(pg_shift)) { 648 u64 pg_addr = rdma_block_iter_dma_address(&biter); 649 650 pbe->lo = cpu_to_le32(pg_addr); 651 pbe->hi = cpu_to_le32(upper_32_bits(pg_addr)); 652 653 pbe_cnt++; 654 total_num_pbes++; 655 pbe++; 656 657 if (total_num_pbes == pbl_info->num_pbes) 658 return; 659 660 /* If the given pbl is full storing the pbes, move to next pbl. 661 */ 662 if (pbe_cnt == (pbl_info->pbl_size / sizeof(u64))) { 663 pbl_tbl++; 664 pbe = (struct regpair *)pbl_tbl->va; 665 pbe_cnt = 0; 666 } 667 } 668 } 669 670 static int qedr_db_recovery_add(struct qedr_dev *dev, 671 void __iomem *db_addr, 672 void *db_data, 673 enum qed_db_rec_width db_width, 674 enum qed_db_rec_space db_space) 675 { 676 if (!db_data) { 677 DP_DEBUG(dev, QEDR_MSG_INIT, "avoiding db rec since old lib\n"); 678 return 0; 679 } 680 681 return dev->ops->common->db_recovery_add(dev->cdev, db_addr, db_data, 682 db_width, db_space); 683 } 684 685 static void qedr_db_recovery_del(struct qedr_dev *dev, 686 void __iomem *db_addr, 687 void *db_data) 688 { 689 if (!db_data) { 690 DP_DEBUG(dev, QEDR_MSG_INIT, "avoiding db rec since old lib\n"); 691 return; 692 } 693 694 /* Ignore return code as there is not much we can do about it. Error 695 * log will be printed inside. 696 */ 697 dev->ops->common->db_recovery_del(dev->cdev, db_addr, db_data); 698 } 699 700 static int qedr_copy_cq_uresp(struct qedr_dev *dev, 701 struct qedr_cq *cq, struct ib_udata *udata, 702 u32 db_offset) 703 { 704 struct qedr_create_cq_uresp uresp; 705 int rc; 706 707 memset(&uresp, 0, sizeof(uresp)); 708 709 uresp.db_offset = db_offset; 710 uresp.icid = cq->icid; 711 if (cq->q.db_mmap_entry) 712 uresp.db_rec_addr = 713 rdma_user_mmap_get_offset(cq->q.db_mmap_entry); 714 715 rc = qedr_ib_copy_to_udata(udata, &uresp, sizeof(uresp)); 716 if (rc) 717 DP_ERR(dev, "copy error cqid=0x%x.\n", cq->icid); 718 719 return rc; 720 } 721 722 static void consume_cqe(struct qedr_cq *cq) 723 { 724 if (cq->latest_cqe == cq->toggle_cqe) 725 cq->pbl_toggle ^= RDMA_CQE_REQUESTER_TOGGLE_BIT_MASK; 726 727 cq->latest_cqe = qed_chain_consume(&cq->pbl); 728 } 729 730 static inline int qedr_align_cq_entries(int entries) 731 { 732 u64 size, aligned_size; 733 734 /* We allocate an extra entry that we don't report to the FW. */ 735 size = (entries + 1) * QEDR_CQE_SIZE; 736 aligned_size = ALIGN(size, PAGE_SIZE); 737 738 return aligned_size / QEDR_CQE_SIZE; 739 } 740 741 static int qedr_init_user_db_rec(struct ib_udata *udata, 742 struct qedr_dev *dev, struct qedr_userq *q, 743 bool requires_db_rec) 744 { 745 struct qedr_ucontext *uctx = 746 rdma_udata_to_drv_context(udata, struct qedr_ucontext, 747 ibucontext); 748 struct qedr_user_mmap_entry *entry; 749 int rc; 750 751 /* Aborting for non doorbell userqueue (SRQ) or non-supporting lib */ 752 if (requires_db_rec == 0 || !uctx->db_rec) 753 return 0; 754 755 /* Allocate a page for doorbell recovery, add to mmap */ 756 q->db_rec_data = (void *)get_zeroed_page(GFP_USER); 757 if (!q->db_rec_data) { 758 DP_ERR(dev, "get_zeroed_page failed\n"); 759 return -ENOMEM; 760 } 761 762 entry = kzalloc(sizeof(*entry), GFP_KERNEL); 763 if (!entry) 764 goto err_free_db_data; 765 766 entry->address = q->db_rec_data; 767 entry->length = PAGE_SIZE; 768 entry->mmap_flag = QEDR_USER_MMAP_PHYS_PAGE; 769 rc = rdma_user_mmap_entry_insert(&uctx->ibucontext, 770 &entry->rdma_entry, 771 PAGE_SIZE); 772 if (rc) 773 goto err_free_entry; 774 775 q->db_mmap_entry = &entry->rdma_entry; 776 777 return 0; 778 779 err_free_entry: 780 kfree(entry); 781 782 err_free_db_data: 783 free_page((unsigned long)q->db_rec_data); 784 q->db_rec_data = NULL; 785 return -ENOMEM; 786 } 787 788 static inline int qedr_init_user_queue(struct ib_udata *udata, 789 struct qedr_dev *dev, 790 struct qedr_userq *q, u64 buf_addr, 791 size_t buf_len, bool requires_db_rec, 792 int access, 793 int alloc_and_init) 794 { 795 u32 fw_pages; 796 int rc; 797 798 q->buf_addr = buf_addr; 799 q->buf_len = buf_len; 800 q->umem = ib_umem_get(&dev->ibdev, q->buf_addr, q->buf_len, access); 801 if (IS_ERR(q->umem)) { 802 DP_ERR(dev, "create user queue: failed ib_umem_get, got %ld\n", 803 PTR_ERR(q->umem)); 804 return PTR_ERR(q->umem); 805 } 806 807 fw_pages = ib_umem_num_dma_blocks(q->umem, 1 << FW_PAGE_SHIFT); 808 rc = qedr_prepare_pbl_tbl(dev, &q->pbl_info, fw_pages, 0); 809 if (rc) 810 goto err0; 811 812 if (alloc_and_init) { 813 q->pbl_tbl = qedr_alloc_pbl_tbl(dev, &q->pbl_info, GFP_KERNEL); 814 if (IS_ERR(q->pbl_tbl)) { 815 rc = PTR_ERR(q->pbl_tbl); 816 goto err0; 817 } 818 qedr_populate_pbls(dev, q->umem, q->pbl_tbl, &q->pbl_info, 819 FW_PAGE_SHIFT); 820 } else { 821 q->pbl_tbl = kzalloc(sizeof(*q->pbl_tbl), GFP_KERNEL); 822 if (!q->pbl_tbl) { 823 rc = -ENOMEM; 824 goto err0; 825 } 826 } 827 828 /* mmap the user address used to store doorbell data for recovery */ 829 return qedr_init_user_db_rec(udata, dev, q, requires_db_rec); 830 831 err0: 832 ib_umem_release(q->umem); 833 q->umem = NULL; 834 835 return rc; 836 } 837 838 static inline void qedr_init_cq_params(struct qedr_cq *cq, 839 struct qedr_ucontext *ctx, 840 struct qedr_dev *dev, int vector, 841 int chain_entries, int page_cnt, 842 u64 pbl_ptr, 843 struct qed_rdma_create_cq_in_params 844 *params) 845 { 846 memset(params, 0, sizeof(*params)); 847 params->cq_handle_hi = upper_32_bits((uintptr_t)cq); 848 params->cq_handle_lo = lower_32_bits((uintptr_t)cq); 849 params->cnq_id = vector; 850 params->cq_size = chain_entries - 1; 851 params->dpi = (ctx) ? ctx->dpi : dev->dpi; 852 params->pbl_num_pages = page_cnt; 853 params->pbl_ptr = pbl_ptr; 854 params->pbl_two_level = 0; 855 } 856 857 static void doorbell_cq(struct qedr_cq *cq, u32 cons, u8 flags) 858 { 859 cq->db.data.agg_flags = flags; 860 cq->db.data.value = cpu_to_le32(cons); 861 writeq(cq->db.raw, cq->db_addr); 862 } 863 864 int qedr_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags) 865 { 866 struct qedr_cq *cq = get_qedr_cq(ibcq); 867 unsigned long sflags; 868 struct qedr_dev *dev; 869 870 dev = get_qedr_dev(ibcq->device); 871 872 if (cq->destroyed) { 873 DP_ERR(dev, 874 "warning: arm was invoked after destroy for cq %p (icid=%d)\n", 875 cq, cq->icid); 876 return -EINVAL; 877 } 878 879 880 if (cq->cq_type == QEDR_CQ_TYPE_GSI) 881 return 0; 882 883 spin_lock_irqsave(&cq->cq_lock, sflags); 884 885 cq->arm_flags = 0; 886 887 if (flags & IB_CQ_SOLICITED) 888 cq->arm_flags |= DQ_UCM_ROCE_CQ_ARM_SE_CF_CMD; 889 890 if (flags & IB_CQ_NEXT_COMP) 891 cq->arm_flags |= DQ_UCM_ROCE_CQ_ARM_CF_CMD; 892 893 doorbell_cq(cq, cq->cq_cons - 1, cq->arm_flags); 894 895 spin_unlock_irqrestore(&cq->cq_lock, sflags); 896 897 return 0; 898 } 899 900 int qedr_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr, 901 struct ib_udata *udata) 902 { 903 struct ib_device *ibdev = ibcq->device; 904 struct qedr_ucontext *ctx = rdma_udata_to_drv_context( 905 udata, struct qedr_ucontext, ibucontext); 906 struct qed_rdma_destroy_cq_out_params destroy_oparams; 907 struct qed_rdma_destroy_cq_in_params destroy_iparams; 908 struct qed_chain_init_params chain_params = { 909 .mode = QED_CHAIN_MODE_PBL, 910 .intended_use = QED_CHAIN_USE_TO_CONSUME, 911 .cnt_type = QED_CHAIN_CNT_TYPE_U32, 912 .elem_size = sizeof(union rdma_cqe), 913 }; 914 struct qedr_dev *dev = get_qedr_dev(ibdev); 915 struct qed_rdma_create_cq_in_params params; 916 struct qedr_create_cq_ureq ureq = {}; 917 int vector = attr->comp_vector; 918 int entries = attr->cqe; 919 struct qedr_cq *cq = get_qedr_cq(ibcq); 920 int chain_entries; 921 u32 db_offset; 922 int page_cnt; 923 u64 pbl_ptr; 924 u16 icid; 925 int rc; 926 927 DP_DEBUG(dev, QEDR_MSG_INIT, 928 "create_cq: called from %s. entries=%d, vector=%d\n", 929 udata ? "User Lib" : "Kernel", entries, vector); 930 931 if (attr->flags) 932 return -EOPNOTSUPP; 933 934 if (entries > QEDR_MAX_CQES) { 935 DP_ERR(dev, 936 "create cq: the number of entries %d is too high. Must be equal or below %d.\n", 937 entries, QEDR_MAX_CQES); 938 return -EINVAL; 939 } 940 941 chain_entries = qedr_align_cq_entries(entries); 942 chain_entries = min_t(int, chain_entries, QEDR_MAX_CQES); 943 chain_params.num_elems = chain_entries; 944 945 /* calc db offset. user will add DPI base, kernel will add db addr */ 946 db_offset = DB_ADDR_SHIFT(DQ_PWM_OFFSET_UCM_RDMA_CQ_CONS_32BIT); 947 948 if (udata) { 949 if (ib_copy_from_udata(&ureq, udata, min(sizeof(ureq), 950 udata->inlen))) { 951 DP_ERR(dev, 952 "create cq: problem copying data from user space\n"); 953 goto err0; 954 } 955 956 if (!ureq.len) { 957 DP_ERR(dev, 958 "create cq: cannot create a cq with 0 entries\n"); 959 goto err0; 960 } 961 962 cq->cq_type = QEDR_CQ_TYPE_USER; 963 964 rc = qedr_init_user_queue(udata, dev, &cq->q, ureq.addr, 965 ureq.len, true, IB_ACCESS_LOCAL_WRITE, 966 1); 967 if (rc) 968 goto err0; 969 970 pbl_ptr = cq->q.pbl_tbl->pa; 971 page_cnt = cq->q.pbl_info.num_pbes; 972 973 cq->ibcq.cqe = chain_entries; 974 cq->q.db_addr = ctx->dpi_addr + db_offset; 975 } else { 976 cq->cq_type = QEDR_CQ_TYPE_KERNEL; 977 978 rc = dev->ops->common->chain_alloc(dev->cdev, &cq->pbl, 979 &chain_params); 980 if (rc) 981 goto err0; 982 983 page_cnt = qed_chain_get_page_cnt(&cq->pbl); 984 pbl_ptr = qed_chain_get_pbl_phys(&cq->pbl); 985 cq->ibcq.cqe = cq->pbl.capacity; 986 } 987 988 qedr_init_cq_params(cq, ctx, dev, vector, chain_entries, page_cnt, 989 pbl_ptr, ¶ms); 990 991 rc = dev->ops->rdma_create_cq(dev->rdma_ctx, ¶ms, &icid); 992 if (rc) 993 goto err1; 994 995 cq->icid = icid; 996 cq->sig = QEDR_CQ_MAGIC_NUMBER; 997 spin_lock_init(&cq->cq_lock); 998 999 if (udata) { 1000 rc = qedr_copy_cq_uresp(dev, cq, udata, db_offset); 1001 if (rc) 1002 goto err2; 1003 1004 rc = qedr_db_recovery_add(dev, cq->q.db_addr, 1005 &cq->q.db_rec_data->db_data, 1006 DB_REC_WIDTH_64B, 1007 DB_REC_USER); 1008 if (rc) 1009 goto err2; 1010 1011 } else { 1012 /* Generate doorbell address. */ 1013 cq->db.data.icid = cq->icid; 1014 cq->db_addr = dev->db_addr + db_offset; 1015 cq->db.data.params = DB_AGG_CMD_MAX << 1016 RDMA_PWM_VAL32_DATA_AGG_CMD_SHIFT; 1017 1018 /* point to the very last element, passing it we will toggle */ 1019 cq->toggle_cqe = qed_chain_get_last_elem(&cq->pbl); 1020 cq->pbl_toggle = RDMA_CQE_REQUESTER_TOGGLE_BIT_MASK; 1021 cq->latest_cqe = NULL; 1022 consume_cqe(cq); 1023 cq->cq_cons = qed_chain_get_cons_idx_u32(&cq->pbl); 1024 1025 rc = qedr_db_recovery_add(dev, cq->db_addr, &cq->db.data, 1026 DB_REC_WIDTH_64B, DB_REC_KERNEL); 1027 if (rc) 1028 goto err2; 1029 } 1030 1031 DP_DEBUG(dev, QEDR_MSG_CQ, 1032 "create cq: icid=0x%0x, addr=%p, size(entries)=0x%0x\n", 1033 cq->icid, cq, params.cq_size); 1034 1035 return 0; 1036 1037 err2: 1038 destroy_iparams.icid = cq->icid; 1039 dev->ops->rdma_destroy_cq(dev->rdma_ctx, &destroy_iparams, 1040 &destroy_oparams); 1041 err1: 1042 if (udata) { 1043 qedr_free_pbl(dev, &cq->q.pbl_info, cq->q.pbl_tbl); 1044 ib_umem_release(cq->q.umem); 1045 if (cq->q.db_mmap_entry) 1046 rdma_user_mmap_entry_remove(cq->q.db_mmap_entry); 1047 } else { 1048 dev->ops->common->chain_free(dev->cdev, &cq->pbl); 1049 } 1050 err0: 1051 return -EINVAL; 1052 } 1053 1054 int qedr_resize_cq(struct ib_cq *ibcq, int new_cnt, struct ib_udata *udata) 1055 { 1056 struct qedr_dev *dev = get_qedr_dev(ibcq->device); 1057 struct qedr_cq *cq = get_qedr_cq(ibcq); 1058 1059 DP_ERR(dev, "cq %p RESIZE NOT SUPPORTED\n", cq); 1060 1061 return 0; 1062 } 1063 1064 #define QEDR_DESTROY_CQ_MAX_ITERATIONS (10) 1065 #define QEDR_DESTROY_CQ_ITER_DURATION (10) 1066 1067 int qedr_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata) 1068 { 1069 struct qedr_dev *dev = get_qedr_dev(ibcq->device); 1070 struct qed_rdma_destroy_cq_out_params oparams; 1071 struct qed_rdma_destroy_cq_in_params iparams; 1072 struct qedr_cq *cq = get_qedr_cq(ibcq); 1073 int iter; 1074 1075 DP_DEBUG(dev, QEDR_MSG_CQ, "destroy cq %p (icid=%d)\n", cq, cq->icid); 1076 1077 cq->destroyed = 1; 1078 1079 /* GSIs CQs are handled by driver, so they don't exist in the FW */ 1080 if (cq->cq_type == QEDR_CQ_TYPE_GSI) { 1081 qedr_db_recovery_del(dev, cq->db_addr, &cq->db.data); 1082 return 0; 1083 } 1084 1085 iparams.icid = cq->icid; 1086 dev->ops->rdma_destroy_cq(dev->rdma_ctx, &iparams, &oparams); 1087 dev->ops->common->chain_free(dev->cdev, &cq->pbl); 1088 1089 if (udata) { 1090 qedr_free_pbl(dev, &cq->q.pbl_info, cq->q.pbl_tbl); 1091 ib_umem_release(cq->q.umem); 1092 1093 if (cq->q.db_rec_data) { 1094 qedr_db_recovery_del(dev, cq->q.db_addr, 1095 &cq->q.db_rec_data->db_data); 1096 rdma_user_mmap_entry_remove(cq->q.db_mmap_entry); 1097 } 1098 } else { 1099 qedr_db_recovery_del(dev, cq->db_addr, &cq->db.data); 1100 } 1101 1102 /* We don't want the IRQ handler to handle a non-existing CQ so we 1103 * wait until all CNQ interrupts, if any, are received. This will always 1104 * happen and will always happen very fast. If not, then a serious error 1105 * has occured. That is why we can use a long delay. 1106 * We spin for a short time so we don’t lose time on context switching 1107 * in case all the completions are handled in that span. Otherwise 1108 * we sleep for a while and check again. Since the CNQ may be 1109 * associated with (only) the current CPU we use msleep to allow the 1110 * current CPU to be freed. 1111 * The CNQ notification is increased in qedr_irq_handler(). 1112 */ 1113 iter = QEDR_DESTROY_CQ_MAX_ITERATIONS; 1114 while (oparams.num_cq_notif != READ_ONCE(cq->cnq_notif) && iter) { 1115 udelay(QEDR_DESTROY_CQ_ITER_DURATION); 1116 iter--; 1117 } 1118 1119 iter = QEDR_DESTROY_CQ_MAX_ITERATIONS; 1120 while (oparams.num_cq_notif != READ_ONCE(cq->cnq_notif) && iter) { 1121 msleep(QEDR_DESTROY_CQ_ITER_DURATION); 1122 iter--; 1123 } 1124 1125 /* Note that we don't need to have explicit code to wait for the 1126 * completion of the event handler because it is invoked from the EQ. 1127 * Since the destroy CQ ramrod has also been received on the EQ we can 1128 * be certain that there's no event handler in process. 1129 */ 1130 return 0; 1131 } 1132 1133 static inline int get_gid_info_from_table(struct ib_qp *ibqp, 1134 struct ib_qp_attr *attr, 1135 int attr_mask, 1136 struct qed_rdma_modify_qp_in_params 1137 *qp_params) 1138 { 1139 const struct ib_gid_attr *gid_attr; 1140 enum rdma_network_type nw_type; 1141 const struct ib_global_route *grh = rdma_ah_read_grh(&attr->ah_attr); 1142 u32 ipv4_addr; 1143 int ret; 1144 int i; 1145 1146 gid_attr = grh->sgid_attr; 1147 ret = rdma_read_gid_l2_fields(gid_attr, &qp_params->vlan_id, NULL); 1148 if (ret) 1149 return ret; 1150 1151 nw_type = rdma_gid_attr_network_type(gid_attr); 1152 switch (nw_type) { 1153 case RDMA_NETWORK_IPV6: 1154 memcpy(&qp_params->sgid.bytes[0], &gid_attr->gid.raw[0], 1155 sizeof(qp_params->sgid)); 1156 memcpy(&qp_params->dgid.bytes[0], 1157 &grh->dgid, 1158 sizeof(qp_params->dgid)); 1159 qp_params->roce_mode = ROCE_V2_IPV6; 1160 SET_FIELD(qp_params->modify_flags, 1161 QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1); 1162 break; 1163 case RDMA_NETWORK_ROCE_V1: 1164 memcpy(&qp_params->sgid.bytes[0], &gid_attr->gid.raw[0], 1165 sizeof(qp_params->sgid)); 1166 memcpy(&qp_params->dgid.bytes[0], 1167 &grh->dgid, 1168 sizeof(qp_params->dgid)); 1169 qp_params->roce_mode = ROCE_V1; 1170 break; 1171 case RDMA_NETWORK_IPV4: 1172 memset(&qp_params->sgid, 0, sizeof(qp_params->sgid)); 1173 memset(&qp_params->dgid, 0, sizeof(qp_params->dgid)); 1174 ipv4_addr = qedr_get_ipv4_from_gid(gid_attr->gid.raw); 1175 qp_params->sgid.ipv4_addr = ipv4_addr; 1176 ipv4_addr = 1177 qedr_get_ipv4_from_gid(grh->dgid.raw); 1178 qp_params->dgid.ipv4_addr = ipv4_addr; 1179 SET_FIELD(qp_params->modify_flags, 1180 QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1); 1181 qp_params->roce_mode = ROCE_V2_IPV4; 1182 break; 1183 default: 1184 return -EINVAL; 1185 } 1186 1187 for (i = 0; i < 4; i++) { 1188 qp_params->sgid.dwords[i] = ntohl(qp_params->sgid.dwords[i]); 1189 qp_params->dgid.dwords[i] = ntohl(qp_params->dgid.dwords[i]); 1190 } 1191 1192 if (qp_params->vlan_id >= VLAN_CFI_MASK) 1193 qp_params->vlan_id = 0; 1194 1195 return 0; 1196 } 1197 1198 static int qedr_check_qp_attrs(struct ib_pd *ibpd, struct qedr_dev *dev, 1199 struct ib_qp_init_attr *attrs, 1200 struct ib_udata *udata) 1201 { 1202 struct qedr_device_attr *qattr = &dev->attr; 1203 1204 /* QP0... attrs->qp_type == IB_QPT_GSI */ 1205 if (attrs->qp_type != IB_QPT_RC && 1206 attrs->qp_type != IB_QPT_GSI && 1207 attrs->qp_type != IB_QPT_XRC_INI && 1208 attrs->qp_type != IB_QPT_XRC_TGT) { 1209 DP_DEBUG(dev, QEDR_MSG_QP, 1210 "create qp: unsupported qp type=0x%x requested\n", 1211 attrs->qp_type); 1212 return -EOPNOTSUPP; 1213 } 1214 1215 if (attrs->cap.max_send_wr > qattr->max_sqe) { 1216 DP_ERR(dev, 1217 "create qp: cannot create a SQ with %d elements (max_send_wr=0x%x)\n", 1218 attrs->cap.max_send_wr, qattr->max_sqe); 1219 return -EINVAL; 1220 } 1221 1222 if (attrs->cap.max_inline_data > qattr->max_inline) { 1223 DP_ERR(dev, 1224 "create qp: unsupported inline data size=0x%x requested (max_inline=0x%x)\n", 1225 attrs->cap.max_inline_data, qattr->max_inline); 1226 return -EINVAL; 1227 } 1228 1229 if (attrs->cap.max_send_sge > qattr->max_sge) { 1230 DP_ERR(dev, 1231 "create qp: unsupported send_sge=0x%x requested (max_send_sge=0x%x)\n", 1232 attrs->cap.max_send_sge, qattr->max_sge); 1233 return -EINVAL; 1234 } 1235 1236 if (attrs->cap.max_recv_sge > qattr->max_sge) { 1237 DP_ERR(dev, 1238 "create qp: unsupported recv_sge=0x%x requested (max_recv_sge=0x%x)\n", 1239 attrs->cap.max_recv_sge, qattr->max_sge); 1240 return -EINVAL; 1241 } 1242 1243 /* verify consumer QPs are not trying to use GSI QP's CQ. 1244 * TGT QP isn't associated with RQ/SQ 1245 */ 1246 if ((attrs->qp_type != IB_QPT_GSI) && (dev->gsi_qp_created) && 1247 (attrs->qp_type != IB_QPT_XRC_TGT) && 1248 (attrs->qp_type != IB_QPT_XRC_INI)) { 1249 struct qedr_cq *send_cq = get_qedr_cq(attrs->send_cq); 1250 struct qedr_cq *recv_cq = get_qedr_cq(attrs->recv_cq); 1251 1252 if ((send_cq->cq_type == QEDR_CQ_TYPE_GSI) || 1253 (recv_cq->cq_type == QEDR_CQ_TYPE_GSI)) { 1254 DP_ERR(dev, 1255 "create qp: consumer QP cannot use GSI CQs.\n"); 1256 return -EINVAL; 1257 } 1258 } 1259 1260 return 0; 1261 } 1262 1263 static int qedr_copy_srq_uresp(struct qedr_dev *dev, 1264 struct qedr_srq *srq, struct ib_udata *udata) 1265 { 1266 struct qedr_create_srq_uresp uresp = {}; 1267 int rc; 1268 1269 uresp.srq_id = srq->srq_id; 1270 1271 rc = ib_copy_to_udata(udata, &uresp, sizeof(uresp)); 1272 if (rc) 1273 DP_ERR(dev, "create srq: problem copying data to user space\n"); 1274 1275 return rc; 1276 } 1277 1278 static void qedr_copy_rq_uresp(struct qedr_dev *dev, 1279 struct qedr_create_qp_uresp *uresp, 1280 struct qedr_qp *qp) 1281 { 1282 /* iWARP requires two doorbells per RQ. */ 1283 if (rdma_protocol_iwarp(&dev->ibdev, 1)) { 1284 uresp->rq_db_offset = 1285 DB_ADDR_SHIFT(DQ_PWM_OFFSET_TCM_IWARP_RQ_PROD); 1286 uresp->rq_db2_offset = DB_ADDR_SHIFT(DQ_PWM_OFFSET_TCM_FLAGS); 1287 } else { 1288 uresp->rq_db_offset = 1289 DB_ADDR_SHIFT(DQ_PWM_OFFSET_TCM_ROCE_RQ_PROD); 1290 } 1291 1292 uresp->rq_icid = qp->icid; 1293 if (qp->urq.db_mmap_entry) 1294 uresp->rq_db_rec_addr = 1295 rdma_user_mmap_get_offset(qp->urq.db_mmap_entry); 1296 } 1297 1298 static void qedr_copy_sq_uresp(struct qedr_dev *dev, 1299 struct qedr_create_qp_uresp *uresp, 1300 struct qedr_qp *qp) 1301 { 1302 uresp->sq_db_offset = DB_ADDR_SHIFT(DQ_PWM_OFFSET_XCM_RDMA_SQ_PROD); 1303 1304 /* iWARP uses the same cid for rq and sq */ 1305 if (rdma_protocol_iwarp(&dev->ibdev, 1)) 1306 uresp->sq_icid = qp->icid; 1307 else 1308 uresp->sq_icid = qp->icid + 1; 1309 1310 if (qp->usq.db_mmap_entry) 1311 uresp->sq_db_rec_addr = 1312 rdma_user_mmap_get_offset(qp->usq.db_mmap_entry); 1313 } 1314 1315 static int qedr_copy_qp_uresp(struct qedr_dev *dev, 1316 struct qedr_qp *qp, struct ib_udata *udata, 1317 struct qedr_create_qp_uresp *uresp) 1318 { 1319 int rc; 1320 1321 memset(uresp, 0, sizeof(*uresp)); 1322 1323 if (qedr_qp_has_sq(qp)) 1324 qedr_copy_sq_uresp(dev, uresp, qp); 1325 1326 if (qedr_qp_has_rq(qp)) 1327 qedr_copy_rq_uresp(dev, uresp, qp); 1328 1329 uresp->atomic_supported = dev->atomic_cap != IB_ATOMIC_NONE; 1330 uresp->qp_id = qp->qp_id; 1331 1332 rc = qedr_ib_copy_to_udata(udata, uresp, sizeof(*uresp)); 1333 if (rc) 1334 DP_ERR(dev, 1335 "create qp: failed a copy to user space with qp icid=0x%x.\n", 1336 qp->icid); 1337 1338 return rc; 1339 } 1340 1341 static void qedr_set_common_qp_params(struct qedr_dev *dev, 1342 struct qedr_qp *qp, 1343 struct qedr_pd *pd, 1344 struct ib_qp_init_attr *attrs) 1345 { 1346 spin_lock_init(&qp->q_lock); 1347 if (rdma_protocol_iwarp(&dev->ibdev, 1)) { 1348 kref_init(&qp->refcnt); 1349 init_completion(&qp->iwarp_cm_comp); 1350 } 1351 1352 qp->pd = pd; 1353 qp->qp_type = attrs->qp_type; 1354 qp->max_inline_data = attrs->cap.max_inline_data; 1355 qp->state = QED_ROCE_QP_STATE_RESET; 1356 qp->signaled = (attrs->sq_sig_type == IB_SIGNAL_ALL_WR) ? true : false; 1357 qp->dev = dev; 1358 if (qedr_qp_has_sq(qp)) { 1359 qp->sq.max_sges = attrs->cap.max_send_sge; 1360 qp->sq_cq = get_qedr_cq(attrs->send_cq); 1361 DP_DEBUG(dev, QEDR_MSG_QP, 1362 "SQ params:\tsq_max_sges = %d, sq_cq_id = %d\n", 1363 qp->sq.max_sges, qp->sq_cq->icid); 1364 } 1365 1366 if (attrs->srq) 1367 qp->srq = get_qedr_srq(attrs->srq); 1368 1369 if (qedr_qp_has_rq(qp)) { 1370 qp->rq_cq = get_qedr_cq(attrs->recv_cq); 1371 qp->rq.max_sges = attrs->cap.max_recv_sge; 1372 DP_DEBUG(dev, QEDR_MSG_QP, 1373 "RQ params:\trq_max_sges = %d, rq_cq_id = %d\n", 1374 qp->rq.max_sges, qp->rq_cq->icid); 1375 } 1376 1377 DP_DEBUG(dev, QEDR_MSG_QP, 1378 "QP params:\tpd = %d, qp_type = %d, max_inline_data = %d, state = %d, signaled = %d, use_srq=%d\n", 1379 pd->pd_id, qp->qp_type, qp->max_inline_data, 1380 qp->state, qp->signaled, (attrs->srq) ? 1 : 0); 1381 DP_DEBUG(dev, QEDR_MSG_QP, 1382 "SQ params:\tsq_max_sges = %d, sq_cq_id = %d\n", 1383 qp->sq.max_sges, qp->sq_cq->icid); 1384 } 1385 1386 static int qedr_set_roce_db_info(struct qedr_dev *dev, struct qedr_qp *qp) 1387 { 1388 int rc = 0; 1389 1390 if (qedr_qp_has_sq(qp)) { 1391 qp->sq.db = dev->db_addr + 1392 DB_ADDR_SHIFT(DQ_PWM_OFFSET_XCM_RDMA_SQ_PROD); 1393 qp->sq.db_data.data.icid = qp->icid + 1; 1394 rc = qedr_db_recovery_add(dev, qp->sq.db, &qp->sq.db_data, 1395 DB_REC_WIDTH_32B, DB_REC_KERNEL); 1396 if (rc) 1397 return rc; 1398 } 1399 1400 if (qedr_qp_has_rq(qp)) { 1401 qp->rq.db = dev->db_addr + 1402 DB_ADDR_SHIFT(DQ_PWM_OFFSET_TCM_ROCE_RQ_PROD); 1403 qp->rq.db_data.data.icid = qp->icid; 1404 rc = qedr_db_recovery_add(dev, qp->rq.db, &qp->rq.db_data, 1405 DB_REC_WIDTH_32B, DB_REC_KERNEL); 1406 if (rc && qedr_qp_has_sq(qp)) 1407 qedr_db_recovery_del(dev, qp->sq.db, &qp->sq.db_data); 1408 } 1409 1410 return rc; 1411 } 1412 1413 static int qedr_check_srq_params(struct qedr_dev *dev, 1414 struct ib_srq_init_attr *attrs, 1415 struct ib_udata *udata) 1416 { 1417 struct qedr_device_attr *qattr = &dev->attr; 1418 1419 if (attrs->attr.max_wr > qattr->max_srq_wr) { 1420 DP_ERR(dev, 1421 "create srq: unsupported srq_wr=0x%x requested (max_srq_wr=0x%x)\n", 1422 attrs->attr.max_wr, qattr->max_srq_wr); 1423 return -EINVAL; 1424 } 1425 1426 if (attrs->attr.max_sge > qattr->max_sge) { 1427 DP_ERR(dev, 1428 "create srq: unsupported sge=0x%x requested (max_srq_sge=0x%x)\n", 1429 attrs->attr.max_sge, qattr->max_sge); 1430 } 1431 1432 if (!udata && attrs->srq_type == IB_SRQT_XRC) { 1433 DP_ERR(dev, "XRC SRQs are not supported in kernel-space\n"); 1434 return -EINVAL; 1435 } 1436 1437 return 0; 1438 } 1439 1440 static void qedr_free_srq_user_params(struct qedr_srq *srq) 1441 { 1442 qedr_free_pbl(srq->dev, &srq->usrq.pbl_info, srq->usrq.pbl_tbl); 1443 ib_umem_release(srq->usrq.umem); 1444 ib_umem_release(srq->prod_umem); 1445 } 1446 1447 static void qedr_free_srq_kernel_params(struct qedr_srq *srq) 1448 { 1449 struct qedr_srq_hwq_info *hw_srq = &srq->hw_srq; 1450 struct qedr_dev *dev = srq->dev; 1451 1452 dev->ops->common->chain_free(dev->cdev, &hw_srq->pbl); 1453 1454 dma_free_coherent(&dev->pdev->dev, sizeof(struct rdma_srq_producers), 1455 hw_srq->virt_prod_pair_addr, 1456 hw_srq->phy_prod_pair_addr); 1457 } 1458 1459 static int qedr_init_srq_user_params(struct ib_udata *udata, 1460 struct qedr_srq *srq, 1461 struct qedr_create_srq_ureq *ureq, 1462 int access) 1463 { 1464 struct scatterlist *sg; 1465 int rc; 1466 1467 rc = qedr_init_user_queue(udata, srq->dev, &srq->usrq, ureq->srq_addr, 1468 ureq->srq_len, false, access, 1); 1469 if (rc) 1470 return rc; 1471 1472 srq->prod_umem = ib_umem_get(srq->ibsrq.device, ureq->prod_pair_addr, 1473 sizeof(struct rdma_srq_producers), access); 1474 if (IS_ERR(srq->prod_umem)) { 1475 qedr_free_pbl(srq->dev, &srq->usrq.pbl_info, srq->usrq.pbl_tbl); 1476 ib_umem_release(srq->usrq.umem); 1477 DP_ERR(srq->dev, 1478 "create srq: failed ib_umem_get for producer, got %ld\n", 1479 PTR_ERR(srq->prod_umem)); 1480 return PTR_ERR(srq->prod_umem); 1481 } 1482 1483 sg = srq->prod_umem->sg_head.sgl; 1484 srq->hw_srq.phy_prod_pair_addr = sg_dma_address(sg); 1485 1486 return 0; 1487 } 1488 1489 static int qedr_alloc_srq_kernel_params(struct qedr_srq *srq, 1490 struct qedr_dev *dev, 1491 struct ib_srq_init_attr *init_attr) 1492 { 1493 struct qedr_srq_hwq_info *hw_srq = &srq->hw_srq; 1494 struct qed_chain_init_params params = { 1495 .mode = QED_CHAIN_MODE_PBL, 1496 .intended_use = QED_CHAIN_USE_TO_CONSUME_PRODUCE, 1497 .cnt_type = QED_CHAIN_CNT_TYPE_U32, 1498 .elem_size = QEDR_SRQ_WQE_ELEM_SIZE, 1499 }; 1500 dma_addr_t phy_prod_pair_addr; 1501 u32 num_elems; 1502 void *va; 1503 int rc; 1504 1505 va = dma_alloc_coherent(&dev->pdev->dev, 1506 sizeof(struct rdma_srq_producers), 1507 &phy_prod_pair_addr, GFP_KERNEL); 1508 if (!va) { 1509 DP_ERR(dev, 1510 "create srq: failed to allocate dma memory for producer\n"); 1511 return -ENOMEM; 1512 } 1513 1514 hw_srq->phy_prod_pair_addr = phy_prod_pair_addr; 1515 hw_srq->virt_prod_pair_addr = va; 1516 1517 num_elems = init_attr->attr.max_wr * RDMA_MAX_SRQ_WQE_SIZE; 1518 params.num_elems = num_elems; 1519 1520 rc = dev->ops->common->chain_alloc(dev->cdev, &hw_srq->pbl, ¶ms); 1521 if (rc) 1522 goto err0; 1523 1524 hw_srq->num_elems = num_elems; 1525 1526 return 0; 1527 1528 err0: 1529 dma_free_coherent(&dev->pdev->dev, sizeof(struct rdma_srq_producers), 1530 va, phy_prod_pair_addr); 1531 return rc; 1532 } 1533 1534 int qedr_create_srq(struct ib_srq *ibsrq, struct ib_srq_init_attr *init_attr, 1535 struct ib_udata *udata) 1536 { 1537 struct qed_rdma_destroy_srq_in_params destroy_in_params; 1538 struct qed_rdma_create_srq_in_params in_params = {}; 1539 struct qedr_dev *dev = get_qedr_dev(ibsrq->device); 1540 struct qed_rdma_create_srq_out_params out_params; 1541 struct qedr_pd *pd = get_qedr_pd(ibsrq->pd); 1542 struct qedr_create_srq_ureq ureq = {}; 1543 u64 pbl_base_addr, phy_prod_pair_addr; 1544 struct qedr_srq_hwq_info *hw_srq; 1545 u32 page_cnt, page_size; 1546 struct qedr_srq *srq = get_qedr_srq(ibsrq); 1547 int rc = 0; 1548 1549 DP_DEBUG(dev, QEDR_MSG_QP, 1550 "create SRQ called from %s (pd %p)\n", 1551 (udata) ? "User lib" : "kernel", pd); 1552 1553 if (init_attr->srq_type != IB_SRQT_BASIC && 1554 init_attr->srq_type != IB_SRQT_XRC) 1555 return -EOPNOTSUPP; 1556 1557 rc = qedr_check_srq_params(dev, init_attr, udata); 1558 if (rc) 1559 return -EINVAL; 1560 1561 srq->dev = dev; 1562 srq->is_xrc = (init_attr->srq_type == IB_SRQT_XRC); 1563 hw_srq = &srq->hw_srq; 1564 spin_lock_init(&srq->lock); 1565 1566 hw_srq->max_wr = init_attr->attr.max_wr; 1567 hw_srq->max_sges = init_attr->attr.max_sge; 1568 1569 if (udata) { 1570 if (ib_copy_from_udata(&ureq, udata, min(sizeof(ureq), 1571 udata->inlen))) { 1572 DP_ERR(dev, 1573 "create srq: problem copying data from user space\n"); 1574 goto err0; 1575 } 1576 1577 rc = qedr_init_srq_user_params(udata, srq, &ureq, 0); 1578 if (rc) 1579 goto err0; 1580 1581 page_cnt = srq->usrq.pbl_info.num_pbes; 1582 pbl_base_addr = srq->usrq.pbl_tbl->pa; 1583 phy_prod_pair_addr = hw_srq->phy_prod_pair_addr; 1584 page_size = PAGE_SIZE; 1585 } else { 1586 struct qed_chain *pbl; 1587 1588 rc = qedr_alloc_srq_kernel_params(srq, dev, init_attr); 1589 if (rc) 1590 goto err0; 1591 1592 pbl = &hw_srq->pbl; 1593 page_cnt = qed_chain_get_page_cnt(pbl); 1594 pbl_base_addr = qed_chain_get_pbl_phys(pbl); 1595 phy_prod_pair_addr = hw_srq->phy_prod_pair_addr; 1596 page_size = QED_CHAIN_PAGE_SIZE; 1597 } 1598 1599 in_params.pd_id = pd->pd_id; 1600 in_params.pbl_base_addr = pbl_base_addr; 1601 in_params.prod_pair_addr = phy_prod_pair_addr; 1602 in_params.num_pages = page_cnt; 1603 in_params.page_size = page_size; 1604 if (srq->is_xrc) { 1605 struct qedr_xrcd *xrcd = get_qedr_xrcd(init_attr->ext.xrc.xrcd); 1606 struct qedr_cq *cq = get_qedr_cq(init_attr->ext.cq); 1607 1608 in_params.is_xrc = 1; 1609 in_params.xrcd_id = xrcd->xrcd_id; 1610 in_params.cq_cid = cq->icid; 1611 } 1612 1613 rc = dev->ops->rdma_create_srq(dev->rdma_ctx, &in_params, &out_params); 1614 if (rc) 1615 goto err1; 1616 1617 srq->srq_id = out_params.srq_id; 1618 1619 if (udata) { 1620 rc = qedr_copy_srq_uresp(dev, srq, udata); 1621 if (rc) 1622 goto err2; 1623 } 1624 1625 rc = xa_insert_irq(&dev->srqs, srq->srq_id, srq, GFP_KERNEL); 1626 if (rc) 1627 goto err2; 1628 1629 DP_DEBUG(dev, QEDR_MSG_SRQ, 1630 "create srq: created srq with srq_id=0x%0x\n", srq->srq_id); 1631 return 0; 1632 1633 err2: 1634 destroy_in_params.srq_id = srq->srq_id; 1635 1636 dev->ops->rdma_destroy_srq(dev->rdma_ctx, &destroy_in_params); 1637 err1: 1638 if (udata) 1639 qedr_free_srq_user_params(srq); 1640 else 1641 qedr_free_srq_kernel_params(srq); 1642 err0: 1643 return -EFAULT; 1644 } 1645 1646 int qedr_destroy_srq(struct ib_srq *ibsrq, struct ib_udata *udata) 1647 { 1648 struct qed_rdma_destroy_srq_in_params in_params = {}; 1649 struct qedr_dev *dev = get_qedr_dev(ibsrq->device); 1650 struct qedr_srq *srq = get_qedr_srq(ibsrq); 1651 1652 xa_erase_irq(&dev->srqs, srq->srq_id); 1653 in_params.srq_id = srq->srq_id; 1654 in_params.is_xrc = srq->is_xrc; 1655 dev->ops->rdma_destroy_srq(dev->rdma_ctx, &in_params); 1656 1657 if (ibsrq->uobject) 1658 qedr_free_srq_user_params(srq); 1659 else 1660 qedr_free_srq_kernel_params(srq); 1661 1662 DP_DEBUG(dev, QEDR_MSG_SRQ, 1663 "destroy srq: destroyed srq with srq_id=0x%0x\n", 1664 srq->srq_id); 1665 return 0; 1666 } 1667 1668 int qedr_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr, 1669 enum ib_srq_attr_mask attr_mask, struct ib_udata *udata) 1670 { 1671 struct qed_rdma_modify_srq_in_params in_params = {}; 1672 struct qedr_dev *dev = get_qedr_dev(ibsrq->device); 1673 struct qedr_srq *srq = get_qedr_srq(ibsrq); 1674 int rc; 1675 1676 if (attr_mask & IB_SRQ_MAX_WR) { 1677 DP_ERR(dev, 1678 "modify srq: invalid attribute mask=0x%x specified for %p\n", 1679 attr_mask, srq); 1680 return -EINVAL; 1681 } 1682 1683 if (attr_mask & IB_SRQ_LIMIT) { 1684 if (attr->srq_limit >= srq->hw_srq.max_wr) { 1685 DP_ERR(dev, 1686 "modify srq: invalid srq_limit=0x%x (max_srq_limit=0x%x)\n", 1687 attr->srq_limit, srq->hw_srq.max_wr); 1688 return -EINVAL; 1689 } 1690 1691 in_params.srq_id = srq->srq_id; 1692 in_params.wqe_limit = attr->srq_limit; 1693 rc = dev->ops->rdma_modify_srq(dev->rdma_ctx, &in_params); 1694 if (rc) 1695 return rc; 1696 } 1697 1698 srq->srq_limit = attr->srq_limit; 1699 1700 DP_DEBUG(dev, QEDR_MSG_SRQ, 1701 "modify srq: modified srq with srq_id=0x%0x\n", srq->srq_id); 1702 1703 return 0; 1704 } 1705 1706 static enum qed_rdma_qp_type qedr_ib_to_qed_qp_type(enum ib_qp_type ib_qp_type) 1707 { 1708 switch (ib_qp_type) { 1709 case IB_QPT_RC: 1710 return QED_RDMA_QP_TYPE_RC; 1711 case IB_QPT_XRC_INI: 1712 return QED_RDMA_QP_TYPE_XRC_INI; 1713 case IB_QPT_XRC_TGT: 1714 return QED_RDMA_QP_TYPE_XRC_TGT; 1715 default: 1716 return QED_RDMA_QP_TYPE_INVAL; 1717 } 1718 } 1719 1720 static inline void 1721 qedr_init_common_qp_in_params(struct qedr_dev *dev, 1722 struct qedr_pd *pd, 1723 struct qedr_qp *qp, 1724 struct ib_qp_init_attr *attrs, 1725 bool fmr_and_reserved_lkey, 1726 struct qed_rdma_create_qp_in_params *params) 1727 { 1728 /* QP handle to be written in an async event */ 1729 params->qp_handle_async_lo = lower_32_bits((uintptr_t) qp); 1730 params->qp_handle_async_hi = upper_32_bits((uintptr_t) qp); 1731 1732 params->signal_all = (attrs->sq_sig_type == IB_SIGNAL_ALL_WR); 1733 params->fmr_and_reserved_lkey = fmr_and_reserved_lkey; 1734 params->qp_type = qedr_ib_to_qed_qp_type(attrs->qp_type); 1735 params->stats_queue = 0; 1736 1737 if (pd) { 1738 params->pd = pd->pd_id; 1739 params->dpi = pd->uctx ? pd->uctx->dpi : dev->dpi; 1740 } 1741 1742 if (qedr_qp_has_sq(qp)) 1743 params->sq_cq_id = get_qedr_cq(attrs->send_cq)->icid; 1744 1745 if (qedr_qp_has_rq(qp)) 1746 params->rq_cq_id = get_qedr_cq(attrs->recv_cq)->icid; 1747 1748 if (qedr_qp_has_srq(qp)) { 1749 params->rq_cq_id = get_qedr_cq(attrs->recv_cq)->icid; 1750 params->srq_id = qp->srq->srq_id; 1751 params->use_srq = true; 1752 } else { 1753 params->srq_id = 0; 1754 params->use_srq = false; 1755 } 1756 } 1757 1758 static inline void qedr_qp_user_print(struct qedr_dev *dev, struct qedr_qp *qp) 1759 { 1760 DP_DEBUG(dev, QEDR_MSG_QP, "create qp: successfully created user QP. " 1761 "qp=%p. " 1762 "sq_addr=0x%llx, " 1763 "sq_len=%zd, " 1764 "rq_addr=0x%llx, " 1765 "rq_len=%zd" 1766 "\n", 1767 qp, 1768 qedr_qp_has_sq(qp) ? qp->usq.buf_addr : 0x0, 1769 qedr_qp_has_sq(qp) ? qp->usq.buf_len : 0, 1770 qedr_qp_has_rq(qp) ? qp->urq.buf_addr : 0x0, 1771 qedr_qp_has_sq(qp) ? qp->urq.buf_len : 0); 1772 } 1773 1774 static inline void 1775 qedr_iwarp_populate_user_qp(struct qedr_dev *dev, 1776 struct qedr_qp *qp, 1777 struct qed_rdma_create_qp_out_params *out_params) 1778 { 1779 qp->usq.pbl_tbl->va = out_params->sq_pbl_virt; 1780 qp->usq.pbl_tbl->pa = out_params->sq_pbl_phys; 1781 1782 qedr_populate_pbls(dev, qp->usq.umem, qp->usq.pbl_tbl, 1783 &qp->usq.pbl_info, FW_PAGE_SHIFT); 1784 if (!qp->srq) { 1785 qp->urq.pbl_tbl->va = out_params->rq_pbl_virt; 1786 qp->urq.pbl_tbl->pa = out_params->rq_pbl_phys; 1787 } 1788 1789 qedr_populate_pbls(dev, qp->urq.umem, qp->urq.pbl_tbl, 1790 &qp->urq.pbl_info, FW_PAGE_SHIFT); 1791 } 1792 1793 static void qedr_cleanup_user(struct qedr_dev *dev, 1794 struct qedr_ucontext *ctx, 1795 struct qedr_qp *qp) 1796 { 1797 if (qedr_qp_has_sq(qp)) { 1798 ib_umem_release(qp->usq.umem); 1799 qp->usq.umem = NULL; 1800 } 1801 1802 if (qedr_qp_has_rq(qp)) { 1803 ib_umem_release(qp->urq.umem); 1804 qp->urq.umem = NULL; 1805 } 1806 1807 if (rdma_protocol_roce(&dev->ibdev, 1)) { 1808 qedr_free_pbl(dev, &qp->usq.pbl_info, qp->usq.pbl_tbl); 1809 qedr_free_pbl(dev, &qp->urq.pbl_info, qp->urq.pbl_tbl); 1810 } else { 1811 kfree(qp->usq.pbl_tbl); 1812 kfree(qp->urq.pbl_tbl); 1813 } 1814 1815 if (qp->usq.db_rec_data) { 1816 qedr_db_recovery_del(dev, qp->usq.db_addr, 1817 &qp->usq.db_rec_data->db_data); 1818 rdma_user_mmap_entry_remove(qp->usq.db_mmap_entry); 1819 } 1820 1821 if (qp->urq.db_rec_data) { 1822 qedr_db_recovery_del(dev, qp->urq.db_addr, 1823 &qp->urq.db_rec_data->db_data); 1824 rdma_user_mmap_entry_remove(qp->urq.db_mmap_entry); 1825 } 1826 1827 if (rdma_protocol_iwarp(&dev->ibdev, 1)) 1828 qedr_db_recovery_del(dev, qp->urq.db_rec_db2_addr, 1829 &qp->urq.db_rec_db2_data); 1830 } 1831 1832 static int qedr_create_user_qp(struct qedr_dev *dev, 1833 struct qedr_qp *qp, 1834 struct ib_pd *ibpd, 1835 struct ib_udata *udata, 1836 struct ib_qp_init_attr *attrs) 1837 { 1838 struct qed_rdma_create_qp_in_params in_params; 1839 struct qed_rdma_create_qp_out_params out_params; 1840 struct qedr_create_qp_uresp uresp = {}; 1841 struct qedr_create_qp_ureq ureq = {}; 1842 int alloc_and_init = rdma_protocol_roce(&dev->ibdev, 1); 1843 struct qedr_ucontext *ctx = NULL; 1844 struct qedr_pd *pd = NULL; 1845 int rc = 0; 1846 1847 qp->create_type = QEDR_QP_CREATE_USER; 1848 1849 if (ibpd) { 1850 pd = get_qedr_pd(ibpd); 1851 ctx = pd->uctx; 1852 } 1853 1854 if (udata) { 1855 rc = ib_copy_from_udata(&ureq, udata, min(sizeof(ureq), 1856 udata->inlen)); 1857 if (rc) { 1858 DP_ERR(dev, "Problem copying data from user space\n"); 1859 return rc; 1860 } 1861 } 1862 1863 if (qedr_qp_has_sq(qp)) { 1864 /* SQ - read access only (0) */ 1865 rc = qedr_init_user_queue(udata, dev, &qp->usq, ureq.sq_addr, 1866 ureq.sq_len, true, 0, alloc_and_init); 1867 if (rc) 1868 return rc; 1869 } 1870 1871 if (qedr_qp_has_rq(qp)) { 1872 /* RQ - read access only (0) */ 1873 rc = qedr_init_user_queue(udata, dev, &qp->urq, ureq.rq_addr, 1874 ureq.rq_len, true, 0, alloc_and_init); 1875 if (rc) 1876 return rc; 1877 } 1878 1879 memset(&in_params, 0, sizeof(in_params)); 1880 qedr_init_common_qp_in_params(dev, pd, qp, attrs, false, &in_params); 1881 in_params.qp_handle_lo = ureq.qp_handle_lo; 1882 in_params.qp_handle_hi = ureq.qp_handle_hi; 1883 1884 if (qp->qp_type == IB_QPT_XRC_TGT) { 1885 struct qedr_xrcd *xrcd = get_qedr_xrcd(attrs->xrcd); 1886 1887 in_params.xrcd_id = xrcd->xrcd_id; 1888 in_params.qp_handle_lo = qp->qp_id; 1889 in_params.use_srq = 1; 1890 } 1891 1892 if (qedr_qp_has_sq(qp)) { 1893 in_params.sq_num_pages = qp->usq.pbl_info.num_pbes; 1894 in_params.sq_pbl_ptr = qp->usq.pbl_tbl->pa; 1895 } 1896 1897 if (qedr_qp_has_rq(qp)) { 1898 in_params.rq_num_pages = qp->urq.pbl_info.num_pbes; 1899 in_params.rq_pbl_ptr = qp->urq.pbl_tbl->pa; 1900 } 1901 1902 if (ctx) 1903 SET_FIELD(in_params.flags, QED_ROCE_EDPM_MODE, ctx->edpm_mode); 1904 1905 qp->qed_qp = dev->ops->rdma_create_qp(dev->rdma_ctx, 1906 &in_params, &out_params); 1907 1908 if (!qp->qed_qp) { 1909 rc = -ENOMEM; 1910 goto err1; 1911 } 1912 1913 if (rdma_protocol_iwarp(&dev->ibdev, 1)) 1914 qedr_iwarp_populate_user_qp(dev, qp, &out_params); 1915 1916 qp->qp_id = out_params.qp_id; 1917 qp->icid = out_params.icid; 1918 1919 if (udata) { 1920 rc = qedr_copy_qp_uresp(dev, qp, udata, &uresp); 1921 if (rc) 1922 goto err; 1923 } 1924 1925 /* db offset was calculated in copy_qp_uresp, now set in the user q */ 1926 if (qedr_qp_has_sq(qp)) { 1927 qp->usq.db_addr = ctx->dpi_addr + uresp.sq_db_offset; 1928 rc = qedr_db_recovery_add(dev, qp->usq.db_addr, 1929 &qp->usq.db_rec_data->db_data, 1930 DB_REC_WIDTH_32B, 1931 DB_REC_USER); 1932 if (rc) 1933 goto err; 1934 } 1935 1936 if (qedr_qp_has_rq(qp)) { 1937 qp->urq.db_addr = ctx->dpi_addr + uresp.rq_db_offset; 1938 rc = qedr_db_recovery_add(dev, qp->urq.db_addr, 1939 &qp->urq.db_rec_data->db_data, 1940 DB_REC_WIDTH_32B, 1941 DB_REC_USER); 1942 if (rc) 1943 goto err; 1944 } 1945 1946 if (rdma_protocol_iwarp(&dev->ibdev, 1)) { 1947 qp->urq.db_rec_db2_addr = ctx->dpi_addr + uresp.rq_db2_offset; 1948 1949 /* calculate the db_rec_db2 data since it is constant so no 1950 * need to reflect from user 1951 */ 1952 qp->urq.db_rec_db2_data.data.icid = cpu_to_le16(qp->icid); 1953 qp->urq.db_rec_db2_data.data.value = 1954 cpu_to_le16(DQ_TCM_IWARP_POST_RQ_CF_CMD); 1955 1956 rc = qedr_db_recovery_add(dev, qp->urq.db_rec_db2_addr, 1957 &qp->urq.db_rec_db2_data, 1958 DB_REC_WIDTH_32B, 1959 DB_REC_USER); 1960 if (rc) 1961 goto err; 1962 } 1963 qedr_qp_user_print(dev, qp); 1964 return rc; 1965 err: 1966 rc = dev->ops->rdma_destroy_qp(dev->rdma_ctx, qp->qed_qp); 1967 if (rc) 1968 DP_ERR(dev, "create qp: fatal fault. rc=%d", rc); 1969 1970 err1: 1971 qedr_cleanup_user(dev, ctx, qp); 1972 return rc; 1973 } 1974 1975 static int qedr_set_iwarp_db_info(struct qedr_dev *dev, struct qedr_qp *qp) 1976 { 1977 int rc; 1978 1979 qp->sq.db = dev->db_addr + 1980 DB_ADDR_SHIFT(DQ_PWM_OFFSET_XCM_RDMA_SQ_PROD); 1981 qp->sq.db_data.data.icid = qp->icid; 1982 1983 rc = qedr_db_recovery_add(dev, qp->sq.db, 1984 &qp->sq.db_data, 1985 DB_REC_WIDTH_32B, 1986 DB_REC_KERNEL); 1987 if (rc) 1988 return rc; 1989 1990 qp->rq.db = dev->db_addr + 1991 DB_ADDR_SHIFT(DQ_PWM_OFFSET_TCM_IWARP_RQ_PROD); 1992 qp->rq.db_data.data.icid = qp->icid; 1993 qp->rq.iwarp_db2 = dev->db_addr + 1994 DB_ADDR_SHIFT(DQ_PWM_OFFSET_TCM_FLAGS); 1995 qp->rq.iwarp_db2_data.data.icid = qp->icid; 1996 qp->rq.iwarp_db2_data.data.value = DQ_TCM_IWARP_POST_RQ_CF_CMD; 1997 1998 rc = qedr_db_recovery_add(dev, qp->rq.db, 1999 &qp->rq.db_data, 2000 DB_REC_WIDTH_32B, 2001 DB_REC_KERNEL); 2002 if (rc) 2003 return rc; 2004 2005 rc = qedr_db_recovery_add(dev, qp->rq.iwarp_db2, 2006 &qp->rq.iwarp_db2_data, 2007 DB_REC_WIDTH_32B, 2008 DB_REC_KERNEL); 2009 return rc; 2010 } 2011 2012 static int 2013 qedr_roce_create_kernel_qp(struct qedr_dev *dev, 2014 struct qedr_qp *qp, 2015 struct qed_rdma_create_qp_in_params *in_params, 2016 u32 n_sq_elems, u32 n_rq_elems) 2017 { 2018 struct qed_rdma_create_qp_out_params out_params; 2019 struct qed_chain_init_params params = { 2020 .mode = QED_CHAIN_MODE_PBL, 2021 .cnt_type = QED_CHAIN_CNT_TYPE_U32, 2022 }; 2023 int rc; 2024 2025 params.intended_use = QED_CHAIN_USE_TO_PRODUCE; 2026 params.num_elems = n_sq_elems; 2027 params.elem_size = QEDR_SQE_ELEMENT_SIZE; 2028 2029 rc = dev->ops->common->chain_alloc(dev->cdev, &qp->sq.pbl, ¶ms); 2030 if (rc) 2031 return rc; 2032 2033 in_params->sq_num_pages = qed_chain_get_page_cnt(&qp->sq.pbl); 2034 in_params->sq_pbl_ptr = qed_chain_get_pbl_phys(&qp->sq.pbl); 2035 2036 params.intended_use = QED_CHAIN_USE_TO_CONSUME_PRODUCE; 2037 params.num_elems = n_rq_elems; 2038 params.elem_size = QEDR_RQE_ELEMENT_SIZE; 2039 2040 rc = dev->ops->common->chain_alloc(dev->cdev, &qp->rq.pbl, ¶ms); 2041 if (rc) 2042 return rc; 2043 2044 in_params->rq_num_pages = qed_chain_get_page_cnt(&qp->rq.pbl); 2045 in_params->rq_pbl_ptr = qed_chain_get_pbl_phys(&qp->rq.pbl); 2046 2047 qp->qed_qp = dev->ops->rdma_create_qp(dev->rdma_ctx, 2048 in_params, &out_params); 2049 2050 if (!qp->qed_qp) 2051 return -EINVAL; 2052 2053 qp->qp_id = out_params.qp_id; 2054 qp->icid = out_params.icid; 2055 2056 return qedr_set_roce_db_info(dev, qp); 2057 } 2058 2059 static int 2060 qedr_iwarp_create_kernel_qp(struct qedr_dev *dev, 2061 struct qedr_qp *qp, 2062 struct qed_rdma_create_qp_in_params *in_params, 2063 u32 n_sq_elems, u32 n_rq_elems) 2064 { 2065 struct qed_rdma_create_qp_out_params out_params; 2066 struct qed_chain_init_params params = { 2067 .mode = QED_CHAIN_MODE_PBL, 2068 .cnt_type = QED_CHAIN_CNT_TYPE_U32, 2069 }; 2070 int rc; 2071 2072 in_params->sq_num_pages = QED_CHAIN_PAGE_CNT(n_sq_elems, 2073 QEDR_SQE_ELEMENT_SIZE, 2074 QED_CHAIN_PAGE_SIZE, 2075 QED_CHAIN_MODE_PBL); 2076 in_params->rq_num_pages = QED_CHAIN_PAGE_CNT(n_rq_elems, 2077 QEDR_RQE_ELEMENT_SIZE, 2078 QED_CHAIN_PAGE_SIZE, 2079 QED_CHAIN_MODE_PBL); 2080 2081 qp->qed_qp = dev->ops->rdma_create_qp(dev->rdma_ctx, 2082 in_params, &out_params); 2083 2084 if (!qp->qed_qp) 2085 return -EINVAL; 2086 2087 /* Now we allocate the chain */ 2088 2089 params.intended_use = QED_CHAIN_USE_TO_PRODUCE; 2090 params.num_elems = n_sq_elems; 2091 params.elem_size = QEDR_SQE_ELEMENT_SIZE; 2092 params.ext_pbl_virt = out_params.sq_pbl_virt; 2093 params.ext_pbl_phys = out_params.sq_pbl_phys; 2094 2095 rc = dev->ops->common->chain_alloc(dev->cdev, &qp->sq.pbl, ¶ms); 2096 if (rc) 2097 goto err; 2098 2099 params.intended_use = QED_CHAIN_USE_TO_CONSUME_PRODUCE; 2100 params.num_elems = n_rq_elems; 2101 params.elem_size = QEDR_RQE_ELEMENT_SIZE; 2102 params.ext_pbl_virt = out_params.rq_pbl_virt; 2103 params.ext_pbl_phys = out_params.rq_pbl_phys; 2104 2105 rc = dev->ops->common->chain_alloc(dev->cdev, &qp->rq.pbl, ¶ms); 2106 if (rc) 2107 goto err; 2108 2109 qp->qp_id = out_params.qp_id; 2110 qp->icid = out_params.icid; 2111 2112 return qedr_set_iwarp_db_info(dev, qp); 2113 2114 err: 2115 dev->ops->rdma_destroy_qp(dev->rdma_ctx, qp->qed_qp); 2116 2117 return rc; 2118 } 2119 2120 static void qedr_cleanup_kernel(struct qedr_dev *dev, struct qedr_qp *qp) 2121 { 2122 dev->ops->common->chain_free(dev->cdev, &qp->sq.pbl); 2123 kfree(qp->wqe_wr_id); 2124 2125 dev->ops->common->chain_free(dev->cdev, &qp->rq.pbl); 2126 kfree(qp->rqe_wr_id); 2127 2128 /* GSI qp is not registered to db mechanism so no need to delete */ 2129 if (qp->qp_type == IB_QPT_GSI) 2130 return; 2131 2132 qedr_db_recovery_del(dev, qp->sq.db, &qp->sq.db_data); 2133 2134 if (!qp->srq) { 2135 qedr_db_recovery_del(dev, qp->rq.db, &qp->rq.db_data); 2136 2137 if (rdma_protocol_iwarp(&dev->ibdev, 1)) 2138 qedr_db_recovery_del(dev, qp->rq.iwarp_db2, 2139 &qp->rq.iwarp_db2_data); 2140 } 2141 } 2142 2143 static int qedr_create_kernel_qp(struct qedr_dev *dev, 2144 struct qedr_qp *qp, 2145 struct ib_pd *ibpd, 2146 struct ib_qp_init_attr *attrs) 2147 { 2148 struct qed_rdma_create_qp_in_params in_params; 2149 struct qedr_pd *pd = get_qedr_pd(ibpd); 2150 int rc = -EINVAL; 2151 u32 n_rq_elems; 2152 u32 n_sq_elems; 2153 u32 n_sq_entries; 2154 2155 memset(&in_params, 0, sizeof(in_params)); 2156 qp->create_type = QEDR_QP_CREATE_KERNEL; 2157 2158 /* A single work request may take up to QEDR_MAX_SQ_WQE_SIZE elements in 2159 * the ring. The ring should allow at least a single WR, even if the 2160 * user requested none, due to allocation issues. 2161 * We should add an extra WR since the prod and cons indices of 2162 * wqe_wr_id are managed in such a way that the WQ is considered full 2163 * when (prod+1)%max_wr==cons. We currently don't do that because we 2164 * double the number of entries due an iSER issue that pushes far more 2165 * WRs than indicated. If we decline its ib_post_send() then we get 2166 * error prints in the dmesg we'd like to avoid. 2167 */ 2168 qp->sq.max_wr = min_t(u32, attrs->cap.max_send_wr * dev->wq_multiplier, 2169 dev->attr.max_sqe); 2170 2171 qp->wqe_wr_id = kcalloc(qp->sq.max_wr, sizeof(*qp->wqe_wr_id), 2172 GFP_KERNEL); 2173 if (!qp->wqe_wr_id) { 2174 DP_ERR(dev, "create qp: failed SQ shadow memory allocation\n"); 2175 return -ENOMEM; 2176 } 2177 2178 /* QP handle to be written in CQE */ 2179 in_params.qp_handle_lo = lower_32_bits((uintptr_t) qp); 2180 in_params.qp_handle_hi = upper_32_bits((uintptr_t) qp); 2181 2182 /* A single work request may take up to QEDR_MAX_RQ_WQE_SIZE elements in 2183 * the ring. There ring should allow at least a single WR, even if the 2184 * user requested none, due to allocation issues. 2185 */ 2186 qp->rq.max_wr = (u16) max_t(u32, attrs->cap.max_recv_wr, 1); 2187 2188 /* Allocate driver internal RQ array */ 2189 qp->rqe_wr_id = kcalloc(qp->rq.max_wr, sizeof(*qp->rqe_wr_id), 2190 GFP_KERNEL); 2191 if (!qp->rqe_wr_id) { 2192 DP_ERR(dev, 2193 "create qp: failed RQ shadow memory allocation\n"); 2194 kfree(qp->wqe_wr_id); 2195 return -ENOMEM; 2196 } 2197 2198 qedr_init_common_qp_in_params(dev, pd, qp, attrs, true, &in_params); 2199 2200 n_sq_entries = attrs->cap.max_send_wr; 2201 n_sq_entries = min_t(u32, n_sq_entries, dev->attr.max_sqe); 2202 n_sq_entries = max_t(u32, n_sq_entries, 1); 2203 n_sq_elems = n_sq_entries * QEDR_MAX_SQE_ELEMENTS_PER_SQE; 2204 2205 n_rq_elems = qp->rq.max_wr * QEDR_MAX_RQE_ELEMENTS_PER_RQE; 2206 2207 if (rdma_protocol_iwarp(&dev->ibdev, 1)) 2208 rc = qedr_iwarp_create_kernel_qp(dev, qp, &in_params, 2209 n_sq_elems, n_rq_elems); 2210 else 2211 rc = qedr_roce_create_kernel_qp(dev, qp, &in_params, 2212 n_sq_elems, n_rq_elems); 2213 if (rc) 2214 qedr_cleanup_kernel(dev, qp); 2215 2216 return rc; 2217 } 2218 2219 static int qedr_free_qp_resources(struct qedr_dev *dev, struct qedr_qp *qp, 2220 struct ib_udata *udata) 2221 { 2222 struct qedr_ucontext *ctx = 2223 rdma_udata_to_drv_context(udata, struct qedr_ucontext, 2224 ibucontext); 2225 int rc; 2226 2227 if (qp->qp_type != IB_QPT_GSI) { 2228 rc = dev->ops->rdma_destroy_qp(dev->rdma_ctx, qp->qed_qp); 2229 if (rc) 2230 return rc; 2231 } 2232 2233 if (qp->create_type == QEDR_QP_CREATE_USER) 2234 qedr_cleanup_user(dev, ctx, qp); 2235 else 2236 qedr_cleanup_kernel(dev, qp); 2237 2238 return 0; 2239 } 2240 2241 struct ib_qp *qedr_create_qp(struct ib_pd *ibpd, 2242 struct ib_qp_init_attr *attrs, 2243 struct ib_udata *udata) 2244 { 2245 struct qedr_xrcd *xrcd = NULL; 2246 struct qedr_pd *pd = NULL; 2247 struct qedr_dev *dev; 2248 struct qedr_qp *qp; 2249 struct ib_qp *ibqp; 2250 int rc = 0; 2251 2252 if (attrs->create_flags) 2253 return ERR_PTR(-EOPNOTSUPP); 2254 2255 if (attrs->qp_type == IB_QPT_XRC_TGT) { 2256 xrcd = get_qedr_xrcd(attrs->xrcd); 2257 dev = get_qedr_dev(xrcd->ibxrcd.device); 2258 } else { 2259 pd = get_qedr_pd(ibpd); 2260 dev = get_qedr_dev(ibpd->device); 2261 } 2262 2263 DP_DEBUG(dev, QEDR_MSG_QP, "create qp: called from %s, pd=%p\n", 2264 udata ? "user library" : "kernel", pd); 2265 2266 rc = qedr_check_qp_attrs(ibpd, dev, attrs, udata); 2267 if (rc) 2268 return ERR_PTR(rc); 2269 2270 DP_DEBUG(dev, QEDR_MSG_QP, 2271 "create qp: called from %s, event_handler=%p, eepd=%p sq_cq=%p, sq_icid=%d, rq_cq=%p, rq_icid=%d\n", 2272 udata ? "user library" : "kernel", attrs->event_handler, pd, 2273 get_qedr_cq(attrs->send_cq), 2274 get_qedr_cq(attrs->send_cq)->icid, 2275 get_qedr_cq(attrs->recv_cq), 2276 attrs->recv_cq ? get_qedr_cq(attrs->recv_cq)->icid : 0); 2277 2278 qp = kzalloc(sizeof(*qp), GFP_KERNEL); 2279 if (!qp) { 2280 DP_ERR(dev, "create qp: failed allocating memory\n"); 2281 return ERR_PTR(-ENOMEM); 2282 } 2283 2284 qedr_set_common_qp_params(dev, qp, pd, attrs); 2285 2286 if (attrs->qp_type == IB_QPT_GSI) { 2287 ibqp = qedr_create_gsi_qp(dev, attrs, qp); 2288 if (IS_ERR(ibqp)) 2289 kfree(qp); 2290 return ibqp; 2291 } 2292 2293 if (udata || xrcd) 2294 rc = qedr_create_user_qp(dev, qp, ibpd, udata, attrs); 2295 else 2296 rc = qedr_create_kernel_qp(dev, qp, ibpd, attrs); 2297 2298 if (rc) 2299 goto out_free_qp; 2300 2301 qp->ibqp.qp_num = qp->qp_id; 2302 2303 if (rdma_protocol_iwarp(&dev->ibdev, 1)) { 2304 rc = xa_insert(&dev->qps, qp->qp_id, qp, GFP_KERNEL); 2305 if (rc) 2306 goto out_free_qp_resources; 2307 } 2308 2309 return &qp->ibqp; 2310 2311 out_free_qp_resources: 2312 qedr_free_qp_resources(dev, qp, udata); 2313 out_free_qp: 2314 kfree(qp); 2315 2316 return ERR_PTR(-EFAULT); 2317 } 2318 2319 static enum ib_qp_state qedr_get_ibqp_state(enum qed_roce_qp_state qp_state) 2320 { 2321 switch (qp_state) { 2322 case QED_ROCE_QP_STATE_RESET: 2323 return IB_QPS_RESET; 2324 case QED_ROCE_QP_STATE_INIT: 2325 return IB_QPS_INIT; 2326 case QED_ROCE_QP_STATE_RTR: 2327 return IB_QPS_RTR; 2328 case QED_ROCE_QP_STATE_RTS: 2329 return IB_QPS_RTS; 2330 case QED_ROCE_QP_STATE_SQD: 2331 return IB_QPS_SQD; 2332 case QED_ROCE_QP_STATE_ERR: 2333 return IB_QPS_ERR; 2334 case QED_ROCE_QP_STATE_SQE: 2335 return IB_QPS_SQE; 2336 } 2337 return IB_QPS_ERR; 2338 } 2339 2340 static enum qed_roce_qp_state qedr_get_state_from_ibqp( 2341 enum ib_qp_state qp_state) 2342 { 2343 switch (qp_state) { 2344 case IB_QPS_RESET: 2345 return QED_ROCE_QP_STATE_RESET; 2346 case IB_QPS_INIT: 2347 return QED_ROCE_QP_STATE_INIT; 2348 case IB_QPS_RTR: 2349 return QED_ROCE_QP_STATE_RTR; 2350 case IB_QPS_RTS: 2351 return QED_ROCE_QP_STATE_RTS; 2352 case IB_QPS_SQD: 2353 return QED_ROCE_QP_STATE_SQD; 2354 case IB_QPS_ERR: 2355 return QED_ROCE_QP_STATE_ERR; 2356 default: 2357 return QED_ROCE_QP_STATE_ERR; 2358 } 2359 } 2360 2361 static void qedr_reset_qp_hwq_info(struct qedr_qp_hwq_info *qph) 2362 { 2363 qed_chain_reset(&qph->pbl); 2364 qph->prod = 0; 2365 qph->cons = 0; 2366 qph->wqe_cons = 0; 2367 qph->db_data.data.value = cpu_to_le16(0); 2368 } 2369 2370 static int qedr_update_qp_state(struct qedr_dev *dev, 2371 struct qedr_qp *qp, 2372 enum qed_roce_qp_state cur_state, 2373 enum qed_roce_qp_state new_state) 2374 { 2375 int status = 0; 2376 2377 if (new_state == cur_state) 2378 return 0; 2379 2380 switch (cur_state) { 2381 case QED_ROCE_QP_STATE_RESET: 2382 switch (new_state) { 2383 case QED_ROCE_QP_STATE_INIT: 2384 qp->prev_wqe_size = 0; 2385 qedr_reset_qp_hwq_info(&qp->sq); 2386 qedr_reset_qp_hwq_info(&qp->rq); 2387 break; 2388 default: 2389 status = -EINVAL; 2390 break; 2391 } 2392 break; 2393 case QED_ROCE_QP_STATE_INIT: 2394 switch (new_state) { 2395 case QED_ROCE_QP_STATE_RTR: 2396 /* Update doorbell (in case post_recv was 2397 * done before move to RTR) 2398 */ 2399 2400 if (rdma_protocol_roce(&dev->ibdev, 1)) { 2401 writel(qp->rq.db_data.raw, qp->rq.db); 2402 } 2403 break; 2404 case QED_ROCE_QP_STATE_ERR: 2405 break; 2406 default: 2407 /* Invalid state change. */ 2408 status = -EINVAL; 2409 break; 2410 } 2411 break; 2412 case QED_ROCE_QP_STATE_RTR: 2413 /* RTR->XXX */ 2414 switch (new_state) { 2415 case QED_ROCE_QP_STATE_RTS: 2416 break; 2417 case QED_ROCE_QP_STATE_ERR: 2418 break; 2419 default: 2420 /* Invalid state change. */ 2421 status = -EINVAL; 2422 break; 2423 } 2424 break; 2425 case QED_ROCE_QP_STATE_RTS: 2426 /* RTS->XXX */ 2427 switch (new_state) { 2428 case QED_ROCE_QP_STATE_SQD: 2429 break; 2430 case QED_ROCE_QP_STATE_ERR: 2431 break; 2432 default: 2433 /* Invalid state change. */ 2434 status = -EINVAL; 2435 break; 2436 } 2437 break; 2438 case QED_ROCE_QP_STATE_SQD: 2439 /* SQD->XXX */ 2440 switch (new_state) { 2441 case QED_ROCE_QP_STATE_RTS: 2442 case QED_ROCE_QP_STATE_ERR: 2443 break; 2444 default: 2445 /* Invalid state change. */ 2446 status = -EINVAL; 2447 break; 2448 } 2449 break; 2450 case QED_ROCE_QP_STATE_ERR: 2451 /* ERR->XXX */ 2452 switch (new_state) { 2453 case QED_ROCE_QP_STATE_RESET: 2454 if ((qp->rq.prod != qp->rq.cons) || 2455 (qp->sq.prod != qp->sq.cons)) { 2456 DP_NOTICE(dev, 2457 "Error->Reset with rq/sq not empty rq.prod=%x rq.cons=%x sq.prod=%x sq.cons=%x\n", 2458 qp->rq.prod, qp->rq.cons, qp->sq.prod, 2459 qp->sq.cons); 2460 status = -EINVAL; 2461 } 2462 break; 2463 default: 2464 status = -EINVAL; 2465 break; 2466 } 2467 break; 2468 default: 2469 status = -EINVAL; 2470 break; 2471 } 2472 2473 return status; 2474 } 2475 2476 int qedr_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, 2477 int attr_mask, struct ib_udata *udata) 2478 { 2479 struct qedr_qp *qp = get_qedr_qp(ibqp); 2480 struct qed_rdma_modify_qp_in_params qp_params = { 0 }; 2481 struct qedr_dev *dev = get_qedr_dev(&qp->dev->ibdev); 2482 const struct ib_global_route *grh = rdma_ah_read_grh(&attr->ah_attr); 2483 enum ib_qp_state old_qp_state, new_qp_state; 2484 enum qed_roce_qp_state cur_state; 2485 int rc = 0; 2486 2487 DP_DEBUG(dev, QEDR_MSG_QP, 2488 "modify qp: qp %p attr_mask=0x%x, state=%d", qp, attr_mask, 2489 attr->qp_state); 2490 2491 if (attr_mask & ~IB_QP_ATTR_STANDARD_BITS) 2492 return -EOPNOTSUPP; 2493 2494 old_qp_state = qedr_get_ibqp_state(qp->state); 2495 if (attr_mask & IB_QP_STATE) 2496 new_qp_state = attr->qp_state; 2497 else 2498 new_qp_state = old_qp_state; 2499 2500 if (rdma_protocol_roce(&dev->ibdev, 1)) { 2501 if (!ib_modify_qp_is_ok(old_qp_state, new_qp_state, 2502 ibqp->qp_type, attr_mask)) { 2503 DP_ERR(dev, 2504 "modify qp: invalid attribute mask=0x%x specified for\n" 2505 "qpn=0x%x of type=0x%x old_qp_state=0x%x, new_qp_state=0x%x\n", 2506 attr_mask, qp->qp_id, ibqp->qp_type, 2507 old_qp_state, new_qp_state); 2508 rc = -EINVAL; 2509 goto err; 2510 } 2511 } 2512 2513 /* Translate the masks... */ 2514 if (attr_mask & IB_QP_STATE) { 2515 SET_FIELD(qp_params.modify_flags, 2516 QED_RDMA_MODIFY_QP_VALID_NEW_STATE, 1); 2517 qp_params.new_state = qedr_get_state_from_ibqp(attr->qp_state); 2518 } 2519 2520 if (attr_mask & IB_QP_EN_SQD_ASYNC_NOTIFY) 2521 qp_params.sqd_async = true; 2522 2523 if (attr_mask & IB_QP_PKEY_INDEX) { 2524 SET_FIELD(qp_params.modify_flags, 2525 QED_ROCE_MODIFY_QP_VALID_PKEY, 1); 2526 if (attr->pkey_index >= QEDR_ROCE_PKEY_TABLE_LEN) { 2527 rc = -EINVAL; 2528 goto err; 2529 } 2530 2531 qp_params.pkey = QEDR_ROCE_PKEY_DEFAULT; 2532 } 2533 2534 if (attr_mask & IB_QP_QKEY) 2535 qp->qkey = attr->qkey; 2536 2537 if (attr_mask & IB_QP_ACCESS_FLAGS) { 2538 SET_FIELD(qp_params.modify_flags, 2539 QED_RDMA_MODIFY_QP_VALID_RDMA_OPS_EN, 1); 2540 qp_params.incoming_rdma_read_en = attr->qp_access_flags & 2541 IB_ACCESS_REMOTE_READ; 2542 qp_params.incoming_rdma_write_en = attr->qp_access_flags & 2543 IB_ACCESS_REMOTE_WRITE; 2544 qp_params.incoming_atomic_en = attr->qp_access_flags & 2545 IB_ACCESS_REMOTE_ATOMIC; 2546 } 2547 2548 if (attr_mask & (IB_QP_AV | IB_QP_PATH_MTU)) { 2549 if (rdma_protocol_iwarp(&dev->ibdev, 1)) 2550 return -EINVAL; 2551 2552 if (attr_mask & IB_QP_PATH_MTU) { 2553 if (attr->path_mtu < IB_MTU_256 || 2554 attr->path_mtu > IB_MTU_4096) { 2555 pr_err("error: Only MTU sizes of 256, 512, 1024, 2048 and 4096 are supported by RoCE\n"); 2556 rc = -EINVAL; 2557 goto err; 2558 } 2559 qp->mtu = min(ib_mtu_enum_to_int(attr->path_mtu), 2560 ib_mtu_enum_to_int(iboe_get_mtu 2561 (dev->ndev->mtu))); 2562 } 2563 2564 if (!qp->mtu) { 2565 qp->mtu = 2566 ib_mtu_enum_to_int(iboe_get_mtu(dev->ndev->mtu)); 2567 pr_err("Fixing zeroed MTU to qp->mtu = %d\n", qp->mtu); 2568 } 2569 2570 SET_FIELD(qp_params.modify_flags, 2571 QED_ROCE_MODIFY_QP_VALID_ADDRESS_VECTOR, 1); 2572 2573 qp_params.traffic_class_tos = grh->traffic_class; 2574 qp_params.flow_label = grh->flow_label; 2575 qp_params.hop_limit_ttl = grh->hop_limit; 2576 2577 qp->sgid_idx = grh->sgid_index; 2578 2579 rc = get_gid_info_from_table(ibqp, attr, attr_mask, &qp_params); 2580 if (rc) { 2581 DP_ERR(dev, 2582 "modify qp: problems with GID index %d (rc=%d)\n", 2583 grh->sgid_index, rc); 2584 return rc; 2585 } 2586 2587 rc = qedr_get_dmac(dev, &attr->ah_attr, 2588 qp_params.remote_mac_addr); 2589 if (rc) 2590 return rc; 2591 2592 qp_params.use_local_mac = true; 2593 ether_addr_copy(qp_params.local_mac_addr, dev->ndev->dev_addr); 2594 2595 DP_DEBUG(dev, QEDR_MSG_QP, "dgid=%x:%x:%x:%x\n", 2596 qp_params.dgid.dwords[0], qp_params.dgid.dwords[1], 2597 qp_params.dgid.dwords[2], qp_params.dgid.dwords[3]); 2598 DP_DEBUG(dev, QEDR_MSG_QP, "sgid=%x:%x:%x:%x\n", 2599 qp_params.sgid.dwords[0], qp_params.sgid.dwords[1], 2600 qp_params.sgid.dwords[2], qp_params.sgid.dwords[3]); 2601 DP_DEBUG(dev, QEDR_MSG_QP, "remote_mac=[%pM]\n", 2602 qp_params.remote_mac_addr); 2603 2604 qp_params.mtu = qp->mtu; 2605 qp_params.lb_indication = false; 2606 } 2607 2608 if (!qp_params.mtu) { 2609 /* Stay with current MTU */ 2610 if (qp->mtu) 2611 qp_params.mtu = qp->mtu; 2612 else 2613 qp_params.mtu = 2614 ib_mtu_enum_to_int(iboe_get_mtu(dev->ndev->mtu)); 2615 } 2616 2617 if (attr_mask & IB_QP_TIMEOUT) { 2618 SET_FIELD(qp_params.modify_flags, 2619 QED_ROCE_MODIFY_QP_VALID_ACK_TIMEOUT, 1); 2620 2621 /* The received timeout value is an exponent used like this: 2622 * "12.7.34 LOCAL ACK TIMEOUT 2623 * Value representing the transport (ACK) timeout for use by 2624 * the remote, expressed as: 4.096 * 2^timeout [usec]" 2625 * The FW expects timeout in msec so we need to divide the usec 2626 * result by 1000. We'll approximate 1000~2^10, and 4.096 ~ 2^2, 2627 * so we get: 2^2 * 2^timeout / 2^10 = 2^(timeout - 8). 2628 * The value of zero means infinite so we use a 'max_t' to make 2629 * sure that sub 1 msec values will be configured as 1 msec. 2630 */ 2631 if (attr->timeout) 2632 qp_params.ack_timeout = 2633 1 << max_t(int, attr->timeout - 8, 0); 2634 else 2635 qp_params.ack_timeout = 0; 2636 } 2637 2638 if (attr_mask & IB_QP_RETRY_CNT) { 2639 SET_FIELD(qp_params.modify_flags, 2640 QED_ROCE_MODIFY_QP_VALID_RETRY_CNT, 1); 2641 qp_params.retry_cnt = attr->retry_cnt; 2642 } 2643 2644 if (attr_mask & IB_QP_RNR_RETRY) { 2645 SET_FIELD(qp_params.modify_flags, 2646 QED_ROCE_MODIFY_QP_VALID_RNR_RETRY_CNT, 1); 2647 qp_params.rnr_retry_cnt = attr->rnr_retry; 2648 } 2649 2650 if (attr_mask & IB_QP_RQ_PSN) { 2651 SET_FIELD(qp_params.modify_flags, 2652 QED_ROCE_MODIFY_QP_VALID_RQ_PSN, 1); 2653 qp_params.rq_psn = attr->rq_psn; 2654 qp->rq_psn = attr->rq_psn; 2655 } 2656 2657 if (attr_mask & IB_QP_MAX_QP_RD_ATOMIC) { 2658 if (attr->max_rd_atomic > dev->attr.max_qp_req_rd_atomic_resc) { 2659 rc = -EINVAL; 2660 DP_ERR(dev, 2661 "unsupported max_rd_atomic=%d, supported=%d\n", 2662 attr->max_rd_atomic, 2663 dev->attr.max_qp_req_rd_atomic_resc); 2664 goto err; 2665 } 2666 2667 SET_FIELD(qp_params.modify_flags, 2668 QED_RDMA_MODIFY_QP_VALID_MAX_RD_ATOMIC_REQ, 1); 2669 qp_params.max_rd_atomic_req = attr->max_rd_atomic; 2670 } 2671 2672 if (attr_mask & IB_QP_MIN_RNR_TIMER) { 2673 SET_FIELD(qp_params.modify_flags, 2674 QED_ROCE_MODIFY_QP_VALID_MIN_RNR_NAK_TIMER, 1); 2675 qp_params.min_rnr_nak_timer = attr->min_rnr_timer; 2676 } 2677 2678 if (attr_mask & IB_QP_SQ_PSN) { 2679 SET_FIELD(qp_params.modify_flags, 2680 QED_ROCE_MODIFY_QP_VALID_SQ_PSN, 1); 2681 qp_params.sq_psn = attr->sq_psn; 2682 qp->sq_psn = attr->sq_psn; 2683 } 2684 2685 if (attr_mask & IB_QP_MAX_DEST_RD_ATOMIC) { 2686 if (attr->max_dest_rd_atomic > 2687 dev->attr.max_qp_resp_rd_atomic_resc) { 2688 DP_ERR(dev, 2689 "unsupported max_dest_rd_atomic=%d, supported=%d\n", 2690 attr->max_dest_rd_atomic, 2691 dev->attr.max_qp_resp_rd_atomic_resc); 2692 2693 rc = -EINVAL; 2694 goto err; 2695 } 2696 2697 SET_FIELD(qp_params.modify_flags, 2698 QED_RDMA_MODIFY_QP_VALID_MAX_RD_ATOMIC_RESP, 1); 2699 qp_params.max_rd_atomic_resp = attr->max_dest_rd_atomic; 2700 } 2701 2702 if (attr_mask & IB_QP_DEST_QPN) { 2703 SET_FIELD(qp_params.modify_flags, 2704 QED_ROCE_MODIFY_QP_VALID_DEST_QP, 1); 2705 2706 qp_params.dest_qp = attr->dest_qp_num; 2707 qp->dest_qp_num = attr->dest_qp_num; 2708 } 2709 2710 cur_state = qp->state; 2711 2712 /* Update the QP state before the actual ramrod to prevent a race with 2713 * fast path. Modifying the QP state to error will cause the device to 2714 * flush the CQEs and while polling the flushed CQEs will considered as 2715 * a potential issue if the QP isn't in error state. 2716 */ 2717 if ((attr_mask & IB_QP_STATE) && qp->qp_type != IB_QPT_GSI && 2718 !udata && qp_params.new_state == QED_ROCE_QP_STATE_ERR) 2719 qp->state = QED_ROCE_QP_STATE_ERR; 2720 2721 if (qp->qp_type != IB_QPT_GSI) 2722 rc = dev->ops->rdma_modify_qp(dev->rdma_ctx, 2723 qp->qed_qp, &qp_params); 2724 2725 if (attr_mask & IB_QP_STATE) { 2726 if ((qp->qp_type != IB_QPT_GSI) && (!udata)) 2727 rc = qedr_update_qp_state(dev, qp, cur_state, 2728 qp_params.new_state); 2729 qp->state = qp_params.new_state; 2730 } 2731 2732 err: 2733 return rc; 2734 } 2735 2736 static int qedr_to_ib_qp_acc_flags(struct qed_rdma_query_qp_out_params *params) 2737 { 2738 int ib_qp_acc_flags = 0; 2739 2740 if (params->incoming_rdma_write_en) 2741 ib_qp_acc_flags |= IB_ACCESS_REMOTE_WRITE; 2742 if (params->incoming_rdma_read_en) 2743 ib_qp_acc_flags |= IB_ACCESS_REMOTE_READ; 2744 if (params->incoming_atomic_en) 2745 ib_qp_acc_flags |= IB_ACCESS_REMOTE_ATOMIC; 2746 ib_qp_acc_flags |= IB_ACCESS_LOCAL_WRITE; 2747 return ib_qp_acc_flags; 2748 } 2749 2750 int qedr_query_qp(struct ib_qp *ibqp, 2751 struct ib_qp_attr *qp_attr, 2752 int attr_mask, struct ib_qp_init_attr *qp_init_attr) 2753 { 2754 struct qed_rdma_query_qp_out_params params; 2755 struct qedr_qp *qp = get_qedr_qp(ibqp); 2756 struct qedr_dev *dev = qp->dev; 2757 int rc = 0; 2758 2759 memset(¶ms, 0, sizeof(params)); 2760 2761 rc = dev->ops->rdma_query_qp(dev->rdma_ctx, qp->qed_qp, ¶ms); 2762 if (rc) 2763 goto err; 2764 2765 memset(qp_attr, 0, sizeof(*qp_attr)); 2766 memset(qp_init_attr, 0, sizeof(*qp_init_attr)); 2767 2768 qp_attr->qp_state = qedr_get_ibqp_state(params.state); 2769 qp_attr->cur_qp_state = qedr_get_ibqp_state(params.state); 2770 qp_attr->path_mtu = ib_mtu_int_to_enum(params.mtu); 2771 qp_attr->path_mig_state = IB_MIG_MIGRATED; 2772 qp_attr->rq_psn = params.rq_psn; 2773 qp_attr->sq_psn = params.sq_psn; 2774 qp_attr->dest_qp_num = params.dest_qp; 2775 2776 qp_attr->qp_access_flags = qedr_to_ib_qp_acc_flags(¶ms); 2777 2778 qp_attr->cap.max_send_wr = qp->sq.max_wr; 2779 qp_attr->cap.max_recv_wr = qp->rq.max_wr; 2780 qp_attr->cap.max_send_sge = qp->sq.max_sges; 2781 qp_attr->cap.max_recv_sge = qp->rq.max_sges; 2782 qp_attr->cap.max_inline_data = dev->attr.max_inline; 2783 qp_init_attr->cap = qp_attr->cap; 2784 2785 qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE; 2786 rdma_ah_set_grh(&qp_attr->ah_attr, NULL, 2787 params.flow_label, qp->sgid_idx, 2788 params.hop_limit_ttl, params.traffic_class_tos); 2789 rdma_ah_set_dgid_raw(&qp_attr->ah_attr, ¶ms.dgid.bytes[0]); 2790 rdma_ah_set_port_num(&qp_attr->ah_attr, 1); 2791 rdma_ah_set_sl(&qp_attr->ah_attr, 0); 2792 qp_attr->timeout = params.timeout; 2793 qp_attr->rnr_retry = params.rnr_retry; 2794 qp_attr->retry_cnt = params.retry_cnt; 2795 qp_attr->min_rnr_timer = params.min_rnr_nak_timer; 2796 qp_attr->pkey_index = params.pkey_index; 2797 qp_attr->port_num = 1; 2798 rdma_ah_set_path_bits(&qp_attr->ah_attr, 0); 2799 rdma_ah_set_static_rate(&qp_attr->ah_attr, 0); 2800 qp_attr->alt_pkey_index = 0; 2801 qp_attr->alt_port_num = 0; 2802 qp_attr->alt_timeout = 0; 2803 memset(&qp_attr->alt_ah_attr, 0, sizeof(qp_attr->alt_ah_attr)); 2804 2805 qp_attr->sq_draining = (params.state == QED_ROCE_QP_STATE_SQD) ? 1 : 0; 2806 qp_attr->max_dest_rd_atomic = params.max_dest_rd_atomic; 2807 qp_attr->max_rd_atomic = params.max_rd_atomic; 2808 qp_attr->en_sqd_async_notify = (params.sqd_async) ? 1 : 0; 2809 2810 DP_DEBUG(dev, QEDR_MSG_QP, "QEDR_QUERY_QP: max_inline_data=%d\n", 2811 qp_attr->cap.max_inline_data); 2812 2813 err: 2814 return rc; 2815 } 2816 2817 int qedr_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata) 2818 { 2819 struct qedr_qp *qp = get_qedr_qp(ibqp); 2820 struct qedr_dev *dev = qp->dev; 2821 struct ib_qp_attr attr; 2822 int attr_mask = 0; 2823 2824 DP_DEBUG(dev, QEDR_MSG_QP, "destroy qp: destroying %p, qp type=%d\n", 2825 qp, qp->qp_type); 2826 2827 if (rdma_protocol_roce(&dev->ibdev, 1)) { 2828 if ((qp->state != QED_ROCE_QP_STATE_RESET) && 2829 (qp->state != QED_ROCE_QP_STATE_ERR) && 2830 (qp->state != QED_ROCE_QP_STATE_INIT)) { 2831 2832 attr.qp_state = IB_QPS_ERR; 2833 attr_mask |= IB_QP_STATE; 2834 2835 /* Change the QP state to ERROR */ 2836 qedr_modify_qp(ibqp, &attr, attr_mask, NULL); 2837 } 2838 } else { 2839 /* If connection establishment started the WAIT_FOR_CONNECT 2840 * bit will be on and we need to Wait for the establishment 2841 * to complete before destroying the qp. 2842 */ 2843 if (test_and_set_bit(QEDR_IWARP_CM_WAIT_FOR_CONNECT, 2844 &qp->iwarp_cm_flags)) 2845 wait_for_completion(&qp->iwarp_cm_comp); 2846 2847 /* If graceful disconnect started, the WAIT_FOR_DISCONNECT 2848 * bit will be on, and we need to wait for the disconnect to 2849 * complete before continuing. We can use the same completion, 2850 * iwarp_cm_comp, since this is the only place that waits for 2851 * this completion and it is sequential. In addition, 2852 * disconnect can't occur before the connection is fully 2853 * established, therefore if WAIT_FOR_DISCONNECT is on it 2854 * means WAIT_FOR_CONNECT is also on and the completion for 2855 * CONNECT already occurred. 2856 */ 2857 if (test_and_set_bit(QEDR_IWARP_CM_WAIT_FOR_DISCONNECT, 2858 &qp->iwarp_cm_flags)) 2859 wait_for_completion(&qp->iwarp_cm_comp); 2860 } 2861 2862 if (qp->qp_type == IB_QPT_GSI) 2863 qedr_destroy_gsi_qp(dev); 2864 2865 /* We need to remove the entry from the xarray before we release the 2866 * qp_id to avoid a race of the qp_id being reallocated and failing 2867 * on xa_insert 2868 */ 2869 if (rdma_protocol_iwarp(&dev->ibdev, 1)) 2870 xa_erase(&dev->qps, qp->qp_id); 2871 2872 qedr_free_qp_resources(dev, qp, udata); 2873 2874 if (rdma_protocol_iwarp(&dev->ibdev, 1)) 2875 qedr_iw_qp_rem_ref(&qp->ibqp); 2876 else 2877 kfree(qp); 2878 2879 return 0; 2880 } 2881 2882 int qedr_create_ah(struct ib_ah *ibah, struct rdma_ah_init_attr *init_attr, 2883 struct ib_udata *udata) 2884 { 2885 struct qedr_ah *ah = get_qedr_ah(ibah); 2886 2887 rdma_copy_ah_attr(&ah->attr, init_attr->ah_attr); 2888 2889 return 0; 2890 } 2891 2892 int qedr_destroy_ah(struct ib_ah *ibah, u32 flags) 2893 { 2894 struct qedr_ah *ah = get_qedr_ah(ibah); 2895 2896 rdma_destroy_ah_attr(&ah->attr); 2897 return 0; 2898 } 2899 2900 static void free_mr_info(struct qedr_dev *dev, struct mr_info *info) 2901 { 2902 struct qedr_pbl *pbl, *tmp; 2903 2904 if (info->pbl_table) 2905 list_add_tail(&info->pbl_table->list_entry, 2906 &info->free_pbl_list); 2907 2908 if (!list_empty(&info->inuse_pbl_list)) 2909 list_splice(&info->inuse_pbl_list, &info->free_pbl_list); 2910 2911 list_for_each_entry_safe(pbl, tmp, &info->free_pbl_list, list_entry) { 2912 list_del(&pbl->list_entry); 2913 qedr_free_pbl(dev, &info->pbl_info, pbl); 2914 } 2915 } 2916 2917 static int init_mr_info(struct qedr_dev *dev, struct mr_info *info, 2918 size_t page_list_len, bool two_layered) 2919 { 2920 struct qedr_pbl *tmp; 2921 int rc; 2922 2923 INIT_LIST_HEAD(&info->free_pbl_list); 2924 INIT_LIST_HEAD(&info->inuse_pbl_list); 2925 2926 rc = qedr_prepare_pbl_tbl(dev, &info->pbl_info, 2927 page_list_len, two_layered); 2928 if (rc) 2929 goto done; 2930 2931 info->pbl_table = qedr_alloc_pbl_tbl(dev, &info->pbl_info, GFP_KERNEL); 2932 if (IS_ERR(info->pbl_table)) { 2933 rc = PTR_ERR(info->pbl_table); 2934 goto done; 2935 } 2936 2937 DP_DEBUG(dev, QEDR_MSG_MR, "pbl_table_pa = %pa\n", 2938 &info->pbl_table->pa); 2939 2940 /* in usual case we use 2 PBLs, so we add one to free 2941 * list and allocating another one 2942 */ 2943 tmp = qedr_alloc_pbl_tbl(dev, &info->pbl_info, GFP_KERNEL); 2944 if (IS_ERR(tmp)) { 2945 DP_DEBUG(dev, QEDR_MSG_MR, "Extra PBL is not allocated\n"); 2946 goto done; 2947 } 2948 2949 list_add_tail(&tmp->list_entry, &info->free_pbl_list); 2950 2951 DP_DEBUG(dev, QEDR_MSG_MR, "extra pbl_table_pa = %pa\n", &tmp->pa); 2952 2953 done: 2954 if (rc) 2955 free_mr_info(dev, info); 2956 2957 return rc; 2958 } 2959 2960 struct ib_mr *qedr_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 len, 2961 u64 usr_addr, int acc, struct ib_udata *udata) 2962 { 2963 struct qedr_dev *dev = get_qedr_dev(ibpd->device); 2964 struct qedr_mr *mr; 2965 struct qedr_pd *pd; 2966 int rc = -ENOMEM; 2967 2968 pd = get_qedr_pd(ibpd); 2969 DP_DEBUG(dev, QEDR_MSG_MR, 2970 "qedr_register user mr pd = %d start = %lld, len = %lld, usr_addr = %lld, acc = %d\n", 2971 pd->pd_id, start, len, usr_addr, acc); 2972 2973 if (acc & IB_ACCESS_REMOTE_WRITE && !(acc & IB_ACCESS_LOCAL_WRITE)) 2974 return ERR_PTR(-EINVAL); 2975 2976 mr = kzalloc(sizeof(*mr), GFP_KERNEL); 2977 if (!mr) 2978 return ERR_PTR(rc); 2979 2980 mr->type = QEDR_MR_USER; 2981 2982 mr->umem = ib_umem_get(ibpd->device, start, len, acc); 2983 if (IS_ERR(mr->umem)) { 2984 rc = -EFAULT; 2985 goto err0; 2986 } 2987 2988 rc = init_mr_info(dev, &mr->info, 2989 ib_umem_num_dma_blocks(mr->umem, PAGE_SIZE), 1); 2990 if (rc) 2991 goto err1; 2992 2993 qedr_populate_pbls(dev, mr->umem, mr->info.pbl_table, 2994 &mr->info.pbl_info, PAGE_SHIFT); 2995 2996 rc = dev->ops->rdma_alloc_tid(dev->rdma_ctx, &mr->hw_mr.itid); 2997 if (rc) { 2998 DP_ERR(dev, "roce alloc tid returned an error %d\n", rc); 2999 goto err1; 3000 } 3001 3002 /* Index only, 18 bit long, lkey = itid << 8 | key */ 3003 mr->hw_mr.tid_type = QED_RDMA_TID_REGISTERED_MR; 3004 mr->hw_mr.key = 0; 3005 mr->hw_mr.pd = pd->pd_id; 3006 mr->hw_mr.local_read = 1; 3007 mr->hw_mr.local_write = (acc & IB_ACCESS_LOCAL_WRITE) ? 1 : 0; 3008 mr->hw_mr.remote_read = (acc & IB_ACCESS_REMOTE_READ) ? 1 : 0; 3009 mr->hw_mr.remote_write = (acc & IB_ACCESS_REMOTE_WRITE) ? 1 : 0; 3010 mr->hw_mr.remote_atomic = (acc & IB_ACCESS_REMOTE_ATOMIC) ? 1 : 0; 3011 mr->hw_mr.mw_bind = false; 3012 mr->hw_mr.pbl_ptr = mr->info.pbl_table[0].pa; 3013 mr->hw_mr.pbl_two_level = mr->info.pbl_info.two_layered; 3014 mr->hw_mr.pbl_page_size_log = ilog2(mr->info.pbl_info.pbl_size); 3015 mr->hw_mr.page_size_log = PAGE_SHIFT; 3016 mr->hw_mr.length = len; 3017 mr->hw_mr.vaddr = usr_addr; 3018 mr->hw_mr.phy_mr = false; 3019 mr->hw_mr.dma_mr = false; 3020 3021 rc = dev->ops->rdma_register_tid(dev->rdma_ctx, &mr->hw_mr); 3022 if (rc) { 3023 DP_ERR(dev, "roce register tid returned an error %d\n", rc); 3024 goto err2; 3025 } 3026 3027 mr->ibmr.lkey = mr->hw_mr.itid << 8 | mr->hw_mr.key; 3028 if (mr->hw_mr.remote_write || mr->hw_mr.remote_read || 3029 mr->hw_mr.remote_atomic) 3030 mr->ibmr.rkey = mr->hw_mr.itid << 8 | mr->hw_mr.key; 3031 3032 DP_DEBUG(dev, QEDR_MSG_MR, "register user mr lkey: %x\n", 3033 mr->ibmr.lkey); 3034 return &mr->ibmr; 3035 3036 err2: 3037 dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid); 3038 err1: 3039 qedr_free_pbl(dev, &mr->info.pbl_info, mr->info.pbl_table); 3040 err0: 3041 kfree(mr); 3042 return ERR_PTR(rc); 3043 } 3044 3045 int qedr_dereg_mr(struct ib_mr *ib_mr, struct ib_udata *udata) 3046 { 3047 struct qedr_mr *mr = get_qedr_mr(ib_mr); 3048 struct qedr_dev *dev = get_qedr_dev(ib_mr->device); 3049 int rc = 0; 3050 3051 rc = dev->ops->rdma_deregister_tid(dev->rdma_ctx, mr->hw_mr.itid); 3052 if (rc) 3053 return rc; 3054 3055 dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid); 3056 3057 if (mr->type != QEDR_MR_DMA) 3058 free_mr_info(dev, &mr->info); 3059 3060 /* it could be user registered memory. */ 3061 ib_umem_release(mr->umem); 3062 3063 kfree(mr); 3064 3065 return rc; 3066 } 3067 3068 static struct qedr_mr *__qedr_alloc_mr(struct ib_pd *ibpd, 3069 int max_page_list_len) 3070 { 3071 struct qedr_pd *pd = get_qedr_pd(ibpd); 3072 struct qedr_dev *dev = get_qedr_dev(ibpd->device); 3073 struct qedr_mr *mr; 3074 int rc = -ENOMEM; 3075 3076 DP_DEBUG(dev, QEDR_MSG_MR, 3077 "qedr_alloc_frmr pd = %d max_page_list_len= %d\n", pd->pd_id, 3078 max_page_list_len); 3079 3080 mr = kzalloc(sizeof(*mr), GFP_KERNEL); 3081 if (!mr) 3082 return ERR_PTR(rc); 3083 3084 mr->dev = dev; 3085 mr->type = QEDR_MR_FRMR; 3086 3087 rc = init_mr_info(dev, &mr->info, max_page_list_len, 1); 3088 if (rc) 3089 goto err0; 3090 3091 rc = dev->ops->rdma_alloc_tid(dev->rdma_ctx, &mr->hw_mr.itid); 3092 if (rc) { 3093 DP_ERR(dev, "roce alloc tid returned an error %d\n", rc); 3094 goto err0; 3095 } 3096 3097 /* Index only, 18 bit long, lkey = itid << 8 | key */ 3098 mr->hw_mr.tid_type = QED_RDMA_TID_FMR; 3099 mr->hw_mr.key = 0; 3100 mr->hw_mr.pd = pd->pd_id; 3101 mr->hw_mr.local_read = 1; 3102 mr->hw_mr.local_write = 0; 3103 mr->hw_mr.remote_read = 0; 3104 mr->hw_mr.remote_write = 0; 3105 mr->hw_mr.remote_atomic = 0; 3106 mr->hw_mr.mw_bind = false; 3107 mr->hw_mr.pbl_ptr = 0; 3108 mr->hw_mr.pbl_two_level = mr->info.pbl_info.two_layered; 3109 mr->hw_mr.pbl_page_size_log = ilog2(mr->info.pbl_info.pbl_size); 3110 mr->hw_mr.length = 0; 3111 mr->hw_mr.vaddr = 0; 3112 mr->hw_mr.phy_mr = true; 3113 mr->hw_mr.dma_mr = false; 3114 3115 rc = dev->ops->rdma_register_tid(dev->rdma_ctx, &mr->hw_mr); 3116 if (rc) { 3117 DP_ERR(dev, "roce register tid returned an error %d\n", rc); 3118 goto err1; 3119 } 3120 3121 mr->ibmr.lkey = mr->hw_mr.itid << 8 | mr->hw_mr.key; 3122 mr->ibmr.rkey = mr->ibmr.lkey; 3123 3124 DP_DEBUG(dev, QEDR_MSG_MR, "alloc frmr: %x\n", mr->ibmr.lkey); 3125 return mr; 3126 3127 err1: 3128 dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid); 3129 err0: 3130 kfree(mr); 3131 return ERR_PTR(rc); 3132 } 3133 3134 struct ib_mr *qedr_alloc_mr(struct ib_pd *ibpd, enum ib_mr_type mr_type, 3135 u32 max_num_sg) 3136 { 3137 struct qedr_mr *mr; 3138 3139 if (mr_type != IB_MR_TYPE_MEM_REG) 3140 return ERR_PTR(-EINVAL); 3141 3142 mr = __qedr_alloc_mr(ibpd, max_num_sg); 3143 3144 if (IS_ERR(mr)) 3145 return ERR_PTR(-EINVAL); 3146 3147 return &mr->ibmr; 3148 } 3149 3150 static int qedr_set_page(struct ib_mr *ibmr, u64 addr) 3151 { 3152 struct qedr_mr *mr = get_qedr_mr(ibmr); 3153 struct qedr_pbl *pbl_table; 3154 struct regpair *pbe; 3155 u32 pbes_in_page; 3156 3157 if (unlikely(mr->npages == mr->info.pbl_info.num_pbes)) { 3158 DP_ERR(mr->dev, "qedr_set_page fails when %d\n", mr->npages); 3159 return -ENOMEM; 3160 } 3161 3162 DP_DEBUG(mr->dev, QEDR_MSG_MR, "qedr_set_page pages[%d] = 0x%llx\n", 3163 mr->npages, addr); 3164 3165 pbes_in_page = mr->info.pbl_info.pbl_size / sizeof(u64); 3166 pbl_table = mr->info.pbl_table + (mr->npages / pbes_in_page); 3167 pbe = (struct regpair *)pbl_table->va; 3168 pbe += mr->npages % pbes_in_page; 3169 pbe->lo = cpu_to_le32((u32)addr); 3170 pbe->hi = cpu_to_le32((u32)upper_32_bits(addr)); 3171 3172 mr->npages++; 3173 3174 return 0; 3175 } 3176 3177 static void handle_completed_mrs(struct qedr_dev *dev, struct mr_info *info) 3178 { 3179 int work = info->completed - info->completed_handled - 1; 3180 3181 DP_DEBUG(dev, QEDR_MSG_MR, "Special FMR work = %d\n", work); 3182 while (work-- > 0 && !list_empty(&info->inuse_pbl_list)) { 3183 struct qedr_pbl *pbl; 3184 3185 /* Free all the page list that are possible to be freed 3186 * (all the ones that were invalidated), under the assumption 3187 * that if an FMR was completed successfully that means that 3188 * if there was an invalidate operation before it also ended 3189 */ 3190 pbl = list_first_entry(&info->inuse_pbl_list, 3191 struct qedr_pbl, list_entry); 3192 list_move_tail(&pbl->list_entry, &info->free_pbl_list); 3193 info->completed_handled++; 3194 } 3195 } 3196 3197 int qedr_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg, 3198 int sg_nents, unsigned int *sg_offset) 3199 { 3200 struct qedr_mr *mr = get_qedr_mr(ibmr); 3201 3202 mr->npages = 0; 3203 3204 handle_completed_mrs(mr->dev, &mr->info); 3205 return ib_sg_to_pages(ibmr, sg, sg_nents, NULL, qedr_set_page); 3206 } 3207 3208 struct ib_mr *qedr_get_dma_mr(struct ib_pd *ibpd, int acc) 3209 { 3210 struct qedr_dev *dev = get_qedr_dev(ibpd->device); 3211 struct qedr_pd *pd = get_qedr_pd(ibpd); 3212 struct qedr_mr *mr; 3213 int rc; 3214 3215 mr = kzalloc(sizeof(*mr), GFP_KERNEL); 3216 if (!mr) 3217 return ERR_PTR(-ENOMEM); 3218 3219 mr->type = QEDR_MR_DMA; 3220 3221 rc = dev->ops->rdma_alloc_tid(dev->rdma_ctx, &mr->hw_mr.itid); 3222 if (rc) { 3223 DP_ERR(dev, "roce alloc tid returned an error %d\n", rc); 3224 goto err1; 3225 } 3226 3227 /* index only, 18 bit long, lkey = itid << 8 | key */ 3228 mr->hw_mr.tid_type = QED_RDMA_TID_REGISTERED_MR; 3229 mr->hw_mr.pd = pd->pd_id; 3230 mr->hw_mr.local_read = 1; 3231 mr->hw_mr.local_write = (acc & IB_ACCESS_LOCAL_WRITE) ? 1 : 0; 3232 mr->hw_mr.remote_read = (acc & IB_ACCESS_REMOTE_READ) ? 1 : 0; 3233 mr->hw_mr.remote_write = (acc & IB_ACCESS_REMOTE_WRITE) ? 1 : 0; 3234 mr->hw_mr.remote_atomic = (acc & IB_ACCESS_REMOTE_ATOMIC) ? 1 : 0; 3235 mr->hw_mr.dma_mr = true; 3236 3237 rc = dev->ops->rdma_register_tid(dev->rdma_ctx, &mr->hw_mr); 3238 if (rc) { 3239 DP_ERR(dev, "roce register tid returned an error %d\n", rc); 3240 goto err2; 3241 } 3242 3243 mr->ibmr.lkey = mr->hw_mr.itid << 8 | mr->hw_mr.key; 3244 if (mr->hw_mr.remote_write || mr->hw_mr.remote_read || 3245 mr->hw_mr.remote_atomic) 3246 mr->ibmr.rkey = mr->hw_mr.itid << 8 | mr->hw_mr.key; 3247 3248 DP_DEBUG(dev, QEDR_MSG_MR, "get dma mr: lkey = %x\n", mr->ibmr.lkey); 3249 return &mr->ibmr; 3250 3251 err2: 3252 dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid); 3253 err1: 3254 kfree(mr); 3255 return ERR_PTR(rc); 3256 } 3257 3258 static inline int qedr_wq_is_full(struct qedr_qp_hwq_info *wq) 3259 { 3260 return (((wq->prod + 1) % wq->max_wr) == wq->cons); 3261 } 3262 3263 static int sge_data_len(struct ib_sge *sg_list, int num_sge) 3264 { 3265 int i, len = 0; 3266 3267 for (i = 0; i < num_sge; i++) 3268 len += sg_list[i].length; 3269 3270 return len; 3271 } 3272 3273 static void swap_wqe_data64(u64 *p) 3274 { 3275 int i; 3276 3277 for (i = 0; i < QEDR_SQE_ELEMENT_SIZE / sizeof(u64); i++, p++) 3278 *p = cpu_to_be64(cpu_to_le64(*p)); 3279 } 3280 3281 static u32 qedr_prepare_sq_inline_data(struct qedr_dev *dev, 3282 struct qedr_qp *qp, u8 *wqe_size, 3283 const struct ib_send_wr *wr, 3284 const struct ib_send_wr **bad_wr, 3285 u8 *bits, u8 bit) 3286 { 3287 u32 data_size = sge_data_len(wr->sg_list, wr->num_sge); 3288 char *seg_prt, *wqe; 3289 int i, seg_siz; 3290 3291 if (data_size > ROCE_REQ_MAX_INLINE_DATA_SIZE) { 3292 DP_ERR(dev, "Too much inline data in WR: %d\n", data_size); 3293 *bad_wr = wr; 3294 return 0; 3295 } 3296 3297 if (!data_size) 3298 return data_size; 3299 3300 *bits |= bit; 3301 3302 seg_prt = NULL; 3303 wqe = NULL; 3304 seg_siz = 0; 3305 3306 /* Copy data inline */ 3307 for (i = 0; i < wr->num_sge; i++) { 3308 u32 len = wr->sg_list[i].length; 3309 void *src = (void *)(uintptr_t)wr->sg_list[i].addr; 3310 3311 while (len > 0) { 3312 u32 cur; 3313 3314 /* New segment required */ 3315 if (!seg_siz) { 3316 wqe = (char *)qed_chain_produce(&qp->sq.pbl); 3317 seg_prt = wqe; 3318 seg_siz = sizeof(struct rdma_sq_common_wqe); 3319 (*wqe_size)++; 3320 } 3321 3322 /* Calculate currently allowed length */ 3323 cur = min_t(u32, len, seg_siz); 3324 memcpy(seg_prt, src, cur); 3325 3326 /* Update segment variables */ 3327 seg_prt += cur; 3328 seg_siz -= cur; 3329 3330 /* Update sge variables */ 3331 src += cur; 3332 len -= cur; 3333 3334 /* Swap fully-completed segments */ 3335 if (!seg_siz) 3336 swap_wqe_data64((u64 *)wqe); 3337 } 3338 } 3339 3340 /* swap last not completed segment */ 3341 if (seg_siz) 3342 swap_wqe_data64((u64 *)wqe); 3343 3344 return data_size; 3345 } 3346 3347 #define RQ_SGE_SET(sge, vaddr, vlength, vflags) \ 3348 do { \ 3349 DMA_REGPAIR_LE(sge->addr, vaddr); \ 3350 (sge)->length = cpu_to_le32(vlength); \ 3351 (sge)->flags = cpu_to_le32(vflags); \ 3352 } while (0) 3353 3354 #define SRQ_HDR_SET(hdr, vwr_id, num_sge) \ 3355 do { \ 3356 DMA_REGPAIR_LE(hdr->wr_id, vwr_id); \ 3357 (hdr)->num_sges = num_sge; \ 3358 } while (0) 3359 3360 #define SRQ_SGE_SET(sge, vaddr, vlength, vlkey) \ 3361 do { \ 3362 DMA_REGPAIR_LE(sge->addr, vaddr); \ 3363 (sge)->length = cpu_to_le32(vlength); \ 3364 (sge)->l_key = cpu_to_le32(vlkey); \ 3365 } while (0) 3366 3367 static u32 qedr_prepare_sq_sges(struct qedr_qp *qp, u8 *wqe_size, 3368 const struct ib_send_wr *wr) 3369 { 3370 u32 data_size = 0; 3371 int i; 3372 3373 for (i = 0; i < wr->num_sge; i++) { 3374 struct rdma_sq_sge *sge = qed_chain_produce(&qp->sq.pbl); 3375 3376 DMA_REGPAIR_LE(sge->addr, wr->sg_list[i].addr); 3377 sge->l_key = cpu_to_le32(wr->sg_list[i].lkey); 3378 sge->length = cpu_to_le32(wr->sg_list[i].length); 3379 data_size += wr->sg_list[i].length; 3380 } 3381 3382 if (wqe_size) 3383 *wqe_size += wr->num_sge; 3384 3385 return data_size; 3386 } 3387 3388 static u32 qedr_prepare_sq_rdma_data(struct qedr_dev *dev, 3389 struct qedr_qp *qp, 3390 struct rdma_sq_rdma_wqe_1st *rwqe, 3391 struct rdma_sq_rdma_wqe_2nd *rwqe2, 3392 const struct ib_send_wr *wr, 3393 const struct ib_send_wr **bad_wr) 3394 { 3395 rwqe2->r_key = cpu_to_le32(rdma_wr(wr)->rkey); 3396 DMA_REGPAIR_LE(rwqe2->remote_va, rdma_wr(wr)->remote_addr); 3397 3398 if (wr->send_flags & IB_SEND_INLINE && 3399 (wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM || 3400 wr->opcode == IB_WR_RDMA_WRITE)) { 3401 u8 flags = 0; 3402 3403 SET_FIELD2(flags, RDMA_SQ_RDMA_WQE_1ST_INLINE_FLG, 1); 3404 return qedr_prepare_sq_inline_data(dev, qp, &rwqe->wqe_size, wr, 3405 bad_wr, &rwqe->flags, flags); 3406 } 3407 3408 return qedr_prepare_sq_sges(qp, &rwqe->wqe_size, wr); 3409 } 3410 3411 static u32 qedr_prepare_sq_send_data(struct qedr_dev *dev, 3412 struct qedr_qp *qp, 3413 struct rdma_sq_send_wqe_1st *swqe, 3414 struct rdma_sq_send_wqe_2st *swqe2, 3415 const struct ib_send_wr *wr, 3416 const struct ib_send_wr **bad_wr) 3417 { 3418 memset(swqe2, 0, sizeof(*swqe2)); 3419 if (wr->send_flags & IB_SEND_INLINE) { 3420 u8 flags = 0; 3421 3422 SET_FIELD2(flags, RDMA_SQ_SEND_WQE_INLINE_FLG, 1); 3423 return qedr_prepare_sq_inline_data(dev, qp, &swqe->wqe_size, wr, 3424 bad_wr, &swqe->flags, flags); 3425 } 3426 3427 return qedr_prepare_sq_sges(qp, &swqe->wqe_size, wr); 3428 } 3429 3430 static int qedr_prepare_reg(struct qedr_qp *qp, 3431 struct rdma_sq_fmr_wqe_1st *fwqe1, 3432 const struct ib_reg_wr *wr) 3433 { 3434 struct qedr_mr *mr = get_qedr_mr(wr->mr); 3435 struct rdma_sq_fmr_wqe_2nd *fwqe2; 3436 3437 fwqe2 = (struct rdma_sq_fmr_wqe_2nd *)qed_chain_produce(&qp->sq.pbl); 3438 fwqe1->addr.hi = upper_32_bits(mr->ibmr.iova); 3439 fwqe1->addr.lo = lower_32_bits(mr->ibmr.iova); 3440 fwqe1->l_key = wr->key; 3441 3442 fwqe2->access_ctrl = 0; 3443 3444 SET_FIELD2(fwqe2->access_ctrl, RDMA_SQ_FMR_WQE_2ND_REMOTE_READ, 3445 !!(wr->access & IB_ACCESS_REMOTE_READ)); 3446 SET_FIELD2(fwqe2->access_ctrl, RDMA_SQ_FMR_WQE_2ND_REMOTE_WRITE, 3447 !!(wr->access & IB_ACCESS_REMOTE_WRITE)); 3448 SET_FIELD2(fwqe2->access_ctrl, RDMA_SQ_FMR_WQE_2ND_ENABLE_ATOMIC, 3449 !!(wr->access & IB_ACCESS_REMOTE_ATOMIC)); 3450 SET_FIELD2(fwqe2->access_ctrl, RDMA_SQ_FMR_WQE_2ND_LOCAL_READ, 1); 3451 SET_FIELD2(fwqe2->access_ctrl, RDMA_SQ_FMR_WQE_2ND_LOCAL_WRITE, 3452 !!(wr->access & IB_ACCESS_LOCAL_WRITE)); 3453 fwqe2->fmr_ctrl = 0; 3454 3455 SET_FIELD2(fwqe2->fmr_ctrl, RDMA_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG, 3456 ilog2(mr->ibmr.page_size) - 12); 3457 3458 fwqe2->length_hi = 0; 3459 fwqe2->length_lo = mr->ibmr.length; 3460 fwqe2->pbl_addr.hi = upper_32_bits(mr->info.pbl_table->pa); 3461 fwqe2->pbl_addr.lo = lower_32_bits(mr->info.pbl_table->pa); 3462 3463 qp->wqe_wr_id[qp->sq.prod].mr = mr; 3464 3465 return 0; 3466 } 3467 3468 static enum ib_wc_opcode qedr_ib_to_wc_opcode(enum ib_wr_opcode opcode) 3469 { 3470 switch (opcode) { 3471 case IB_WR_RDMA_WRITE: 3472 case IB_WR_RDMA_WRITE_WITH_IMM: 3473 return IB_WC_RDMA_WRITE; 3474 case IB_WR_SEND_WITH_IMM: 3475 case IB_WR_SEND: 3476 case IB_WR_SEND_WITH_INV: 3477 return IB_WC_SEND; 3478 case IB_WR_RDMA_READ: 3479 case IB_WR_RDMA_READ_WITH_INV: 3480 return IB_WC_RDMA_READ; 3481 case IB_WR_ATOMIC_CMP_AND_SWP: 3482 return IB_WC_COMP_SWAP; 3483 case IB_WR_ATOMIC_FETCH_AND_ADD: 3484 return IB_WC_FETCH_ADD; 3485 case IB_WR_REG_MR: 3486 return IB_WC_REG_MR; 3487 case IB_WR_LOCAL_INV: 3488 return IB_WC_LOCAL_INV; 3489 default: 3490 return IB_WC_SEND; 3491 } 3492 } 3493 3494 static inline bool qedr_can_post_send(struct qedr_qp *qp, 3495 const struct ib_send_wr *wr) 3496 { 3497 int wq_is_full, err_wr, pbl_is_full; 3498 struct qedr_dev *dev = qp->dev; 3499 3500 /* prevent SQ overflow and/or processing of a bad WR */ 3501 err_wr = wr->num_sge > qp->sq.max_sges; 3502 wq_is_full = qedr_wq_is_full(&qp->sq); 3503 pbl_is_full = qed_chain_get_elem_left_u32(&qp->sq.pbl) < 3504 QEDR_MAX_SQE_ELEMENTS_PER_SQE; 3505 if (wq_is_full || err_wr || pbl_is_full) { 3506 if (wq_is_full && !(qp->err_bitmap & QEDR_QP_ERR_SQ_FULL)) { 3507 DP_ERR(dev, 3508 "error: WQ is full. Post send on QP %p failed (this error appears only once)\n", 3509 qp); 3510 qp->err_bitmap |= QEDR_QP_ERR_SQ_FULL; 3511 } 3512 3513 if (err_wr && !(qp->err_bitmap & QEDR_QP_ERR_BAD_SR)) { 3514 DP_ERR(dev, 3515 "error: WR is bad. Post send on QP %p failed (this error appears only once)\n", 3516 qp); 3517 qp->err_bitmap |= QEDR_QP_ERR_BAD_SR; 3518 } 3519 3520 if (pbl_is_full && 3521 !(qp->err_bitmap & QEDR_QP_ERR_SQ_PBL_FULL)) { 3522 DP_ERR(dev, 3523 "error: WQ PBL is full. Post send on QP %p failed (this error appears only once)\n", 3524 qp); 3525 qp->err_bitmap |= QEDR_QP_ERR_SQ_PBL_FULL; 3526 } 3527 return false; 3528 } 3529 return true; 3530 } 3531 3532 static int __qedr_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr, 3533 const struct ib_send_wr **bad_wr) 3534 { 3535 struct qedr_dev *dev = get_qedr_dev(ibqp->device); 3536 struct qedr_qp *qp = get_qedr_qp(ibqp); 3537 struct rdma_sq_atomic_wqe_1st *awqe1; 3538 struct rdma_sq_atomic_wqe_2nd *awqe2; 3539 struct rdma_sq_atomic_wqe_3rd *awqe3; 3540 struct rdma_sq_send_wqe_2st *swqe2; 3541 struct rdma_sq_local_inv_wqe *iwqe; 3542 struct rdma_sq_rdma_wqe_2nd *rwqe2; 3543 struct rdma_sq_send_wqe_1st *swqe; 3544 struct rdma_sq_rdma_wqe_1st *rwqe; 3545 struct rdma_sq_fmr_wqe_1st *fwqe1; 3546 struct rdma_sq_common_wqe *wqe; 3547 u32 length; 3548 int rc = 0; 3549 bool comp; 3550 3551 if (!qedr_can_post_send(qp, wr)) { 3552 *bad_wr = wr; 3553 return -ENOMEM; 3554 } 3555 3556 wqe = qed_chain_produce(&qp->sq.pbl); 3557 qp->wqe_wr_id[qp->sq.prod].signaled = 3558 !!(wr->send_flags & IB_SEND_SIGNALED) || qp->signaled; 3559 3560 wqe->flags = 0; 3561 SET_FIELD2(wqe->flags, RDMA_SQ_SEND_WQE_SE_FLG, 3562 !!(wr->send_flags & IB_SEND_SOLICITED)); 3563 comp = (!!(wr->send_flags & IB_SEND_SIGNALED)) || qp->signaled; 3564 SET_FIELD2(wqe->flags, RDMA_SQ_SEND_WQE_COMP_FLG, comp); 3565 SET_FIELD2(wqe->flags, RDMA_SQ_SEND_WQE_RD_FENCE_FLG, 3566 !!(wr->send_flags & IB_SEND_FENCE)); 3567 wqe->prev_wqe_size = qp->prev_wqe_size; 3568 3569 qp->wqe_wr_id[qp->sq.prod].opcode = qedr_ib_to_wc_opcode(wr->opcode); 3570 3571 switch (wr->opcode) { 3572 case IB_WR_SEND_WITH_IMM: 3573 if (unlikely(rdma_protocol_iwarp(&dev->ibdev, 1))) { 3574 rc = -EINVAL; 3575 *bad_wr = wr; 3576 break; 3577 } 3578 wqe->req_type = RDMA_SQ_REQ_TYPE_SEND_WITH_IMM; 3579 swqe = (struct rdma_sq_send_wqe_1st *)wqe; 3580 swqe->wqe_size = 2; 3581 swqe2 = qed_chain_produce(&qp->sq.pbl); 3582 3583 swqe->inv_key_or_imm_data = cpu_to_le32(be32_to_cpu(wr->ex.imm_data)); 3584 length = qedr_prepare_sq_send_data(dev, qp, swqe, swqe2, 3585 wr, bad_wr); 3586 swqe->length = cpu_to_le32(length); 3587 qp->wqe_wr_id[qp->sq.prod].wqe_size = swqe->wqe_size; 3588 qp->prev_wqe_size = swqe->wqe_size; 3589 qp->wqe_wr_id[qp->sq.prod].bytes_len = swqe->length; 3590 break; 3591 case IB_WR_SEND: 3592 wqe->req_type = RDMA_SQ_REQ_TYPE_SEND; 3593 swqe = (struct rdma_sq_send_wqe_1st *)wqe; 3594 3595 swqe->wqe_size = 2; 3596 swqe2 = qed_chain_produce(&qp->sq.pbl); 3597 length = qedr_prepare_sq_send_data(dev, qp, swqe, swqe2, 3598 wr, bad_wr); 3599 swqe->length = cpu_to_le32(length); 3600 qp->wqe_wr_id[qp->sq.prod].wqe_size = swqe->wqe_size; 3601 qp->prev_wqe_size = swqe->wqe_size; 3602 qp->wqe_wr_id[qp->sq.prod].bytes_len = swqe->length; 3603 break; 3604 case IB_WR_SEND_WITH_INV: 3605 wqe->req_type = RDMA_SQ_REQ_TYPE_SEND_WITH_INVALIDATE; 3606 swqe = (struct rdma_sq_send_wqe_1st *)wqe; 3607 swqe2 = qed_chain_produce(&qp->sq.pbl); 3608 swqe->wqe_size = 2; 3609 swqe->inv_key_or_imm_data = cpu_to_le32(wr->ex.invalidate_rkey); 3610 length = qedr_prepare_sq_send_data(dev, qp, swqe, swqe2, 3611 wr, bad_wr); 3612 swqe->length = cpu_to_le32(length); 3613 qp->wqe_wr_id[qp->sq.prod].wqe_size = swqe->wqe_size; 3614 qp->prev_wqe_size = swqe->wqe_size; 3615 qp->wqe_wr_id[qp->sq.prod].bytes_len = swqe->length; 3616 break; 3617 3618 case IB_WR_RDMA_WRITE_WITH_IMM: 3619 if (unlikely(rdma_protocol_iwarp(&dev->ibdev, 1))) { 3620 rc = -EINVAL; 3621 *bad_wr = wr; 3622 break; 3623 } 3624 wqe->req_type = RDMA_SQ_REQ_TYPE_RDMA_WR_WITH_IMM; 3625 rwqe = (struct rdma_sq_rdma_wqe_1st *)wqe; 3626 3627 rwqe->wqe_size = 2; 3628 rwqe->imm_data = htonl(cpu_to_le32(wr->ex.imm_data)); 3629 rwqe2 = qed_chain_produce(&qp->sq.pbl); 3630 length = qedr_prepare_sq_rdma_data(dev, qp, rwqe, rwqe2, 3631 wr, bad_wr); 3632 rwqe->length = cpu_to_le32(length); 3633 qp->wqe_wr_id[qp->sq.prod].wqe_size = rwqe->wqe_size; 3634 qp->prev_wqe_size = rwqe->wqe_size; 3635 qp->wqe_wr_id[qp->sq.prod].bytes_len = rwqe->length; 3636 break; 3637 case IB_WR_RDMA_WRITE: 3638 wqe->req_type = RDMA_SQ_REQ_TYPE_RDMA_WR; 3639 rwqe = (struct rdma_sq_rdma_wqe_1st *)wqe; 3640 3641 rwqe->wqe_size = 2; 3642 rwqe2 = qed_chain_produce(&qp->sq.pbl); 3643 length = qedr_prepare_sq_rdma_data(dev, qp, rwqe, rwqe2, 3644 wr, bad_wr); 3645 rwqe->length = cpu_to_le32(length); 3646 qp->wqe_wr_id[qp->sq.prod].wqe_size = rwqe->wqe_size; 3647 qp->prev_wqe_size = rwqe->wqe_size; 3648 qp->wqe_wr_id[qp->sq.prod].bytes_len = rwqe->length; 3649 break; 3650 case IB_WR_RDMA_READ_WITH_INV: 3651 SET_FIELD2(wqe->flags, RDMA_SQ_RDMA_WQE_1ST_READ_INV_FLG, 1); 3652 fallthrough; /* same is identical to RDMA READ */ 3653 3654 case IB_WR_RDMA_READ: 3655 wqe->req_type = RDMA_SQ_REQ_TYPE_RDMA_RD; 3656 rwqe = (struct rdma_sq_rdma_wqe_1st *)wqe; 3657 3658 rwqe->wqe_size = 2; 3659 rwqe2 = qed_chain_produce(&qp->sq.pbl); 3660 length = qedr_prepare_sq_rdma_data(dev, qp, rwqe, rwqe2, 3661 wr, bad_wr); 3662 rwqe->length = cpu_to_le32(length); 3663 qp->wqe_wr_id[qp->sq.prod].wqe_size = rwqe->wqe_size; 3664 qp->prev_wqe_size = rwqe->wqe_size; 3665 qp->wqe_wr_id[qp->sq.prod].bytes_len = rwqe->length; 3666 break; 3667 3668 case IB_WR_ATOMIC_CMP_AND_SWP: 3669 case IB_WR_ATOMIC_FETCH_AND_ADD: 3670 awqe1 = (struct rdma_sq_atomic_wqe_1st *)wqe; 3671 awqe1->wqe_size = 4; 3672 3673 awqe2 = qed_chain_produce(&qp->sq.pbl); 3674 DMA_REGPAIR_LE(awqe2->remote_va, atomic_wr(wr)->remote_addr); 3675 awqe2->r_key = cpu_to_le32(atomic_wr(wr)->rkey); 3676 3677 awqe3 = qed_chain_produce(&qp->sq.pbl); 3678 3679 if (wr->opcode == IB_WR_ATOMIC_FETCH_AND_ADD) { 3680 wqe->req_type = RDMA_SQ_REQ_TYPE_ATOMIC_ADD; 3681 DMA_REGPAIR_LE(awqe3->swap_data, 3682 atomic_wr(wr)->compare_add); 3683 } else { 3684 wqe->req_type = RDMA_SQ_REQ_TYPE_ATOMIC_CMP_AND_SWAP; 3685 DMA_REGPAIR_LE(awqe3->swap_data, 3686 atomic_wr(wr)->swap); 3687 DMA_REGPAIR_LE(awqe3->cmp_data, 3688 atomic_wr(wr)->compare_add); 3689 } 3690 3691 qedr_prepare_sq_sges(qp, NULL, wr); 3692 3693 qp->wqe_wr_id[qp->sq.prod].wqe_size = awqe1->wqe_size; 3694 qp->prev_wqe_size = awqe1->wqe_size; 3695 break; 3696 3697 case IB_WR_LOCAL_INV: 3698 iwqe = (struct rdma_sq_local_inv_wqe *)wqe; 3699 iwqe->wqe_size = 1; 3700 3701 iwqe->req_type = RDMA_SQ_REQ_TYPE_LOCAL_INVALIDATE; 3702 iwqe->inv_l_key = wr->ex.invalidate_rkey; 3703 qp->wqe_wr_id[qp->sq.prod].wqe_size = iwqe->wqe_size; 3704 qp->prev_wqe_size = iwqe->wqe_size; 3705 break; 3706 case IB_WR_REG_MR: 3707 DP_DEBUG(dev, QEDR_MSG_CQ, "REG_MR\n"); 3708 wqe->req_type = RDMA_SQ_REQ_TYPE_FAST_MR; 3709 fwqe1 = (struct rdma_sq_fmr_wqe_1st *)wqe; 3710 fwqe1->wqe_size = 2; 3711 3712 rc = qedr_prepare_reg(qp, fwqe1, reg_wr(wr)); 3713 if (rc) { 3714 DP_ERR(dev, "IB_REG_MR failed rc=%d\n", rc); 3715 *bad_wr = wr; 3716 break; 3717 } 3718 3719 qp->wqe_wr_id[qp->sq.prod].wqe_size = fwqe1->wqe_size; 3720 qp->prev_wqe_size = fwqe1->wqe_size; 3721 break; 3722 default: 3723 DP_ERR(dev, "invalid opcode 0x%x!\n", wr->opcode); 3724 rc = -EINVAL; 3725 *bad_wr = wr; 3726 break; 3727 } 3728 3729 if (*bad_wr) { 3730 u16 value; 3731 3732 /* Restore prod to its position before 3733 * this WR was processed 3734 */ 3735 value = le16_to_cpu(qp->sq.db_data.data.value); 3736 qed_chain_set_prod(&qp->sq.pbl, value, wqe); 3737 3738 /* Restore prev_wqe_size */ 3739 qp->prev_wqe_size = wqe->prev_wqe_size; 3740 rc = -EINVAL; 3741 DP_ERR(dev, "POST SEND FAILED\n"); 3742 } 3743 3744 return rc; 3745 } 3746 3747 int qedr_post_send(struct ib_qp *ibqp, const struct ib_send_wr *wr, 3748 const struct ib_send_wr **bad_wr) 3749 { 3750 struct qedr_dev *dev = get_qedr_dev(ibqp->device); 3751 struct qedr_qp *qp = get_qedr_qp(ibqp); 3752 unsigned long flags; 3753 int rc = 0; 3754 3755 *bad_wr = NULL; 3756 3757 if (qp->qp_type == IB_QPT_GSI) 3758 return qedr_gsi_post_send(ibqp, wr, bad_wr); 3759 3760 spin_lock_irqsave(&qp->q_lock, flags); 3761 3762 if (rdma_protocol_roce(&dev->ibdev, 1)) { 3763 if ((qp->state != QED_ROCE_QP_STATE_RTS) && 3764 (qp->state != QED_ROCE_QP_STATE_ERR) && 3765 (qp->state != QED_ROCE_QP_STATE_SQD)) { 3766 spin_unlock_irqrestore(&qp->q_lock, flags); 3767 *bad_wr = wr; 3768 DP_DEBUG(dev, QEDR_MSG_CQ, 3769 "QP in wrong state! QP icid=0x%x state %d\n", 3770 qp->icid, qp->state); 3771 return -EINVAL; 3772 } 3773 } 3774 3775 while (wr) { 3776 rc = __qedr_post_send(ibqp, wr, bad_wr); 3777 if (rc) 3778 break; 3779 3780 qp->wqe_wr_id[qp->sq.prod].wr_id = wr->wr_id; 3781 3782 qedr_inc_sw_prod(&qp->sq); 3783 3784 qp->sq.db_data.data.value++; 3785 3786 wr = wr->next; 3787 } 3788 3789 /* Trigger doorbell 3790 * If there was a failure in the first WR then it will be triggered in 3791 * vane. However this is not harmful (as long as the producer value is 3792 * unchanged). For performance reasons we avoid checking for this 3793 * redundant doorbell. 3794 * 3795 * qp->wqe_wr_id is accessed during qedr_poll_cq, as 3796 * soon as we give the doorbell, we could get a completion 3797 * for this wr, therefore we need to make sure that the 3798 * memory is updated before giving the doorbell. 3799 * During qedr_poll_cq, rmb is called before accessing the 3800 * cqe. This covers for the smp_rmb as well. 3801 */ 3802 smp_wmb(); 3803 writel(qp->sq.db_data.raw, qp->sq.db); 3804 3805 spin_unlock_irqrestore(&qp->q_lock, flags); 3806 3807 return rc; 3808 } 3809 3810 static u32 qedr_srq_elem_left(struct qedr_srq_hwq_info *hw_srq) 3811 { 3812 u32 used; 3813 3814 /* Calculate number of elements used based on producer 3815 * count and consumer count and subtract it from max 3816 * work request supported so that we get elements left. 3817 */ 3818 used = hw_srq->wr_prod_cnt - (u32)atomic_read(&hw_srq->wr_cons_cnt); 3819 3820 return hw_srq->max_wr - used; 3821 } 3822 3823 int qedr_post_srq_recv(struct ib_srq *ibsrq, const struct ib_recv_wr *wr, 3824 const struct ib_recv_wr **bad_wr) 3825 { 3826 struct qedr_srq *srq = get_qedr_srq(ibsrq); 3827 struct qedr_srq_hwq_info *hw_srq; 3828 struct qedr_dev *dev = srq->dev; 3829 struct qed_chain *pbl; 3830 unsigned long flags; 3831 int status = 0; 3832 u32 num_sge; 3833 3834 spin_lock_irqsave(&srq->lock, flags); 3835 3836 hw_srq = &srq->hw_srq; 3837 pbl = &srq->hw_srq.pbl; 3838 while (wr) { 3839 struct rdma_srq_wqe_header *hdr; 3840 int i; 3841 3842 if (!qedr_srq_elem_left(hw_srq) || 3843 wr->num_sge > srq->hw_srq.max_sges) { 3844 DP_ERR(dev, "Can't post WR (%d,%d) || (%d > %d)\n", 3845 hw_srq->wr_prod_cnt, 3846 atomic_read(&hw_srq->wr_cons_cnt), 3847 wr->num_sge, srq->hw_srq.max_sges); 3848 status = -ENOMEM; 3849 *bad_wr = wr; 3850 break; 3851 } 3852 3853 hdr = qed_chain_produce(pbl); 3854 num_sge = wr->num_sge; 3855 /* Set number of sge and work request id in header */ 3856 SRQ_HDR_SET(hdr, wr->wr_id, num_sge); 3857 3858 srq->hw_srq.wr_prod_cnt++; 3859 hw_srq->wqe_prod++; 3860 hw_srq->sge_prod++; 3861 3862 DP_DEBUG(dev, QEDR_MSG_SRQ, 3863 "SRQ WR: SGEs: %d with wr_id[%d] = %llx\n", 3864 wr->num_sge, hw_srq->wqe_prod, wr->wr_id); 3865 3866 for (i = 0; i < wr->num_sge; i++) { 3867 struct rdma_srq_sge *srq_sge = qed_chain_produce(pbl); 3868 3869 /* Set SGE length, lkey and address */ 3870 SRQ_SGE_SET(srq_sge, wr->sg_list[i].addr, 3871 wr->sg_list[i].length, wr->sg_list[i].lkey); 3872 3873 DP_DEBUG(dev, QEDR_MSG_SRQ, 3874 "[%d]: len %d key %x addr %x:%x\n", 3875 i, srq_sge->length, srq_sge->l_key, 3876 srq_sge->addr.hi, srq_sge->addr.lo); 3877 hw_srq->sge_prod++; 3878 } 3879 3880 /* Update WQE and SGE information before 3881 * updating producer. 3882 */ 3883 dma_wmb(); 3884 3885 /* SRQ producer is 8 bytes. Need to update SGE producer index 3886 * in first 4 bytes and need to update WQE producer in 3887 * next 4 bytes. 3888 */ 3889 srq->hw_srq.virt_prod_pair_addr->sge_prod = cpu_to_le32(hw_srq->sge_prod); 3890 /* Make sure sge producer is updated first */ 3891 dma_wmb(); 3892 srq->hw_srq.virt_prod_pair_addr->wqe_prod = cpu_to_le32(hw_srq->wqe_prod); 3893 3894 wr = wr->next; 3895 } 3896 3897 DP_DEBUG(dev, QEDR_MSG_SRQ, "POST: Elements in S-RQ: %d\n", 3898 qed_chain_get_elem_left(pbl)); 3899 spin_unlock_irqrestore(&srq->lock, flags); 3900 3901 return status; 3902 } 3903 3904 int qedr_post_recv(struct ib_qp *ibqp, const struct ib_recv_wr *wr, 3905 const struct ib_recv_wr **bad_wr) 3906 { 3907 struct qedr_qp *qp = get_qedr_qp(ibqp); 3908 struct qedr_dev *dev = qp->dev; 3909 unsigned long flags; 3910 int status = 0; 3911 3912 if (qp->qp_type == IB_QPT_GSI) 3913 return qedr_gsi_post_recv(ibqp, wr, bad_wr); 3914 3915 spin_lock_irqsave(&qp->q_lock, flags); 3916 3917 if (qp->state == QED_ROCE_QP_STATE_RESET) { 3918 spin_unlock_irqrestore(&qp->q_lock, flags); 3919 *bad_wr = wr; 3920 return -EINVAL; 3921 } 3922 3923 while (wr) { 3924 int i; 3925 3926 if (qed_chain_get_elem_left_u32(&qp->rq.pbl) < 3927 QEDR_MAX_RQE_ELEMENTS_PER_RQE || 3928 wr->num_sge > qp->rq.max_sges) { 3929 DP_ERR(dev, "Can't post WR (%d < %d) || (%d > %d)\n", 3930 qed_chain_get_elem_left_u32(&qp->rq.pbl), 3931 QEDR_MAX_RQE_ELEMENTS_PER_RQE, wr->num_sge, 3932 qp->rq.max_sges); 3933 status = -ENOMEM; 3934 *bad_wr = wr; 3935 break; 3936 } 3937 for (i = 0; i < wr->num_sge; i++) { 3938 u32 flags = 0; 3939 struct rdma_rq_sge *rqe = 3940 qed_chain_produce(&qp->rq.pbl); 3941 3942 /* First one must include the number 3943 * of SGE in the list 3944 */ 3945 if (!i) 3946 SET_FIELD(flags, RDMA_RQ_SGE_NUM_SGES, 3947 wr->num_sge); 3948 3949 SET_FIELD(flags, RDMA_RQ_SGE_L_KEY_LO, 3950 wr->sg_list[i].lkey); 3951 3952 RQ_SGE_SET(rqe, wr->sg_list[i].addr, 3953 wr->sg_list[i].length, flags); 3954 } 3955 3956 /* Special case of no sges. FW requires between 1-4 sges... 3957 * in this case we need to post 1 sge with length zero. this is 3958 * because rdma write with immediate consumes an RQ. 3959 */ 3960 if (!wr->num_sge) { 3961 u32 flags = 0; 3962 struct rdma_rq_sge *rqe = 3963 qed_chain_produce(&qp->rq.pbl); 3964 3965 /* First one must include the number 3966 * of SGE in the list 3967 */ 3968 SET_FIELD(flags, RDMA_RQ_SGE_L_KEY_LO, 0); 3969 SET_FIELD(flags, RDMA_RQ_SGE_NUM_SGES, 1); 3970 3971 RQ_SGE_SET(rqe, 0, 0, flags); 3972 i = 1; 3973 } 3974 3975 qp->rqe_wr_id[qp->rq.prod].wr_id = wr->wr_id; 3976 qp->rqe_wr_id[qp->rq.prod].wqe_size = i; 3977 3978 qedr_inc_sw_prod(&qp->rq); 3979 3980 /* qp->rqe_wr_id is accessed during qedr_poll_cq, as 3981 * soon as we give the doorbell, we could get a completion 3982 * for this wr, therefore we need to make sure that the 3983 * memory is update before giving the doorbell. 3984 * During qedr_poll_cq, rmb is called before accessing the 3985 * cqe. This covers for the smp_rmb as well. 3986 */ 3987 smp_wmb(); 3988 3989 qp->rq.db_data.data.value++; 3990 3991 writel(qp->rq.db_data.raw, qp->rq.db); 3992 3993 if (rdma_protocol_iwarp(&dev->ibdev, 1)) { 3994 writel(qp->rq.iwarp_db2_data.raw, qp->rq.iwarp_db2); 3995 } 3996 3997 wr = wr->next; 3998 } 3999 4000 spin_unlock_irqrestore(&qp->q_lock, flags); 4001 4002 return status; 4003 } 4004 4005 static int is_valid_cqe(struct qedr_cq *cq, union rdma_cqe *cqe) 4006 { 4007 struct rdma_cqe_requester *resp_cqe = &cqe->req; 4008 4009 return (resp_cqe->flags & RDMA_CQE_REQUESTER_TOGGLE_BIT_MASK) == 4010 cq->pbl_toggle; 4011 } 4012 4013 static struct qedr_qp *cqe_get_qp(union rdma_cqe *cqe) 4014 { 4015 struct rdma_cqe_requester *resp_cqe = &cqe->req; 4016 struct qedr_qp *qp; 4017 4018 qp = (struct qedr_qp *)(uintptr_t)HILO_GEN(resp_cqe->qp_handle.hi, 4019 resp_cqe->qp_handle.lo, 4020 u64); 4021 return qp; 4022 } 4023 4024 static enum rdma_cqe_type cqe_get_type(union rdma_cqe *cqe) 4025 { 4026 struct rdma_cqe_requester *resp_cqe = &cqe->req; 4027 4028 return GET_FIELD(resp_cqe->flags, RDMA_CQE_REQUESTER_TYPE); 4029 } 4030 4031 /* Return latest CQE (needs processing) */ 4032 static union rdma_cqe *get_cqe(struct qedr_cq *cq) 4033 { 4034 return cq->latest_cqe; 4035 } 4036 4037 /* In fmr we need to increase the number of fmr completed counter for the fmr 4038 * algorithm determining whether we can free a pbl or not. 4039 * we need to perform this whether the work request was signaled or not. for 4040 * this purpose we call this function from the condition that checks if a wr 4041 * should be skipped, to make sure we don't miss it ( possibly this fmr 4042 * operation was not signalted) 4043 */ 4044 static inline void qedr_chk_if_fmr(struct qedr_qp *qp) 4045 { 4046 if (qp->wqe_wr_id[qp->sq.cons].opcode == IB_WC_REG_MR) 4047 qp->wqe_wr_id[qp->sq.cons].mr->info.completed++; 4048 } 4049 4050 static int process_req(struct qedr_dev *dev, struct qedr_qp *qp, 4051 struct qedr_cq *cq, int num_entries, 4052 struct ib_wc *wc, u16 hw_cons, enum ib_wc_status status, 4053 int force) 4054 { 4055 u16 cnt = 0; 4056 4057 while (num_entries && qp->sq.wqe_cons != hw_cons) { 4058 if (!qp->wqe_wr_id[qp->sq.cons].signaled && !force) { 4059 qedr_chk_if_fmr(qp); 4060 /* skip WC */ 4061 goto next_cqe; 4062 } 4063 4064 /* fill WC */ 4065 wc->status = status; 4066 wc->vendor_err = 0; 4067 wc->wc_flags = 0; 4068 wc->src_qp = qp->id; 4069 wc->qp = &qp->ibqp; 4070 4071 wc->wr_id = qp->wqe_wr_id[qp->sq.cons].wr_id; 4072 wc->opcode = qp->wqe_wr_id[qp->sq.cons].opcode; 4073 4074 switch (wc->opcode) { 4075 case IB_WC_RDMA_WRITE: 4076 wc->byte_len = qp->wqe_wr_id[qp->sq.cons].bytes_len; 4077 break; 4078 case IB_WC_COMP_SWAP: 4079 case IB_WC_FETCH_ADD: 4080 wc->byte_len = 8; 4081 break; 4082 case IB_WC_REG_MR: 4083 qp->wqe_wr_id[qp->sq.cons].mr->info.completed++; 4084 break; 4085 case IB_WC_RDMA_READ: 4086 case IB_WC_SEND: 4087 wc->byte_len = qp->wqe_wr_id[qp->sq.cons].bytes_len; 4088 break; 4089 default: 4090 break; 4091 } 4092 4093 num_entries--; 4094 wc++; 4095 cnt++; 4096 next_cqe: 4097 while (qp->wqe_wr_id[qp->sq.cons].wqe_size--) 4098 qed_chain_consume(&qp->sq.pbl); 4099 qedr_inc_sw_cons(&qp->sq); 4100 } 4101 4102 return cnt; 4103 } 4104 4105 static int qedr_poll_cq_req(struct qedr_dev *dev, 4106 struct qedr_qp *qp, struct qedr_cq *cq, 4107 int num_entries, struct ib_wc *wc, 4108 struct rdma_cqe_requester *req) 4109 { 4110 int cnt = 0; 4111 4112 switch (req->status) { 4113 case RDMA_CQE_REQ_STS_OK: 4114 cnt = process_req(dev, qp, cq, num_entries, wc, req->sq_cons, 4115 IB_WC_SUCCESS, 0); 4116 break; 4117 case RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR: 4118 if (qp->state != QED_ROCE_QP_STATE_ERR) 4119 DP_DEBUG(dev, QEDR_MSG_CQ, 4120 "Error: POLL CQ with RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4121 cq->icid, qp->icid); 4122 cnt = process_req(dev, qp, cq, num_entries, wc, req->sq_cons, 4123 IB_WC_WR_FLUSH_ERR, 1); 4124 break; 4125 default: 4126 /* process all WQE before the cosumer */ 4127 qp->state = QED_ROCE_QP_STATE_ERR; 4128 cnt = process_req(dev, qp, cq, num_entries, wc, 4129 req->sq_cons - 1, IB_WC_SUCCESS, 0); 4130 wc += cnt; 4131 /* if we have extra WC fill it with actual error info */ 4132 if (cnt < num_entries) { 4133 enum ib_wc_status wc_status; 4134 4135 switch (req->status) { 4136 case RDMA_CQE_REQ_STS_BAD_RESPONSE_ERR: 4137 DP_ERR(dev, 4138 "Error: POLL CQ with RDMA_CQE_REQ_STS_BAD_RESPONSE_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4139 cq->icid, qp->icid); 4140 wc_status = IB_WC_BAD_RESP_ERR; 4141 break; 4142 case RDMA_CQE_REQ_STS_LOCAL_LENGTH_ERR: 4143 DP_ERR(dev, 4144 "Error: POLL CQ with RDMA_CQE_REQ_STS_LOCAL_LENGTH_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4145 cq->icid, qp->icid); 4146 wc_status = IB_WC_LOC_LEN_ERR; 4147 break; 4148 case RDMA_CQE_REQ_STS_LOCAL_QP_OPERATION_ERR: 4149 DP_ERR(dev, 4150 "Error: POLL CQ with RDMA_CQE_REQ_STS_LOCAL_QP_OPERATION_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4151 cq->icid, qp->icid); 4152 wc_status = IB_WC_LOC_QP_OP_ERR; 4153 break; 4154 case RDMA_CQE_REQ_STS_LOCAL_PROTECTION_ERR: 4155 DP_ERR(dev, 4156 "Error: POLL CQ with RDMA_CQE_REQ_STS_LOCAL_PROTECTION_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4157 cq->icid, qp->icid); 4158 wc_status = IB_WC_LOC_PROT_ERR; 4159 break; 4160 case RDMA_CQE_REQ_STS_MEMORY_MGT_OPERATION_ERR: 4161 DP_ERR(dev, 4162 "Error: POLL CQ with RDMA_CQE_REQ_STS_MEMORY_MGT_OPERATION_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4163 cq->icid, qp->icid); 4164 wc_status = IB_WC_MW_BIND_ERR; 4165 break; 4166 case RDMA_CQE_REQ_STS_REMOTE_INVALID_REQUEST_ERR: 4167 DP_ERR(dev, 4168 "Error: POLL CQ with RDMA_CQE_REQ_STS_REMOTE_INVALID_REQUEST_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4169 cq->icid, qp->icid); 4170 wc_status = IB_WC_REM_INV_REQ_ERR; 4171 break; 4172 case RDMA_CQE_REQ_STS_REMOTE_ACCESS_ERR: 4173 DP_ERR(dev, 4174 "Error: POLL CQ with RDMA_CQE_REQ_STS_REMOTE_ACCESS_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4175 cq->icid, qp->icid); 4176 wc_status = IB_WC_REM_ACCESS_ERR; 4177 break; 4178 case RDMA_CQE_REQ_STS_REMOTE_OPERATION_ERR: 4179 DP_ERR(dev, 4180 "Error: POLL CQ with RDMA_CQE_REQ_STS_REMOTE_OPERATION_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4181 cq->icid, qp->icid); 4182 wc_status = IB_WC_REM_OP_ERR; 4183 break; 4184 case RDMA_CQE_REQ_STS_RNR_NAK_RETRY_CNT_ERR: 4185 DP_ERR(dev, 4186 "Error: POLL CQ with RDMA_CQE_REQ_STS_RNR_NAK_RETRY_CNT_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4187 cq->icid, qp->icid); 4188 wc_status = IB_WC_RNR_RETRY_EXC_ERR; 4189 break; 4190 case RDMA_CQE_REQ_STS_TRANSPORT_RETRY_CNT_ERR: 4191 DP_ERR(dev, 4192 "Error: POLL CQ with ROCE_CQE_REQ_STS_TRANSPORT_RETRY_CNT_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4193 cq->icid, qp->icid); 4194 wc_status = IB_WC_RETRY_EXC_ERR; 4195 break; 4196 default: 4197 DP_ERR(dev, 4198 "Error: POLL CQ with IB_WC_GENERAL_ERR. CQ icid=0x%x, QP icid=0x%x\n", 4199 cq->icid, qp->icid); 4200 wc_status = IB_WC_GENERAL_ERR; 4201 } 4202 cnt += process_req(dev, qp, cq, 1, wc, req->sq_cons, 4203 wc_status, 1); 4204 } 4205 } 4206 4207 return cnt; 4208 } 4209 4210 static inline int qedr_cqe_resp_status_to_ib(u8 status) 4211 { 4212 switch (status) { 4213 case RDMA_CQE_RESP_STS_LOCAL_ACCESS_ERR: 4214 return IB_WC_LOC_ACCESS_ERR; 4215 case RDMA_CQE_RESP_STS_LOCAL_LENGTH_ERR: 4216 return IB_WC_LOC_LEN_ERR; 4217 case RDMA_CQE_RESP_STS_LOCAL_QP_OPERATION_ERR: 4218 return IB_WC_LOC_QP_OP_ERR; 4219 case RDMA_CQE_RESP_STS_LOCAL_PROTECTION_ERR: 4220 return IB_WC_LOC_PROT_ERR; 4221 case RDMA_CQE_RESP_STS_MEMORY_MGT_OPERATION_ERR: 4222 return IB_WC_MW_BIND_ERR; 4223 case RDMA_CQE_RESP_STS_REMOTE_INVALID_REQUEST_ERR: 4224 return IB_WC_REM_INV_RD_REQ_ERR; 4225 case RDMA_CQE_RESP_STS_OK: 4226 return IB_WC_SUCCESS; 4227 default: 4228 return IB_WC_GENERAL_ERR; 4229 } 4230 } 4231 4232 static inline int qedr_set_ok_cqe_resp_wc(struct rdma_cqe_responder *resp, 4233 struct ib_wc *wc) 4234 { 4235 wc->status = IB_WC_SUCCESS; 4236 wc->byte_len = le32_to_cpu(resp->length); 4237 4238 if (resp->flags & QEDR_RESP_IMM) { 4239 wc->ex.imm_data = cpu_to_be32(le32_to_cpu(resp->imm_data_or_inv_r_Key)); 4240 wc->wc_flags |= IB_WC_WITH_IMM; 4241 4242 if (resp->flags & QEDR_RESP_RDMA) 4243 wc->opcode = IB_WC_RECV_RDMA_WITH_IMM; 4244 4245 if (resp->flags & QEDR_RESP_INV) 4246 return -EINVAL; 4247 4248 } else if (resp->flags & QEDR_RESP_INV) { 4249 wc->ex.imm_data = le32_to_cpu(resp->imm_data_or_inv_r_Key); 4250 wc->wc_flags |= IB_WC_WITH_INVALIDATE; 4251 4252 if (resp->flags & QEDR_RESP_RDMA) 4253 return -EINVAL; 4254 4255 } else if (resp->flags & QEDR_RESP_RDMA) { 4256 return -EINVAL; 4257 } 4258 4259 return 0; 4260 } 4261 4262 static void __process_resp_one(struct qedr_dev *dev, struct qedr_qp *qp, 4263 struct qedr_cq *cq, struct ib_wc *wc, 4264 struct rdma_cqe_responder *resp, u64 wr_id) 4265 { 4266 /* Must fill fields before qedr_set_ok_cqe_resp_wc() */ 4267 wc->opcode = IB_WC_RECV; 4268 wc->wc_flags = 0; 4269 4270 if (likely(resp->status == RDMA_CQE_RESP_STS_OK)) { 4271 if (qedr_set_ok_cqe_resp_wc(resp, wc)) 4272 DP_ERR(dev, 4273 "CQ %p (icid=%d) has invalid CQE responder flags=0x%x\n", 4274 cq, cq->icid, resp->flags); 4275 4276 } else { 4277 wc->status = qedr_cqe_resp_status_to_ib(resp->status); 4278 if (wc->status == IB_WC_GENERAL_ERR) 4279 DP_ERR(dev, 4280 "CQ %p (icid=%d) contains an invalid CQE status %d\n", 4281 cq, cq->icid, resp->status); 4282 } 4283 4284 /* Fill the rest of the WC */ 4285 wc->vendor_err = 0; 4286 wc->src_qp = qp->id; 4287 wc->qp = &qp->ibqp; 4288 wc->wr_id = wr_id; 4289 } 4290 4291 static int process_resp_one_srq(struct qedr_dev *dev, struct qedr_qp *qp, 4292 struct qedr_cq *cq, struct ib_wc *wc, 4293 struct rdma_cqe_responder *resp) 4294 { 4295 struct qedr_srq *srq = qp->srq; 4296 u64 wr_id; 4297 4298 wr_id = HILO_GEN(le32_to_cpu(resp->srq_wr_id.hi), 4299 le32_to_cpu(resp->srq_wr_id.lo), u64); 4300 4301 if (resp->status == RDMA_CQE_RESP_STS_WORK_REQUEST_FLUSHED_ERR) { 4302 wc->status = IB_WC_WR_FLUSH_ERR; 4303 wc->vendor_err = 0; 4304 wc->wr_id = wr_id; 4305 wc->byte_len = 0; 4306 wc->src_qp = qp->id; 4307 wc->qp = &qp->ibqp; 4308 wc->wr_id = wr_id; 4309 } else { 4310 __process_resp_one(dev, qp, cq, wc, resp, wr_id); 4311 } 4312 atomic_inc(&srq->hw_srq.wr_cons_cnt); 4313 4314 return 1; 4315 } 4316 static int process_resp_one(struct qedr_dev *dev, struct qedr_qp *qp, 4317 struct qedr_cq *cq, struct ib_wc *wc, 4318 struct rdma_cqe_responder *resp) 4319 { 4320 u64 wr_id = qp->rqe_wr_id[qp->rq.cons].wr_id; 4321 4322 __process_resp_one(dev, qp, cq, wc, resp, wr_id); 4323 4324 while (qp->rqe_wr_id[qp->rq.cons].wqe_size--) 4325 qed_chain_consume(&qp->rq.pbl); 4326 qedr_inc_sw_cons(&qp->rq); 4327 4328 return 1; 4329 } 4330 4331 static int process_resp_flush(struct qedr_qp *qp, struct qedr_cq *cq, 4332 int num_entries, struct ib_wc *wc, u16 hw_cons) 4333 { 4334 u16 cnt = 0; 4335 4336 while (num_entries && qp->rq.wqe_cons != hw_cons) { 4337 /* fill WC */ 4338 wc->status = IB_WC_WR_FLUSH_ERR; 4339 wc->vendor_err = 0; 4340 wc->wc_flags = 0; 4341 wc->src_qp = qp->id; 4342 wc->byte_len = 0; 4343 wc->wr_id = qp->rqe_wr_id[qp->rq.cons].wr_id; 4344 wc->qp = &qp->ibqp; 4345 num_entries--; 4346 wc++; 4347 cnt++; 4348 while (qp->rqe_wr_id[qp->rq.cons].wqe_size--) 4349 qed_chain_consume(&qp->rq.pbl); 4350 qedr_inc_sw_cons(&qp->rq); 4351 } 4352 4353 return cnt; 4354 } 4355 4356 static void try_consume_resp_cqe(struct qedr_cq *cq, struct qedr_qp *qp, 4357 struct rdma_cqe_responder *resp, int *update) 4358 { 4359 if (le16_to_cpu(resp->rq_cons_or_srq_id) == qp->rq.wqe_cons) { 4360 consume_cqe(cq); 4361 *update |= 1; 4362 } 4363 } 4364 4365 static int qedr_poll_cq_resp_srq(struct qedr_dev *dev, struct qedr_qp *qp, 4366 struct qedr_cq *cq, int num_entries, 4367 struct ib_wc *wc, 4368 struct rdma_cqe_responder *resp) 4369 { 4370 int cnt; 4371 4372 cnt = process_resp_one_srq(dev, qp, cq, wc, resp); 4373 consume_cqe(cq); 4374 4375 return cnt; 4376 } 4377 4378 static int qedr_poll_cq_resp(struct qedr_dev *dev, struct qedr_qp *qp, 4379 struct qedr_cq *cq, int num_entries, 4380 struct ib_wc *wc, struct rdma_cqe_responder *resp, 4381 int *update) 4382 { 4383 int cnt; 4384 4385 if (resp->status == RDMA_CQE_RESP_STS_WORK_REQUEST_FLUSHED_ERR) { 4386 cnt = process_resp_flush(qp, cq, num_entries, wc, 4387 resp->rq_cons_or_srq_id); 4388 try_consume_resp_cqe(cq, qp, resp, update); 4389 } else { 4390 cnt = process_resp_one(dev, qp, cq, wc, resp); 4391 consume_cqe(cq); 4392 *update |= 1; 4393 } 4394 4395 return cnt; 4396 } 4397 4398 static void try_consume_req_cqe(struct qedr_cq *cq, struct qedr_qp *qp, 4399 struct rdma_cqe_requester *req, int *update) 4400 { 4401 if (le16_to_cpu(req->sq_cons) == qp->sq.wqe_cons) { 4402 consume_cqe(cq); 4403 *update |= 1; 4404 } 4405 } 4406 4407 int qedr_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) 4408 { 4409 struct qedr_dev *dev = get_qedr_dev(ibcq->device); 4410 struct qedr_cq *cq = get_qedr_cq(ibcq); 4411 union rdma_cqe *cqe; 4412 u32 old_cons, new_cons; 4413 unsigned long flags; 4414 int update = 0; 4415 int done = 0; 4416 4417 if (cq->destroyed) { 4418 DP_ERR(dev, 4419 "warning: poll was invoked after destroy for cq %p (icid=%d)\n", 4420 cq, cq->icid); 4421 return 0; 4422 } 4423 4424 if (cq->cq_type == QEDR_CQ_TYPE_GSI) 4425 return qedr_gsi_poll_cq(ibcq, num_entries, wc); 4426 4427 spin_lock_irqsave(&cq->cq_lock, flags); 4428 cqe = cq->latest_cqe; 4429 old_cons = qed_chain_get_cons_idx_u32(&cq->pbl); 4430 while (num_entries && is_valid_cqe(cq, cqe)) { 4431 struct qedr_qp *qp; 4432 int cnt = 0; 4433 4434 /* prevent speculative reads of any field of CQE */ 4435 rmb(); 4436 4437 qp = cqe_get_qp(cqe); 4438 if (!qp) { 4439 WARN(1, "Error: CQE QP pointer is NULL. CQE=%p\n", cqe); 4440 break; 4441 } 4442 4443 wc->qp = &qp->ibqp; 4444 4445 switch (cqe_get_type(cqe)) { 4446 case RDMA_CQE_TYPE_REQUESTER: 4447 cnt = qedr_poll_cq_req(dev, qp, cq, num_entries, wc, 4448 &cqe->req); 4449 try_consume_req_cqe(cq, qp, &cqe->req, &update); 4450 break; 4451 case RDMA_CQE_TYPE_RESPONDER_RQ: 4452 cnt = qedr_poll_cq_resp(dev, qp, cq, num_entries, wc, 4453 &cqe->resp, &update); 4454 break; 4455 case RDMA_CQE_TYPE_RESPONDER_SRQ: 4456 cnt = qedr_poll_cq_resp_srq(dev, qp, cq, num_entries, 4457 wc, &cqe->resp); 4458 update = 1; 4459 break; 4460 case RDMA_CQE_TYPE_INVALID: 4461 default: 4462 DP_ERR(dev, "Error: invalid CQE type = %d\n", 4463 cqe_get_type(cqe)); 4464 } 4465 num_entries -= cnt; 4466 wc += cnt; 4467 done += cnt; 4468 4469 cqe = get_cqe(cq); 4470 } 4471 new_cons = qed_chain_get_cons_idx_u32(&cq->pbl); 4472 4473 cq->cq_cons += new_cons - old_cons; 4474 4475 if (update) 4476 /* doorbell notifies abount latest VALID entry, 4477 * but chain already point to the next INVALID one 4478 */ 4479 doorbell_cq(cq, cq->cq_cons - 1, cq->arm_flags); 4480 4481 spin_unlock_irqrestore(&cq->cq_lock, flags); 4482 return done; 4483 } 4484 4485 int qedr_process_mad(struct ib_device *ibdev, int process_mad_flags, 4486 u8 port_num, const struct ib_wc *in_wc, 4487 const struct ib_grh *in_grh, const struct ib_mad *in, 4488 struct ib_mad *out_mad, size_t *out_mad_size, 4489 u16 *out_mad_pkey_index) 4490 { 4491 return IB_MAD_RESULT_SUCCESS; 4492 } 4493