1 // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB 2 /* 3 * Copyright 2018-2026 Amazon.com, Inc. or its affiliates. All rights reserved. 4 */ 5 6 #include <linux/dma-buf.h> 7 #include <linux/dma-resv.h> 8 #include <linux/vmalloc.h> 9 #include <linux/log2.h> 10 11 #include <rdma/ib_addr.h> 12 #include <rdma/ib_user_verbs.h> 13 #include <rdma/ib_verbs.h> 14 #include <rdma/iter.h> 15 #include <rdma/uverbs_ioctl.h> 16 #define UVERBS_MODULE_NAME efa_ib 17 #include <rdma/uverbs_named_ioctl.h> 18 #include <rdma/ib_user_ioctl_cmds.h> 19 20 #include "efa.h" 21 #include "efa_io_defs.h" 22 23 enum { 24 EFA_MMAP_DMA_PAGE = 0, 25 EFA_MMAP_IO_WC, 26 EFA_MMAP_IO_NC, 27 }; 28 29 struct efa_user_mmap_entry { 30 struct rdma_user_mmap_entry rdma_entry; 31 u64 address; 32 u8 mmap_flag; 33 }; 34 35 #define EFA_DEFINE_DEVICE_STATS(op) \ 36 op(EFA_SUBMITTED_CMDS, "submitted_cmds") \ 37 op(EFA_COMPLETED_CMDS, "completed_cmds") \ 38 op(EFA_CMDS_ERR, "cmds_err") \ 39 op(EFA_NO_COMPLETION_CMDS, "no_completion_cmds") \ 40 op(EFA_KEEP_ALIVE_RCVD, "keep_alive_rcvd") \ 41 op(EFA_ALLOC_PD_ERR, "alloc_pd_err") \ 42 op(EFA_CREATE_QP_ERR, "create_qp_err") \ 43 op(EFA_CREATE_CQ_ERR, "create_cq_err") \ 44 op(EFA_REG_MR_ERR, "reg_mr_err") \ 45 op(EFA_ALLOC_UCONTEXT_ERR, "alloc_ucontext_err") \ 46 op(EFA_CREATE_AH_ERR, "create_ah_err") \ 47 op(EFA_MMAP_ERR, "mmap_err") 48 49 #define EFA_DEFINE_PORT_STATS(op) \ 50 op(EFA_TX_BYTES, "tx_bytes") \ 51 op(EFA_TX_PKTS, "tx_pkts") \ 52 op(EFA_RX_BYTES, "rx_bytes") \ 53 op(EFA_RX_PKTS, "rx_pkts") \ 54 op(EFA_RX_DROPS, "rx_drops") \ 55 op(EFA_SEND_BYTES, "send_bytes") \ 56 op(EFA_SEND_WRS, "send_wrs") \ 57 op(EFA_RECV_BYTES, "recv_bytes") \ 58 op(EFA_RECV_WRS, "recv_wrs") \ 59 op(EFA_RDMA_READ_WRS, "rdma_read_wrs") \ 60 op(EFA_RDMA_READ_BYTES, "rdma_read_bytes") \ 61 op(EFA_RDMA_READ_WR_ERR, "rdma_read_wr_err") \ 62 op(EFA_RDMA_READ_RESP_BYTES, "rdma_read_resp_bytes") \ 63 op(EFA_RDMA_WRITE_WRS, "rdma_write_wrs") \ 64 op(EFA_RDMA_WRITE_BYTES, "rdma_write_bytes") \ 65 op(EFA_RDMA_WRITE_WR_ERR, "rdma_write_wr_err") \ 66 op(EFA_RDMA_WRITE_RECV_BYTES, "rdma_write_recv_bytes") \ 67 op(EFA_RETRANS_BYTES, "retrans_bytes") \ 68 op(EFA_RETRANS_PKTS, "retrans_pkts") \ 69 op(EFA_RETRANS_TIMEOUT_EVENS, "retrans_timeout_events") \ 70 op(EFA_UNRESPONSIVE_REMOTE_EVENTS, "unresponsive_remote_events") \ 71 op(EFA_IMPAIRED_REMOTE_CONN_EVENTS, "impaired_remote_conn_events") \ 72 73 #define EFA_STATS_ENUM(ename, name) ename, 74 #define EFA_STATS_STR(ename, nam) \ 75 [ename].name = nam, 76 77 enum efa_hw_device_stats { 78 EFA_DEFINE_DEVICE_STATS(EFA_STATS_ENUM) 79 }; 80 81 static const struct rdma_stat_desc efa_device_stats_descs[] = { 82 EFA_DEFINE_DEVICE_STATS(EFA_STATS_STR) 83 }; 84 85 enum efa_hw_port_stats { 86 EFA_DEFINE_PORT_STATS(EFA_STATS_ENUM) 87 }; 88 89 static const struct rdma_stat_desc efa_port_stats_descs[] = { 90 EFA_DEFINE_PORT_STATS(EFA_STATS_STR) 91 }; 92 93 #define EFA_DEFAULT_LINK_SPEED_GBPS 100 94 95 #define EFA_CHUNK_PAYLOAD_SHIFT 12 96 #define EFA_CHUNK_PAYLOAD_SIZE BIT(EFA_CHUNK_PAYLOAD_SHIFT) 97 #define EFA_CHUNK_PAYLOAD_PTR_SIZE 8 98 99 #define EFA_CHUNK_SHIFT 12 100 #define EFA_CHUNK_SIZE BIT(EFA_CHUNK_SHIFT) 101 #define EFA_CHUNK_PTR_SIZE sizeof(struct efa_com_ctrl_buff_info) 102 103 #define EFA_PTRS_PER_CHUNK \ 104 ((EFA_CHUNK_SIZE - EFA_CHUNK_PTR_SIZE) / EFA_CHUNK_PAYLOAD_PTR_SIZE) 105 106 #define EFA_CHUNK_USED_SIZE \ 107 ((EFA_PTRS_PER_CHUNK * EFA_CHUNK_PAYLOAD_PTR_SIZE) + EFA_CHUNK_PTR_SIZE) 108 109 struct pbl_chunk { 110 dma_addr_t dma_addr; 111 u64 *buf; 112 u32 length; 113 }; 114 115 struct pbl_chunk_list { 116 struct pbl_chunk *chunks; 117 unsigned int size; 118 }; 119 120 struct pbl_context { 121 union { 122 struct { 123 dma_addr_t dma_addr; 124 } continuous; 125 struct { 126 u32 pbl_buf_size_in_pages; 127 struct scatterlist *sgl; 128 int sg_dma_cnt; 129 struct pbl_chunk_list chunk_list; 130 } indirect; 131 } phys; 132 u64 *pbl_buf; 133 u32 pbl_buf_size_in_bytes; 134 u8 physically_continuous; 135 }; 136 137 static inline struct efa_dev *to_edev(struct ib_device *ibdev) 138 { 139 return container_of(ibdev, struct efa_dev, ibdev); 140 } 141 142 static inline struct efa_ucontext *to_eucontext(struct ib_ucontext *ibucontext) 143 { 144 return container_of(ibucontext, struct efa_ucontext, ibucontext); 145 } 146 147 static inline struct efa_pd *to_epd(struct ib_pd *ibpd) 148 { 149 return container_of(ibpd, struct efa_pd, ibpd); 150 } 151 152 static inline struct efa_mr *to_emr(struct ib_mr *ibmr) 153 { 154 return container_of(ibmr, struct efa_mr, ibmr); 155 } 156 157 static inline struct efa_qp *to_eqp(struct ib_qp *ibqp) 158 { 159 return container_of(ibqp, struct efa_qp, ibqp); 160 } 161 162 static inline struct efa_cq *to_ecq(struct ib_cq *ibcq) 163 { 164 return container_of(ibcq, struct efa_cq, ibcq); 165 } 166 167 static inline struct efa_ah *to_eah(struct ib_ah *ibah) 168 { 169 return container_of(ibah, struct efa_ah, ibah); 170 } 171 172 static inline struct efa_user_mmap_entry * 173 to_emmap(struct rdma_user_mmap_entry *rdma_entry) 174 { 175 return container_of(rdma_entry, struct efa_user_mmap_entry, rdma_entry); 176 } 177 178 #define EFA_DEV_CAP(dev, cap) \ 179 ((dev)->dev_attr.device_caps & \ 180 EFA_ADMIN_FEATURE_DEVICE_ATTR_DESC_##cap##_MASK) 181 182 #define is_reserved_cleared(reserved) \ 183 !memchr_inv(reserved, 0, sizeof(reserved)) 184 185 static void *efa_zalloc_mapped(struct efa_dev *dev, dma_addr_t *dma_addr, 186 size_t size, enum dma_data_direction dir) 187 { 188 void *addr; 189 190 addr = alloc_pages_exact(size, GFP_KERNEL | __GFP_ZERO); 191 if (!addr) 192 return NULL; 193 194 *dma_addr = dma_map_single(&dev->pdev->dev, addr, size, dir); 195 if (dma_mapping_error(&dev->pdev->dev, *dma_addr)) { 196 ibdev_err(&dev->ibdev, "Failed to map DMA address\n"); 197 free_pages_exact(addr, size); 198 return NULL; 199 } 200 201 return addr; 202 } 203 204 static void efa_free_mapped(struct efa_dev *dev, void *cpu_addr, 205 dma_addr_t dma_addr, 206 size_t size, enum dma_data_direction dir) 207 { 208 dma_unmap_single(&dev->pdev->dev, dma_addr, size, dir); 209 free_pages_exact(cpu_addr, size); 210 } 211 212 int efa_query_device(struct ib_device *ibdev, 213 struct ib_device_attr *props, 214 struct ib_udata *udata) 215 { 216 struct efa_com_get_device_attr_result *dev_attr; 217 struct efa_ibv_ex_query_device_resp resp = {}; 218 struct efa_dev *dev = to_edev(ibdev); 219 int err; 220 221 if (udata && udata->inlen && 222 !ib_is_udata_cleared(udata, 0, udata->inlen)) { 223 ibdev_dbg(ibdev, 224 "Incompatible ABI params, udata not cleared\n"); 225 return -EINVAL; 226 } 227 228 dev_attr = &dev->dev_attr; 229 230 memset(props, 0, sizeof(*props)); 231 props->max_mr_size = dev_attr->max_mr_pages * PAGE_SIZE; 232 props->page_size_cap = dev_attr->page_size_cap; 233 props->vendor_id = dev->pdev->vendor; 234 props->vendor_part_id = dev->pdev->device; 235 props->hw_ver = dev->pdev->subsystem_device; 236 props->max_qp = dev_attr->max_qp; 237 props->max_cq = dev_attr->max_cq; 238 props->max_pd = dev_attr->max_pd; 239 props->max_mr = dev_attr->max_mr; 240 props->max_ah = dev_attr->max_ah; 241 props->max_cqe = dev_attr->max_cq_depth; 242 props->max_qp_wr = min_t(u32, dev_attr->max_sq_depth, 243 dev_attr->max_rq_depth); 244 props->max_send_sge = dev_attr->max_sq_sge; 245 props->max_recv_sge = dev_attr->max_rq_sge; 246 props->max_sge_rd = dev_attr->max_wr_rdma_sge; 247 props->max_pkeys = 1; 248 249 if (udata && udata->outlen) { 250 resp.max_sq_sge = dev_attr->max_sq_sge; 251 resp.max_rq_sge = dev_attr->max_rq_sge; 252 resp.max_sq_wr = dev_attr->max_sq_depth; 253 resp.max_rq_wr = dev_attr->max_rq_depth; 254 resp.max_rdma_size = dev_attr->max_rdma_size; 255 256 resp.device_caps |= EFA_QUERY_DEVICE_CAPS_CQ_WITH_SGID; 257 resp.device_caps |= EFA_QUERY_DEVICE_CAPS_CQ_WITH_EXT_MEM; 258 if (EFA_DEV_CAP(dev, RDMA_READ)) 259 resp.device_caps |= EFA_QUERY_DEVICE_CAPS_RDMA_READ; 260 261 if (EFA_DEV_CAP(dev, RNR_RETRY)) 262 resp.device_caps |= EFA_QUERY_DEVICE_CAPS_RNR_RETRY; 263 264 if (EFA_DEV_CAP(dev, DATA_POLLING_128)) 265 resp.device_caps |= EFA_QUERY_DEVICE_CAPS_DATA_POLLING_128; 266 267 if (EFA_DEV_CAP(dev, RDMA_WRITE)) 268 resp.device_caps |= EFA_QUERY_DEVICE_CAPS_RDMA_WRITE; 269 270 if (EFA_DEV_CAP(dev, UNSOLICITED_WRITE_RECV)) 271 resp.device_caps |= EFA_QUERY_DEVICE_CAPS_UNSOLICITED_WRITE_RECV; 272 273 if (dev->neqs) 274 resp.device_caps |= EFA_QUERY_DEVICE_CAPS_CQ_NOTIFICATIONS; 275 276 err = ib_copy_to_udata(udata, &resp, 277 min(sizeof(resp), udata->outlen)); 278 if (err) { 279 ibdev_dbg(ibdev, 280 "Failed to copy udata for query_device\n"); 281 return err; 282 } 283 } 284 285 return 0; 286 } 287 288 static void efa_link_gbps_to_speed_and_width(u16 gbps, 289 enum ib_port_speed *speed, 290 enum ib_port_width *width) 291 { 292 if (gbps >= 400) { 293 *width = IB_WIDTH_8X; 294 *speed = IB_SPEED_HDR; 295 } else if (gbps >= 200) { 296 *width = IB_WIDTH_4X; 297 *speed = IB_SPEED_HDR; 298 } else if (gbps >= 120) { 299 *width = IB_WIDTH_12X; 300 *speed = IB_SPEED_FDR10; 301 } else if (gbps >= 100) { 302 *width = IB_WIDTH_4X; 303 *speed = IB_SPEED_EDR; 304 } else if (gbps >= 60) { 305 *width = IB_WIDTH_12X; 306 *speed = IB_SPEED_DDR; 307 } else if (gbps >= 50) { 308 *width = IB_WIDTH_1X; 309 *speed = IB_SPEED_HDR; 310 } else if (gbps >= 40) { 311 *width = IB_WIDTH_4X; 312 *speed = IB_SPEED_FDR10; 313 } else if (gbps >= 30) { 314 *width = IB_WIDTH_12X; 315 *speed = IB_SPEED_SDR; 316 } else { 317 *width = IB_WIDTH_1X; 318 *speed = IB_SPEED_EDR; 319 } 320 } 321 322 int efa_query_port(struct ib_device *ibdev, u32 port, 323 struct ib_port_attr *props) 324 { 325 struct efa_dev *dev = to_edev(ibdev); 326 enum ib_port_speed link_speed; 327 enum ib_port_width link_width; 328 u16 link_gbps; 329 330 props->lmc = 1; 331 332 props->state = IB_PORT_ACTIVE; 333 props->phys_state = IB_PORT_PHYS_STATE_LINK_UP; 334 props->gid_tbl_len = 1; 335 props->pkey_tbl_len = 1; 336 link_gbps = dev->dev_attr.max_link_speed_gbps ?: EFA_DEFAULT_LINK_SPEED_GBPS; 337 efa_link_gbps_to_speed_and_width(link_gbps, &link_speed, &link_width); 338 props->active_speed = link_speed; 339 props->active_width = link_width; 340 props->max_mtu = ib_mtu_int_to_enum(dev->dev_attr.mtu); 341 props->active_mtu = ib_mtu_int_to_enum(dev->dev_attr.mtu); 342 props->max_msg_sz = dev->dev_attr.mtu; 343 props->max_vl_num = 1; 344 345 return 0; 346 } 347 348 int efa_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, 349 int qp_attr_mask, 350 struct ib_qp_init_attr *qp_init_attr) 351 { 352 struct efa_dev *dev = to_edev(ibqp->device); 353 struct efa_com_query_qp_params params = {}; 354 struct efa_com_query_qp_result result; 355 struct efa_qp *qp = to_eqp(ibqp); 356 int err; 357 358 #define EFA_QUERY_QP_SUPP_MASK \ 359 (IB_QP_STATE | IB_QP_PKEY_INDEX | IB_QP_PORT | \ 360 IB_QP_QKEY | IB_QP_SQ_PSN | IB_QP_CAP | IB_QP_RNR_RETRY) 361 362 if (qp_attr_mask & ~EFA_QUERY_QP_SUPP_MASK) { 363 ibdev_dbg(&dev->ibdev, 364 "Unsupported qp_attr_mask[%#x] supported[%#x]\n", 365 qp_attr_mask, EFA_QUERY_QP_SUPP_MASK); 366 return -EOPNOTSUPP; 367 } 368 369 memset(qp_attr, 0, sizeof(*qp_attr)); 370 memset(qp_init_attr, 0, sizeof(*qp_init_attr)); 371 372 params.qp_handle = qp->qp_handle; 373 err = efa_com_query_qp(&dev->edev, ¶ms, &result); 374 if (err) 375 return err; 376 377 qp_attr->qp_state = result.qp_state; 378 qp_attr->qkey = result.qkey; 379 qp_attr->sq_psn = result.sq_psn; 380 qp_attr->sq_draining = result.sq_draining; 381 qp_attr->port_num = 1; 382 qp_attr->rnr_retry = result.rnr_retry; 383 384 qp_attr->cap.max_send_wr = qp->max_send_wr; 385 qp_attr->cap.max_recv_wr = qp->max_recv_wr; 386 qp_attr->cap.max_send_sge = qp->max_send_sge; 387 qp_attr->cap.max_recv_sge = qp->max_recv_sge; 388 qp_attr->cap.max_inline_data = qp->max_inline_data; 389 390 qp_init_attr->qp_type = ibqp->qp_type; 391 qp_init_attr->recv_cq = ibqp->recv_cq; 392 qp_init_attr->send_cq = ibqp->send_cq; 393 qp_init_attr->qp_context = ibqp->qp_context; 394 qp_init_attr->cap = qp_attr->cap; 395 396 return 0; 397 } 398 399 int efa_query_gid(struct ib_device *ibdev, u32 port, int index, 400 union ib_gid *gid) 401 { 402 struct efa_dev *dev = to_edev(ibdev); 403 404 memcpy(gid->raw, dev->dev_attr.addr, sizeof(dev->dev_attr.addr)); 405 406 return 0; 407 } 408 409 int efa_query_pkey(struct ib_device *ibdev, u32 port, u16 index, 410 u16 *pkey) 411 { 412 if (index > 0) 413 return -EINVAL; 414 415 *pkey = 0xffff; 416 return 0; 417 } 418 419 static int efa_pd_dealloc(struct efa_dev *dev, u16 pdn) 420 { 421 struct efa_com_dealloc_pd_params params = { 422 .pdn = pdn, 423 }; 424 425 return efa_com_dealloc_pd(&dev->edev, ¶ms); 426 } 427 428 int efa_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata) 429 { 430 struct efa_dev *dev = to_edev(ibpd->device); 431 struct efa_ibv_alloc_pd_resp resp = {}; 432 struct efa_com_alloc_pd_result result; 433 struct efa_pd *pd = to_epd(ibpd); 434 int err; 435 436 if (udata->inlen && 437 !ib_is_udata_cleared(udata, 0, udata->inlen)) { 438 ibdev_dbg(&dev->ibdev, 439 "Incompatible ABI params, udata not cleared\n"); 440 err = -EINVAL; 441 goto err_out; 442 } 443 444 err = efa_com_alloc_pd(&dev->edev, &result); 445 if (err) 446 goto err_out; 447 448 pd->pdn = result.pdn; 449 resp.pdn = result.pdn; 450 451 if (udata->outlen) { 452 err = ib_copy_to_udata(udata, &resp, 453 min(sizeof(resp), udata->outlen)); 454 if (err) { 455 ibdev_dbg(&dev->ibdev, 456 "Failed to copy udata for alloc_pd\n"); 457 goto err_dealloc_pd; 458 } 459 } 460 461 ibdev_dbg(&dev->ibdev, "Allocated pd[%d]\n", pd->pdn); 462 463 return 0; 464 465 err_dealloc_pd: 466 efa_pd_dealloc(dev, result.pdn); 467 err_out: 468 atomic64_inc(&dev->stats.alloc_pd_err); 469 return err; 470 } 471 472 int efa_dealloc_pd(struct ib_pd *ibpd, struct ib_udata *udata) 473 { 474 struct efa_dev *dev = to_edev(ibpd->device); 475 struct efa_pd *pd = to_epd(ibpd); 476 477 ibdev_dbg(&dev->ibdev, "Dealloc pd[%d]\n", pd->pdn); 478 efa_pd_dealloc(dev, pd->pdn); 479 return 0; 480 } 481 482 static int efa_destroy_qp_handle(struct efa_dev *dev, u32 qp_handle) 483 { 484 struct efa_com_destroy_qp_params params = { .qp_handle = qp_handle }; 485 486 return efa_com_destroy_qp(&dev->edev, ¶ms); 487 } 488 489 static void efa_qp_user_mmap_entries_remove(struct efa_qp *qp) 490 { 491 rdma_user_mmap_entry_remove(qp->rq_mmap_entry); 492 rdma_user_mmap_entry_remove(qp->rq_db_mmap_entry); 493 rdma_user_mmap_entry_remove(qp->llq_desc_mmap_entry); 494 rdma_user_mmap_entry_remove(qp->sq_db_mmap_entry); 495 } 496 497 int efa_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata) 498 { 499 struct efa_dev *dev = to_edev(ibqp->pd->device); 500 struct efa_qp *qp = to_eqp(ibqp); 501 int err; 502 503 ibdev_dbg(&dev->ibdev, "Destroy qp[%u]\n", ibqp->qp_num); 504 505 err = efa_destroy_qp_handle(dev, qp->qp_handle); 506 if (err) 507 return err; 508 509 efa_qp_user_mmap_entries_remove(qp); 510 511 if (qp->rq_cpu_addr) { 512 ibdev_dbg(&dev->ibdev, 513 "qp->cpu_addr[0x%p] freed: size[%lu], dma[%pad]\n", 514 qp->rq_cpu_addr, qp->rq_size, 515 &qp->rq_dma_addr); 516 efa_free_mapped(dev, qp->rq_cpu_addr, qp->rq_dma_addr, 517 qp->rq_size, DMA_TO_DEVICE); 518 } 519 520 return 0; 521 } 522 523 static struct rdma_user_mmap_entry* 524 efa_user_mmap_entry_insert(struct ib_ucontext *ucontext, 525 u64 address, size_t length, 526 u8 mmap_flag, u64 *offset) 527 { 528 struct efa_user_mmap_entry *entry = kzalloc_obj(*entry); 529 int err; 530 531 if (!entry) 532 return NULL; 533 534 entry->address = address; 535 entry->mmap_flag = mmap_flag; 536 537 err = rdma_user_mmap_entry_insert(ucontext, &entry->rdma_entry, 538 length); 539 if (err) { 540 kfree(entry); 541 return NULL; 542 } 543 *offset = rdma_user_mmap_get_offset(&entry->rdma_entry); 544 545 return &entry->rdma_entry; 546 } 547 548 static int qp_mmap_entries_setup(struct efa_qp *qp, 549 struct efa_dev *dev, 550 struct efa_ucontext *ucontext, 551 struct efa_com_create_qp_params *params, 552 struct efa_ibv_create_qp_resp *resp) 553 { 554 size_t length; 555 u64 address; 556 557 address = dev->db_bar_addr + resp->sq_db_offset; 558 qp->sq_db_mmap_entry = 559 efa_user_mmap_entry_insert(&ucontext->ibucontext, 560 address, 561 PAGE_SIZE, EFA_MMAP_IO_NC, 562 &resp->sq_db_mmap_key); 563 if (!qp->sq_db_mmap_entry) 564 return -ENOMEM; 565 566 resp->sq_db_offset &= ~PAGE_MASK; 567 568 address = dev->mem_bar_addr + resp->llq_desc_offset; 569 length = PAGE_ALIGN(params->sq_ring_size_in_bytes + 570 offset_in_page(resp->llq_desc_offset)); 571 572 qp->llq_desc_mmap_entry = 573 efa_user_mmap_entry_insert(&ucontext->ibucontext, 574 address, length, 575 EFA_MMAP_IO_WC, 576 &resp->llq_desc_mmap_key); 577 if (!qp->llq_desc_mmap_entry) 578 goto err_remove_mmap; 579 580 resp->llq_desc_offset &= ~PAGE_MASK; 581 582 if (qp->rq_cpu_addr) { 583 address = dev->db_bar_addr + resp->rq_db_offset; 584 585 qp->rq_db_mmap_entry = 586 efa_user_mmap_entry_insert(&ucontext->ibucontext, 587 address, PAGE_SIZE, 588 EFA_MMAP_IO_NC, 589 &resp->rq_db_mmap_key); 590 if (!qp->rq_db_mmap_entry) 591 goto err_remove_mmap; 592 593 resp->rq_db_offset &= ~PAGE_MASK; 594 595 address = virt_to_phys(qp->rq_cpu_addr); 596 qp->rq_mmap_entry = 597 efa_user_mmap_entry_insert(&ucontext->ibucontext, 598 address, qp->rq_size, 599 EFA_MMAP_DMA_PAGE, 600 &resp->rq_mmap_key); 601 if (!qp->rq_mmap_entry) 602 goto err_remove_mmap; 603 604 resp->rq_mmap_size = qp->rq_size; 605 } 606 607 return 0; 608 609 err_remove_mmap: 610 efa_qp_user_mmap_entries_remove(qp); 611 612 return -ENOMEM; 613 } 614 615 static int efa_qp_validate_cap(struct efa_dev *dev, 616 struct ib_qp_init_attr *init_attr, 617 u32 sq_ring_size) 618 { 619 if (init_attr->cap.max_send_wr > dev->dev_attr.max_sq_depth) { 620 ibdev_dbg(&dev->ibdev, 621 "qp: requested send wr[%u] exceeds the max[%u]\n", 622 init_attr->cap.max_send_wr, 623 dev->dev_attr.max_sq_depth); 624 return -EINVAL; 625 } 626 627 if (sq_ring_size > dev->dev_attr.max_llq_size) { 628 ibdev_dbg(&dev->ibdev, 629 "qp: requested sq ring size[%u] exceeds the max[%u]\n", 630 sq_ring_size, dev->dev_attr.max_llq_size); 631 return -EINVAL; 632 } 633 634 if (init_attr->cap.max_recv_wr > dev->dev_attr.max_rq_depth) { 635 ibdev_dbg(&dev->ibdev, 636 "qp: requested receive wr[%u] exceeds the max[%u]\n", 637 init_attr->cap.max_recv_wr, 638 dev->dev_attr.max_rq_depth); 639 return -EINVAL; 640 } 641 if (init_attr->cap.max_send_sge > dev->dev_attr.max_sq_sge) { 642 ibdev_dbg(&dev->ibdev, 643 "qp: requested sge send[%u] exceeds the max[%u]\n", 644 init_attr->cap.max_send_sge, dev->dev_attr.max_sq_sge); 645 return -EINVAL; 646 } 647 if (init_attr->cap.max_recv_sge > dev->dev_attr.max_rq_sge) { 648 ibdev_dbg(&dev->ibdev, 649 "qp: requested sge recv[%u] exceeds the max[%u]\n", 650 init_attr->cap.max_recv_sge, dev->dev_attr.max_rq_sge); 651 return -EINVAL; 652 } 653 if (init_attr->cap.max_inline_data > dev->dev_attr.inline_buf_size_ex) { 654 ibdev_dbg(&dev->ibdev, 655 "qp: requested inline data[%u] exceeds the max[%u]\n", 656 init_attr->cap.max_inline_data, 657 dev->dev_attr.inline_buf_size_ex); 658 return -EINVAL; 659 } 660 661 return 0; 662 } 663 664 static int efa_qp_validate_attr(struct efa_dev *dev, 665 struct ib_qp_init_attr *init_attr) 666 { 667 if (init_attr->qp_type != IB_QPT_DRIVER && 668 init_attr->qp_type != IB_QPT_UD) { 669 ibdev_dbg(&dev->ibdev, 670 "Unsupported qp type %d\n", init_attr->qp_type); 671 return -EOPNOTSUPP; 672 } 673 674 if (init_attr->srq) { 675 ibdev_dbg(&dev->ibdev, "SRQ is not supported\n"); 676 return -EOPNOTSUPP; 677 } 678 679 if (init_attr->create_flags) { 680 ibdev_dbg(&dev->ibdev, "Unsupported create flags\n"); 681 return -EOPNOTSUPP; 682 } 683 684 return 0; 685 } 686 687 int efa_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *init_attr, 688 struct ib_udata *udata) 689 { 690 struct efa_com_create_qp_params create_qp_params = {}; 691 struct efa_com_create_qp_result create_qp_resp; 692 struct efa_dev *dev = to_edev(ibqp->device); 693 struct efa_ibv_create_qp_resp resp = {}; 694 struct efa_ibv_create_qp cmd; 695 struct efa_qp *qp = to_eqp(ibqp); 696 struct efa_ucontext *ucontext; 697 u16 supported_efa_flags = 0; 698 int err; 699 700 ucontext = rdma_udata_to_drv_context(udata, struct efa_ucontext, 701 ibucontext); 702 703 err = ib_copy_validate_udata_in_cm(udata, cmd, driver_qp_type, 0); 704 if (err) 705 goto err_out; 706 707 if (!is_reserved_cleared(cmd.reserved_98)) { 708 ibdev_dbg(&dev->ibdev, 709 "Incompatible ABI params, unknown fields in udata\n"); 710 err = -EINVAL; 711 goto err_out; 712 } 713 714 if (EFA_DEV_CAP(dev, UNSOLICITED_WRITE_RECV)) 715 supported_efa_flags |= EFA_CREATE_QP_WITH_UNSOLICITED_WRITE_RECV; 716 717 if (cmd.flags & ~supported_efa_flags) { 718 ibdev_dbg(&dev->ibdev, "Unsupported EFA QP create flags[%#x], supported[%#x]\n", 719 cmd.flags, supported_efa_flags); 720 err = -EOPNOTSUPP; 721 goto err_out; 722 } 723 724 err = efa_qp_validate_cap(dev, init_attr, cmd.sq_ring_size); 725 if (err) 726 goto err_out; 727 728 err = efa_qp_validate_attr(dev, init_attr); 729 if (err) 730 goto err_out; 731 732 create_qp_params.uarn = ucontext->uarn; 733 create_qp_params.pd = to_epd(ibqp->pd)->pdn; 734 735 if (init_attr->qp_type == IB_QPT_UD) { 736 create_qp_params.qp_type = EFA_ADMIN_QP_TYPE_UD; 737 } else if (cmd.driver_qp_type == EFA_QP_DRIVER_TYPE_SRD) { 738 create_qp_params.qp_type = EFA_ADMIN_QP_TYPE_SRD; 739 } else { 740 ibdev_dbg(&dev->ibdev, 741 "Unsupported qp type %d driver qp type %d\n", 742 init_attr->qp_type, cmd.driver_qp_type); 743 err = -EOPNOTSUPP; 744 goto err_out; 745 } 746 747 ibdev_dbg(&dev->ibdev, "Create QP: qp type %d driver qp type %#x\n", 748 init_attr->qp_type, cmd.driver_qp_type); 749 create_qp_params.send_cq_idx = to_ecq(init_attr->send_cq)->cq_idx; 750 create_qp_params.recv_cq_idx = to_ecq(init_attr->recv_cq)->cq_idx; 751 create_qp_params.sq_depth = init_attr->cap.max_send_wr; 752 create_qp_params.sq_ring_size_in_bytes = cmd.sq_ring_size; 753 754 create_qp_params.rq_depth = init_attr->cap.max_recv_wr; 755 create_qp_params.rq_ring_size_in_bytes = cmd.rq_ring_size; 756 qp->rq_size = PAGE_ALIGN(create_qp_params.rq_ring_size_in_bytes); 757 if (qp->rq_size) { 758 qp->rq_cpu_addr = efa_zalloc_mapped(dev, &qp->rq_dma_addr, 759 qp->rq_size, DMA_TO_DEVICE); 760 if (!qp->rq_cpu_addr) { 761 err = -ENOMEM; 762 goto err_out; 763 } 764 765 ibdev_dbg(&dev->ibdev, 766 "qp->cpu_addr[0x%p] allocated: size[%lu], dma[%pad]\n", 767 qp->rq_cpu_addr, qp->rq_size, &qp->rq_dma_addr); 768 create_qp_params.rq_base_addr = qp->rq_dma_addr; 769 } 770 771 create_qp_params.sl = cmd.sl; 772 773 if (cmd.flags & EFA_CREATE_QP_WITH_UNSOLICITED_WRITE_RECV) 774 create_qp_params.unsolicited_write_recv = true; 775 776 err = efa_com_create_qp(&dev->edev, &create_qp_params, 777 &create_qp_resp); 778 if (err) 779 goto err_free_mapped; 780 781 resp.sq_db_offset = create_qp_resp.sq_db_offset; 782 resp.rq_db_offset = create_qp_resp.rq_db_offset; 783 resp.llq_desc_offset = create_qp_resp.llq_descriptors_offset; 784 resp.send_sub_cq_idx = create_qp_resp.send_sub_cq_idx; 785 resp.recv_sub_cq_idx = create_qp_resp.recv_sub_cq_idx; 786 787 err = qp_mmap_entries_setup(qp, dev, ucontext, &create_qp_params, 788 &resp); 789 if (err) 790 goto err_destroy_qp; 791 792 qp->qp_handle = create_qp_resp.qp_handle; 793 qp->ibqp.qp_num = create_qp_resp.qp_num; 794 qp->max_send_wr = init_attr->cap.max_send_wr; 795 qp->max_recv_wr = init_attr->cap.max_recv_wr; 796 qp->max_send_sge = init_attr->cap.max_send_sge; 797 qp->max_recv_sge = init_attr->cap.max_recv_sge; 798 qp->max_inline_data = init_attr->cap.max_inline_data; 799 800 if (udata->outlen) { 801 err = ib_copy_to_udata(udata, &resp, 802 min(sizeof(resp), udata->outlen)); 803 if (err) { 804 ibdev_dbg(&dev->ibdev, 805 "Failed to copy udata for qp[%u]\n", 806 create_qp_resp.qp_num); 807 goto err_remove_mmap_entries; 808 } 809 } 810 811 ibdev_dbg(&dev->ibdev, "Created qp[%d]\n", qp->ibqp.qp_num); 812 813 return 0; 814 815 err_remove_mmap_entries: 816 efa_qp_user_mmap_entries_remove(qp); 817 err_destroy_qp: 818 efa_destroy_qp_handle(dev, create_qp_resp.qp_handle); 819 err_free_mapped: 820 if (qp->rq_cpu_addr) 821 efa_free_mapped(dev, qp->rq_cpu_addr, qp->rq_dma_addr, 822 qp->rq_size, DMA_TO_DEVICE); 823 err_out: 824 atomic64_inc(&dev->stats.create_qp_err); 825 return err; 826 } 827 828 static const struct { 829 int valid; 830 enum ib_qp_attr_mask req_param; 831 enum ib_qp_attr_mask opt_param; 832 } srd_qp_state_table[IB_QPS_ERR + 1][IB_QPS_ERR + 1] = { 833 [IB_QPS_RESET] = { 834 [IB_QPS_RESET] = { .valid = 1 }, 835 [IB_QPS_INIT] = { 836 .valid = 1, 837 .req_param = IB_QP_PKEY_INDEX | 838 IB_QP_PORT | 839 IB_QP_QKEY, 840 }, 841 }, 842 [IB_QPS_INIT] = { 843 [IB_QPS_RESET] = { .valid = 1 }, 844 [IB_QPS_ERR] = { .valid = 1 }, 845 [IB_QPS_INIT] = { 846 .valid = 1, 847 .opt_param = IB_QP_PKEY_INDEX | 848 IB_QP_PORT | 849 IB_QP_QKEY, 850 }, 851 [IB_QPS_RTR] = { 852 .valid = 1, 853 .opt_param = IB_QP_PKEY_INDEX | 854 IB_QP_QKEY, 855 }, 856 }, 857 [IB_QPS_RTR] = { 858 [IB_QPS_RESET] = { .valid = 1 }, 859 [IB_QPS_ERR] = { .valid = 1 }, 860 [IB_QPS_RTS] = { 861 .valid = 1, 862 .req_param = IB_QP_SQ_PSN, 863 .opt_param = IB_QP_CUR_STATE | 864 IB_QP_QKEY | 865 IB_QP_RNR_RETRY, 866 867 } 868 }, 869 [IB_QPS_RTS] = { 870 [IB_QPS_RESET] = { .valid = 1 }, 871 [IB_QPS_ERR] = { .valid = 1 }, 872 [IB_QPS_RTS] = { 873 .valid = 1, 874 .opt_param = IB_QP_CUR_STATE | 875 IB_QP_QKEY, 876 }, 877 [IB_QPS_SQD] = { 878 .valid = 1, 879 .opt_param = IB_QP_EN_SQD_ASYNC_NOTIFY, 880 }, 881 }, 882 [IB_QPS_SQD] = { 883 [IB_QPS_RESET] = { .valid = 1 }, 884 [IB_QPS_ERR] = { .valid = 1 }, 885 [IB_QPS_RTS] = { 886 .valid = 1, 887 .opt_param = IB_QP_CUR_STATE | 888 IB_QP_QKEY, 889 }, 890 [IB_QPS_SQD] = { 891 .valid = 1, 892 .opt_param = IB_QP_PKEY_INDEX | 893 IB_QP_QKEY, 894 } 895 }, 896 [IB_QPS_SQE] = { 897 [IB_QPS_RESET] = { .valid = 1 }, 898 [IB_QPS_ERR] = { .valid = 1 }, 899 [IB_QPS_RTS] = { 900 .valid = 1, 901 .opt_param = IB_QP_CUR_STATE | 902 IB_QP_QKEY, 903 } 904 }, 905 [IB_QPS_ERR] = { 906 [IB_QPS_RESET] = { .valid = 1 }, 907 [IB_QPS_ERR] = { .valid = 1 }, 908 } 909 }; 910 911 static bool efa_modify_srd_qp_is_ok(enum ib_qp_state cur_state, 912 enum ib_qp_state next_state, 913 enum ib_qp_attr_mask mask) 914 { 915 enum ib_qp_attr_mask req_param, opt_param; 916 917 if (mask & IB_QP_CUR_STATE && 918 cur_state != IB_QPS_RTR && cur_state != IB_QPS_RTS && 919 cur_state != IB_QPS_SQD && cur_state != IB_QPS_SQE) 920 return false; 921 922 if (!srd_qp_state_table[cur_state][next_state].valid) 923 return false; 924 925 req_param = srd_qp_state_table[cur_state][next_state].req_param; 926 opt_param = srd_qp_state_table[cur_state][next_state].opt_param; 927 928 if ((mask & req_param) != req_param) 929 return false; 930 931 if (mask & ~(req_param | opt_param | IB_QP_STATE)) 932 return false; 933 934 return true; 935 } 936 937 static int efa_modify_qp_validate(struct efa_dev *dev, struct efa_qp *qp, 938 struct ib_qp_attr *qp_attr, int qp_attr_mask, 939 enum ib_qp_state cur_state, 940 enum ib_qp_state new_state) 941 { 942 int err; 943 944 #define EFA_MODIFY_QP_SUPP_MASK \ 945 (IB_QP_STATE | IB_QP_CUR_STATE | IB_QP_EN_SQD_ASYNC_NOTIFY | \ 946 IB_QP_PKEY_INDEX | IB_QP_PORT | IB_QP_QKEY | IB_QP_SQ_PSN | \ 947 IB_QP_RNR_RETRY) 948 949 if (qp_attr_mask & ~EFA_MODIFY_QP_SUPP_MASK) { 950 ibdev_dbg(&dev->ibdev, 951 "Unsupported qp_attr_mask[%#x] supported[%#x]\n", 952 qp_attr_mask, EFA_MODIFY_QP_SUPP_MASK); 953 return -EOPNOTSUPP; 954 } 955 956 if (qp->ibqp.qp_type == IB_QPT_DRIVER) 957 err = !efa_modify_srd_qp_is_ok(cur_state, new_state, 958 qp_attr_mask); 959 else 960 err = !ib_modify_qp_is_ok(cur_state, new_state, IB_QPT_UD, 961 qp_attr_mask); 962 963 if (err) { 964 ibdev_dbg(&dev->ibdev, "Invalid modify QP parameters\n"); 965 return -EINVAL; 966 } 967 968 if ((qp_attr_mask & IB_QP_PORT) && qp_attr->port_num != 1) { 969 ibdev_dbg(&dev->ibdev, "Can't change port num\n"); 970 return -EOPNOTSUPP; 971 } 972 973 if ((qp_attr_mask & IB_QP_PKEY_INDEX) && qp_attr->pkey_index) { 974 ibdev_dbg(&dev->ibdev, "Can't change pkey index\n"); 975 return -EOPNOTSUPP; 976 } 977 978 return 0; 979 } 980 981 int efa_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, 982 int qp_attr_mask, struct ib_udata *udata) 983 { 984 struct efa_dev *dev = to_edev(ibqp->device); 985 struct efa_com_modify_qp_params params = {}; 986 struct efa_qp *qp = to_eqp(ibqp); 987 enum ib_qp_state cur_state; 988 enum ib_qp_state new_state; 989 int err; 990 991 if (qp_attr_mask & ~IB_QP_ATTR_STANDARD_BITS) 992 return -EOPNOTSUPP; 993 994 if (udata->inlen && 995 !ib_is_udata_cleared(udata, 0, udata->inlen)) { 996 ibdev_dbg(&dev->ibdev, 997 "Incompatible ABI params, udata not cleared\n"); 998 return -EINVAL; 999 } 1000 1001 cur_state = qp_attr_mask & IB_QP_CUR_STATE ? qp_attr->cur_qp_state : 1002 qp->state; 1003 new_state = qp_attr_mask & IB_QP_STATE ? qp_attr->qp_state : cur_state; 1004 1005 err = efa_modify_qp_validate(dev, qp, qp_attr, qp_attr_mask, cur_state, 1006 new_state); 1007 if (err) 1008 return err; 1009 1010 params.qp_handle = qp->qp_handle; 1011 1012 if (qp_attr_mask & IB_QP_STATE) { 1013 EFA_SET(¶ms.modify_mask, EFA_ADMIN_MODIFY_QP_CMD_QP_STATE, 1014 1); 1015 EFA_SET(¶ms.modify_mask, 1016 EFA_ADMIN_MODIFY_QP_CMD_CUR_QP_STATE, 1); 1017 params.cur_qp_state = cur_state; 1018 params.qp_state = new_state; 1019 } 1020 1021 if (qp_attr_mask & IB_QP_EN_SQD_ASYNC_NOTIFY) { 1022 EFA_SET(¶ms.modify_mask, 1023 EFA_ADMIN_MODIFY_QP_CMD_SQ_DRAINED_ASYNC_NOTIFY, 1); 1024 params.sq_drained_async_notify = qp_attr->en_sqd_async_notify; 1025 } 1026 1027 if (qp_attr_mask & IB_QP_QKEY) { 1028 EFA_SET(¶ms.modify_mask, EFA_ADMIN_MODIFY_QP_CMD_QKEY, 1); 1029 params.qkey = qp_attr->qkey; 1030 } 1031 1032 if (qp_attr_mask & IB_QP_SQ_PSN) { 1033 EFA_SET(¶ms.modify_mask, EFA_ADMIN_MODIFY_QP_CMD_SQ_PSN, 1); 1034 params.sq_psn = qp_attr->sq_psn; 1035 } 1036 1037 if (qp_attr_mask & IB_QP_RNR_RETRY) { 1038 EFA_SET(¶ms.modify_mask, EFA_ADMIN_MODIFY_QP_CMD_RNR_RETRY, 1039 1); 1040 params.rnr_retry = qp_attr->rnr_retry; 1041 } 1042 1043 err = efa_com_modify_qp(&dev->edev, ¶ms); 1044 if (err) 1045 return err; 1046 1047 qp->state = new_state; 1048 1049 return 0; 1050 } 1051 1052 static int efa_destroy_cq_idx(struct efa_dev *dev, int cq_idx) 1053 { 1054 struct efa_com_destroy_cq_params params = { .cq_idx = cq_idx }; 1055 1056 return efa_com_destroy_cq(&dev->edev, ¶ms); 1057 } 1058 1059 static void efa_cq_user_mmap_entries_remove(struct efa_cq *cq) 1060 { 1061 rdma_user_mmap_entry_remove(cq->db_mmap_entry); 1062 rdma_user_mmap_entry_remove(cq->mmap_entry); 1063 } 1064 1065 int efa_destroy_cq(struct ib_cq *ibcq, struct ib_udata *udata) 1066 { 1067 struct efa_dev *dev = to_edev(ibcq->device); 1068 struct efa_cq *cq = to_ecq(ibcq); 1069 1070 ibdev_dbg(&dev->ibdev, 1071 "Destroy cq[%d] virt[0x%p] freed: size[%lu], dma[%pad]\n", 1072 cq->cq_idx, cq->cpu_addr, cq->size, &cq->dma_addr); 1073 1074 efa_destroy_cq_idx(dev, cq->cq_idx); 1075 if (cq->cpu_addr) 1076 efa_cq_user_mmap_entries_remove(cq); 1077 if (cq->eq) { 1078 xa_erase(&dev->cqs_xa, cq->cq_idx); 1079 synchronize_irq(cq->eq->irq.irqn); 1080 } 1081 1082 if (cq->cpu_addr) 1083 efa_free_mapped(dev, cq->cpu_addr, cq->dma_addr, cq->size, DMA_FROM_DEVICE); 1084 return 0; 1085 } 1086 1087 static struct efa_eq *efa_vec2eq(struct efa_dev *dev, int vec) 1088 { 1089 return &dev->eqs[vec]; 1090 } 1091 1092 static int cq_mmap_entries_setup(struct efa_dev *dev, struct efa_cq *cq, 1093 struct efa_ibv_create_cq_resp *resp, 1094 bool db_valid) 1095 { 1096 resp->q_mmap_size = cq->size; 1097 cq->mmap_entry = efa_user_mmap_entry_insert(&cq->ucontext->ibucontext, 1098 virt_to_phys(cq->cpu_addr), 1099 cq->size, EFA_MMAP_DMA_PAGE, 1100 &resp->q_mmap_key); 1101 if (!cq->mmap_entry) 1102 return -ENOMEM; 1103 1104 if (db_valid) { 1105 cq->db_mmap_entry = 1106 efa_user_mmap_entry_insert(&cq->ucontext->ibucontext, 1107 dev->db_bar_addr + resp->db_off, 1108 PAGE_SIZE, EFA_MMAP_IO_NC, 1109 &resp->db_mmap_key); 1110 if (!cq->db_mmap_entry) { 1111 rdma_user_mmap_entry_remove(cq->mmap_entry); 1112 return -ENOMEM; 1113 } 1114 1115 resp->db_off &= ~PAGE_MASK; 1116 resp->comp_mask |= EFA_CREATE_CQ_RESP_DB_OFF; 1117 } 1118 1119 return 0; 1120 } 1121 1122 int efa_create_user_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr, 1123 struct uverbs_attr_bundle *attrs) 1124 { 1125 struct ib_udata *udata = &attrs->driver_udata; 1126 struct efa_ucontext *ucontext = rdma_udata_to_drv_context( 1127 udata, struct efa_ucontext, ibucontext); 1128 struct efa_com_create_cq_params params = {}; 1129 struct efa_ibv_create_cq_resp resp = {}; 1130 struct efa_com_create_cq_result result; 1131 struct ib_device *ibdev = ibcq->device; 1132 struct efa_dev *dev = to_edev(ibdev); 1133 struct efa_ibv_create_cq cmd; 1134 struct efa_cq *cq = to_ecq(ibcq); 1135 int entries = attr->cqe; 1136 bool set_src_addr; 1137 int err; 1138 1139 ibdev_dbg(ibdev, "create_cq entries %d\n", entries); 1140 1141 if (attr->flags) 1142 return -EOPNOTSUPP; 1143 1144 if (entries > dev->dev_attr.max_cq_depth) { 1145 ibdev_dbg(ibdev, 1146 "cq: requested entries[%u] greater than max[%u]\n", 1147 entries, dev->dev_attr.max_cq_depth); 1148 err = -EINVAL; 1149 goto err_out; 1150 } 1151 1152 err = ib_copy_validate_udata_in_cm(udata, cmd, num_sub_cqs, 0); 1153 if (err) 1154 goto err_out; 1155 1156 if (!is_reserved_cleared(cmd.reserved_58)) { 1157 ibdev_dbg(ibdev, 1158 "Incompatible ABI params, unknown fields in udata\n"); 1159 err = -EINVAL; 1160 goto err_out; 1161 } 1162 1163 set_src_addr = !!(cmd.flags & EFA_CREATE_CQ_WITH_SGID); 1164 if ((cmd.cq_entry_size != sizeof(struct efa_io_rx_cdesc_ex)) && 1165 (set_src_addr || 1166 cmd.cq_entry_size != sizeof(struct efa_io_rx_cdesc))) { 1167 ibdev_dbg(ibdev, 1168 "Invalid entry size [%u]\n", cmd.cq_entry_size); 1169 err = -EINVAL; 1170 goto err_out; 1171 } 1172 1173 if (cmd.num_sub_cqs != dev->dev_attr.sub_cqs_per_cq) { 1174 ibdev_dbg(ibdev, 1175 "Invalid number of sub cqs[%u] expected[%u]\n", 1176 cmd.num_sub_cqs, dev->dev_attr.sub_cqs_per_cq); 1177 err = -EINVAL; 1178 goto err_out; 1179 } 1180 1181 cq->ucontext = ucontext; 1182 cq->size = PAGE_ALIGN(cmd.cq_entry_size * entries * cmd.num_sub_cqs); 1183 1184 if (ibcq->umem) { 1185 if (ibcq->umem->length < cq->size) { 1186 ibdev_dbg(&dev->ibdev, "External memory too small\n"); 1187 err = -EINVAL; 1188 goto err_out; 1189 } 1190 1191 if (!ib_umem_is_contiguous(ibcq->umem)) { 1192 ibdev_dbg(&dev->ibdev, "Non contiguous CQ unsupported\n"); 1193 err = -EINVAL; 1194 goto err_out; 1195 } 1196 1197 cq->dma_addr = ib_umem_start_dma_addr(ibcq->umem); 1198 } else { 1199 cq->cpu_addr = efa_zalloc_mapped(dev, &cq->dma_addr, cq->size, 1200 DMA_FROM_DEVICE); 1201 if (!cq->cpu_addr) { 1202 err = -ENOMEM; 1203 goto err_out; 1204 } 1205 } 1206 1207 params.uarn = cq->ucontext->uarn; 1208 params.sub_cq_depth = entries; 1209 params.dma_addr = cq->dma_addr; 1210 params.entry_size_in_bytes = cmd.cq_entry_size; 1211 params.num_sub_cqs = cmd.num_sub_cqs; 1212 params.set_src_addr = set_src_addr; 1213 if (cmd.flags & EFA_CREATE_CQ_WITH_COMPLETION_CHANNEL) { 1214 cq->eq = efa_vec2eq(dev, attr->comp_vector); 1215 params.eqn = cq->eq->eeq.eqn; 1216 params.interrupt_mode_enabled = true; 1217 } 1218 1219 err = efa_com_create_cq(&dev->edev, ¶ms, &result); 1220 if (err) 1221 goto err_free_mapped; 1222 1223 resp.db_off = result.db_off; 1224 resp.cq_idx = result.cq_idx; 1225 cq->cq_idx = result.cq_idx; 1226 cq->ibcq.cqe = result.actual_depth; 1227 WARN_ON_ONCE(entries != result.actual_depth); 1228 1229 if (cq->cpu_addr) 1230 err = cq_mmap_entries_setup(dev, cq, &resp, result.db_valid); 1231 1232 if (err) { 1233 ibdev_dbg(ibdev, "Could not setup cq[%u] mmap entries\n", 1234 cq->cq_idx); 1235 goto err_destroy_cq; 1236 } 1237 1238 if (cq->eq) { 1239 err = xa_err(xa_store(&dev->cqs_xa, cq->cq_idx, cq, GFP_KERNEL)); 1240 if (err) { 1241 ibdev_dbg(ibdev, "Failed to store cq[%u] in xarray\n", 1242 cq->cq_idx); 1243 goto err_remove_mmap; 1244 } 1245 } 1246 1247 if (udata->outlen) { 1248 err = ib_copy_to_udata(udata, &resp, 1249 min(sizeof(resp), udata->outlen)); 1250 if (err) { 1251 ibdev_dbg(ibdev, 1252 "Failed to copy udata for create_cq\n"); 1253 goto err_xa_erase; 1254 } 1255 } 1256 1257 ibdev_dbg(ibdev, "Created cq[%d], cq depth[%u]. dma[%pad] virt[0x%p]\n", 1258 cq->cq_idx, result.actual_depth, &cq->dma_addr, cq->cpu_addr); 1259 1260 return 0; 1261 1262 err_xa_erase: 1263 if (cq->eq) 1264 xa_erase(&dev->cqs_xa, cq->cq_idx); 1265 err_remove_mmap: 1266 if (cq->cpu_addr) 1267 efa_cq_user_mmap_entries_remove(cq); 1268 err_destroy_cq: 1269 efa_destroy_cq_idx(dev, cq->cq_idx); 1270 err_free_mapped: 1271 if (cq->cpu_addr) 1272 efa_free_mapped(dev, cq->cpu_addr, cq->dma_addr, cq->size, 1273 DMA_FROM_DEVICE); 1274 err_out: 1275 atomic64_inc(&dev->stats.create_cq_err); 1276 return err; 1277 } 1278 1279 static int umem_to_page_list(struct efa_dev *dev, 1280 struct ib_umem *umem, 1281 u64 *page_list, 1282 u32 hp_cnt, 1283 u8 hp_shift) 1284 { 1285 struct ib_block_iter biter; 1286 unsigned int hp_idx = 0; 1287 1288 rdma_umem_for_each_dma_block(umem, &biter, BIT(hp_shift)) 1289 page_list[hp_idx++] = rdma_block_iter_dma_address(&biter); 1290 1291 return 0; 1292 } 1293 1294 static struct scatterlist *efa_vmalloc_buf_to_sg(u64 *buf, int page_cnt) 1295 { 1296 struct scatterlist *sglist; 1297 struct page *pg; 1298 int i; 1299 1300 sglist = kmalloc_objs(*sglist, page_cnt); 1301 if (!sglist) 1302 return NULL; 1303 sg_init_table(sglist, page_cnt); 1304 for (i = 0; i < page_cnt; i++) { 1305 pg = vmalloc_to_page(buf); 1306 if (!pg) 1307 goto err; 1308 sg_set_page(&sglist[i], pg, PAGE_SIZE, 0); 1309 buf += PAGE_SIZE / sizeof(*buf); 1310 } 1311 return sglist; 1312 1313 err: 1314 kfree(sglist); 1315 return NULL; 1316 } 1317 1318 /* 1319 * create a chunk list of physical pages dma addresses from the supplied 1320 * scatter gather list 1321 */ 1322 static int pbl_chunk_list_create(struct efa_dev *dev, struct pbl_context *pbl) 1323 { 1324 struct pbl_chunk_list *chunk_list = &pbl->phys.indirect.chunk_list; 1325 int page_cnt = pbl->phys.indirect.pbl_buf_size_in_pages; 1326 struct scatterlist *pages_sgl = pbl->phys.indirect.sgl; 1327 unsigned int chunk_list_size, chunk_idx, payload_idx; 1328 int sg_dma_cnt = pbl->phys.indirect.sg_dma_cnt; 1329 struct efa_com_ctrl_buff_info *ctrl_buf; 1330 u64 *cur_chunk_buf, *prev_chunk_buf; 1331 struct ib_block_iter biter; 1332 dma_addr_t dma_addr; 1333 int i; 1334 1335 /* allocate a chunk list that consists of 4KB chunks */ 1336 chunk_list_size = DIV_ROUND_UP(page_cnt, EFA_PTRS_PER_CHUNK); 1337 1338 chunk_list->size = chunk_list_size; 1339 chunk_list->chunks = kzalloc_objs(*chunk_list->chunks, chunk_list_size); 1340 if (!chunk_list->chunks) 1341 return -ENOMEM; 1342 1343 ibdev_dbg(&dev->ibdev, 1344 "chunk_list_size[%u] - pages[%u]\n", chunk_list_size, 1345 page_cnt); 1346 1347 /* allocate chunk buffers: */ 1348 for (i = 0; i < chunk_list_size; i++) { 1349 chunk_list->chunks[i].buf = kzalloc(EFA_CHUNK_SIZE, GFP_KERNEL); 1350 if (!chunk_list->chunks[i].buf) 1351 goto chunk_list_dealloc; 1352 1353 chunk_list->chunks[i].length = EFA_CHUNK_USED_SIZE; 1354 } 1355 chunk_list->chunks[chunk_list_size - 1].length = 1356 ((page_cnt % EFA_PTRS_PER_CHUNK) * EFA_CHUNK_PAYLOAD_PTR_SIZE) + 1357 EFA_CHUNK_PTR_SIZE; 1358 1359 /* fill the dma addresses of sg list pages to chunks: */ 1360 chunk_idx = 0; 1361 payload_idx = 0; 1362 cur_chunk_buf = chunk_list->chunks[0].buf; 1363 rdma_for_each_block(pages_sgl, &biter, sg_dma_cnt, 1364 EFA_CHUNK_PAYLOAD_SIZE) { 1365 cur_chunk_buf[payload_idx++] = 1366 rdma_block_iter_dma_address(&biter); 1367 1368 if (payload_idx == EFA_PTRS_PER_CHUNK) { 1369 chunk_idx++; 1370 cur_chunk_buf = chunk_list->chunks[chunk_idx].buf; 1371 payload_idx = 0; 1372 } 1373 } 1374 1375 /* map chunks to dma and fill chunks next ptrs */ 1376 for (i = chunk_list_size - 1; i >= 0; i--) { 1377 dma_addr = dma_map_single(&dev->pdev->dev, 1378 chunk_list->chunks[i].buf, 1379 chunk_list->chunks[i].length, 1380 DMA_TO_DEVICE); 1381 if (dma_mapping_error(&dev->pdev->dev, dma_addr)) { 1382 ibdev_err(&dev->ibdev, 1383 "chunk[%u] dma_map_failed\n", i); 1384 goto chunk_list_unmap; 1385 } 1386 1387 chunk_list->chunks[i].dma_addr = dma_addr; 1388 ibdev_dbg(&dev->ibdev, 1389 "chunk[%u] mapped at [%pad]\n", i, &dma_addr); 1390 1391 if (!i) 1392 break; 1393 1394 prev_chunk_buf = chunk_list->chunks[i - 1].buf; 1395 1396 ctrl_buf = (struct efa_com_ctrl_buff_info *) 1397 &prev_chunk_buf[EFA_PTRS_PER_CHUNK]; 1398 ctrl_buf->length = chunk_list->chunks[i].length; 1399 1400 efa_com_set_dma_addr(dma_addr, 1401 &ctrl_buf->address.mem_addr_high, 1402 &ctrl_buf->address.mem_addr_low); 1403 } 1404 1405 return 0; 1406 1407 chunk_list_unmap: 1408 for (; i < chunk_list_size; i++) { 1409 dma_unmap_single(&dev->pdev->dev, chunk_list->chunks[i].dma_addr, 1410 chunk_list->chunks[i].length, DMA_TO_DEVICE); 1411 } 1412 chunk_list_dealloc: 1413 for (i = 0; i < chunk_list_size; i++) 1414 kfree(chunk_list->chunks[i].buf); 1415 1416 kfree(chunk_list->chunks); 1417 return -ENOMEM; 1418 } 1419 1420 static void pbl_chunk_list_destroy(struct efa_dev *dev, struct pbl_context *pbl) 1421 { 1422 struct pbl_chunk_list *chunk_list = &pbl->phys.indirect.chunk_list; 1423 int i; 1424 1425 for (i = 0; i < chunk_list->size; i++) { 1426 dma_unmap_single(&dev->pdev->dev, chunk_list->chunks[i].dma_addr, 1427 chunk_list->chunks[i].length, DMA_TO_DEVICE); 1428 kfree(chunk_list->chunks[i].buf); 1429 } 1430 1431 kfree(chunk_list->chunks); 1432 } 1433 1434 /* initialize pbl continuous mode: map pbl buffer to a dma address. */ 1435 static int pbl_continuous_initialize(struct efa_dev *dev, 1436 struct pbl_context *pbl) 1437 { 1438 dma_addr_t dma_addr; 1439 1440 dma_addr = dma_map_single(&dev->pdev->dev, pbl->pbl_buf, 1441 pbl->pbl_buf_size_in_bytes, DMA_TO_DEVICE); 1442 if (dma_mapping_error(&dev->pdev->dev, dma_addr)) { 1443 ibdev_err(&dev->ibdev, "Unable to map pbl to DMA address\n"); 1444 return -ENOMEM; 1445 } 1446 1447 pbl->phys.continuous.dma_addr = dma_addr; 1448 ibdev_dbg(&dev->ibdev, 1449 "pbl continuous - dma_addr = %pad, size[%u]\n", 1450 &dma_addr, pbl->pbl_buf_size_in_bytes); 1451 1452 return 0; 1453 } 1454 1455 /* 1456 * initialize pbl indirect mode: 1457 * create a chunk list out of the dma addresses of the physical pages of 1458 * pbl buffer. 1459 */ 1460 static int pbl_indirect_initialize(struct efa_dev *dev, struct pbl_context *pbl) 1461 { 1462 u32 size_in_pages = DIV_ROUND_UP(pbl->pbl_buf_size_in_bytes, EFA_CHUNK_PAYLOAD_SIZE); 1463 struct scatterlist *sgl; 1464 int sg_dma_cnt, err; 1465 1466 BUILD_BUG_ON(EFA_CHUNK_PAYLOAD_SIZE > PAGE_SIZE); 1467 sgl = efa_vmalloc_buf_to_sg(pbl->pbl_buf, size_in_pages); 1468 if (!sgl) 1469 return -ENOMEM; 1470 1471 sg_dma_cnt = dma_map_sg(&dev->pdev->dev, sgl, size_in_pages, DMA_TO_DEVICE); 1472 if (!sg_dma_cnt) { 1473 err = -EINVAL; 1474 goto err_map; 1475 } 1476 1477 pbl->phys.indirect.pbl_buf_size_in_pages = size_in_pages; 1478 pbl->phys.indirect.sgl = sgl; 1479 pbl->phys.indirect.sg_dma_cnt = sg_dma_cnt; 1480 err = pbl_chunk_list_create(dev, pbl); 1481 if (err) { 1482 ibdev_dbg(&dev->ibdev, 1483 "chunk_list creation failed[%d]\n", err); 1484 goto err_chunk; 1485 } 1486 1487 ibdev_dbg(&dev->ibdev, 1488 "pbl indirect - size[%u], chunks[%u]\n", 1489 pbl->pbl_buf_size_in_bytes, 1490 pbl->phys.indirect.chunk_list.size); 1491 1492 return 0; 1493 1494 err_chunk: 1495 dma_unmap_sg(&dev->pdev->dev, sgl, size_in_pages, DMA_TO_DEVICE); 1496 err_map: 1497 kfree(sgl); 1498 return err; 1499 } 1500 1501 static void pbl_indirect_terminate(struct efa_dev *dev, struct pbl_context *pbl) 1502 { 1503 pbl_chunk_list_destroy(dev, pbl); 1504 dma_unmap_sg(&dev->pdev->dev, pbl->phys.indirect.sgl, 1505 pbl->phys.indirect.pbl_buf_size_in_pages, DMA_TO_DEVICE); 1506 kfree(pbl->phys.indirect.sgl); 1507 } 1508 1509 /* create a page buffer list from a mapped user memory region */ 1510 static int pbl_create(struct efa_dev *dev, 1511 struct pbl_context *pbl, 1512 struct ib_umem *umem, 1513 int hp_cnt, 1514 u8 hp_shift) 1515 { 1516 int err; 1517 1518 pbl->pbl_buf_size_in_bytes = hp_cnt * EFA_CHUNK_PAYLOAD_PTR_SIZE; 1519 pbl->pbl_buf = kvzalloc(pbl->pbl_buf_size_in_bytes, GFP_KERNEL); 1520 if (!pbl->pbl_buf) 1521 return -ENOMEM; 1522 1523 if (is_vmalloc_addr(pbl->pbl_buf)) { 1524 pbl->physically_continuous = 0; 1525 err = umem_to_page_list(dev, umem, pbl->pbl_buf, hp_cnt, 1526 hp_shift); 1527 if (err) 1528 goto err_free; 1529 1530 err = pbl_indirect_initialize(dev, pbl); 1531 if (err) 1532 goto err_free; 1533 } else { 1534 pbl->physically_continuous = 1; 1535 err = umem_to_page_list(dev, umem, pbl->pbl_buf, hp_cnt, 1536 hp_shift); 1537 if (err) 1538 goto err_free; 1539 1540 err = pbl_continuous_initialize(dev, pbl); 1541 if (err) 1542 goto err_free; 1543 } 1544 1545 ibdev_dbg(&dev->ibdev, 1546 "user_pbl_created: user_pages[%u], continuous[%u]\n", 1547 hp_cnt, pbl->physically_continuous); 1548 1549 return 0; 1550 1551 err_free: 1552 kvfree(pbl->pbl_buf); 1553 return err; 1554 } 1555 1556 static void pbl_destroy(struct efa_dev *dev, struct pbl_context *pbl) 1557 { 1558 if (pbl->physically_continuous) 1559 dma_unmap_single(&dev->pdev->dev, pbl->phys.continuous.dma_addr, 1560 pbl->pbl_buf_size_in_bytes, DMA_TO_DEVICE); 1561 else 1562 pbl_indirect_terminate(dev, pbl); 1563 1564 kvfree(pbl->pbl_buf); 1565 } 1566 1567 static int efa_create_inline_pbl(struct efa_dev *dev, struct efa_mr *mr, 1568 struct efa_com_reg_mr_params *params) 1569 { 1570 int err; 1571 1572 params->inline_pbl = 1; 1573 err = umem_to_page_list(dev, mr->umem, params->pbl.inline_pbl_array, 1574 params->page_num, params->page_shift); 1575 if (err) 1576 return err; 1577 1578 ibdev_dbg(&dev->ibdev, 1579 "inline_pbl_array - pages[%u]\n", params->page_num); 1580 1581 return 0; 1582 } 1583 1584 static int efa_create_pbl(struct efa_dev *dev, 1585 struct pbl_context *pbl, 1586 struct efa_mr *mr, 1587 struct efa_com_reg_mr_params *params) 1588 { 1589 int err; 1590 1591 err = pbl_create(dev, pbl, mr->umem, params->page_num, 1592 params->page_shift); 1593 if (err) { 1594 ibdev_dbg(&dev->ibdev, "Failed to create pbl[%d]\n", err); 1595 return err; 1596 } 1597 1598 params->inline_pbl = 0; 1599 params->indirect = !pbl->physically_continuous; 1600 if (pbl->physically_continuous) { 1601 params->pbl.pbl.length = pbl->pbl_buf_size_in_bytes; 1602 1603 efa_com_set_dma_addr(pbl->phys.continuous.dma_addr, 1604 ¶ms->pbl.pbl.address.mem_addr_high, 1605 ¶ms->pbl.pbl.address.mem_addr_low); 1606 } else { 1607 params->pbl.pbl.length = 1608 pbl->phys.indirect.chunk_list.chunks[0].length; 1609 1610 efa_com_set_dma_addr(pbl->phys.indirect.chunk_list.chunks[0].dma_addr, 1611 ¶ms->pbl.pbl.address.mem_addr_high, 1612 ¶ms->pbl.pbl.address.mem_addr_low); 1613 } 1614 1615 return 0; 1616 } 1617 1618 static struct efa_mr *efa_alloc_mr(struct ib_pd *ibpd, int access_flags, 1619 struct ib_udata *udata) 1620 { 1621 struct efa_dev *dev = to_edev(ibpd->device); 1622 int supp_access_flags; 1623 struct efa_mr *mr; 1624 1625 if (udata && udata->inlen && 1626 !ib_is_udata_cleared(udata, 0, udata->inlen)) { 1627 ibdev_dbg(&dev->ibdev, 1628 "Incompatible ABI params, udata not cleared\n"); 1629 return ERR_PTR(-EINVAL); 1630 } 1631 1632 supp_access_flags = 1633 IB_ACCESS_LOCAL_WRITE | 1634 (EFA_DEV_CAP(dev, RDMA_READ) ? IB_ACCESS_REMOTE_READ : 0) | 1635 (EFA_DEV_CAP(dev, RDMA_WRITE) ? IB_ACCESS_REMOTE_WRITE : 0); 1636 1637 access_flags &= ~IB_ACCESS_OPTIONAL; 1638 if (access_flags & ~supp_access_flags) { 1639 ibdev_dbg(&dev->ibdev, 1640 "Unsupported access flags[%#x], supported[%#x]\n", 1641 access_flags, supp_access_flags); 1642 return ERR_PTR(-EOPNOTSUPP); 1643 } 1644 1645 mr = kzalloc_obj(*mr); 1646 if (!mr) 1647 return ERR_PTR(-ENOMEM); 1648 1649 return mr; 1650 } 1651 1652 static int efa_register_mr(struct ib_pd *ibpd, struct efa_mr *mr, u64 start, 1653 u64 length, u64 virt_addr, int access_flags) 1654 { 1655 struct efa_dev *dev = to_edev(ibpd->device); 1656 struct efa_com_reg_mr_params params = {}; 1657 struct efa_com_reg_mr_result result = {}; 1658 struct pbl_context pbl; 1659 unsigned int pg_sz; 1660 int inline_size; 1661 int err; 1662 1663 params.pd = to_epd(ibpd)->pdn; 1664 params.iova = virt_addr; 1665 params.mr_length_in_bytes = length; 1666 params.permissions = access_flags; 1667 1668 pg_sz = ib_umem_find_best_pgsz(mr->umem, 1669 dev->dev_attr.page_size_cap, 1670 virt_addr); 1671 if (!pg_sz) { 1672 ibdev_dbg(&dev->ibdev, "Failed to find a suitable page size in page_size_cap %#llx\n", 1673 dev->dev_attr.page_size_cap); 1674 return -EOPNOTSUPP; 1675 } 1676 1677 params.page_shift = order_base_2(pg_sz); 1678 params.page_num = ib_umem_num_dma_blocks(mr->umem, pg_sz); 1679 1680 ibdev_dbg(&dev->ibdev, 1681 "start %#llx length %#llx params.page_shift %u params.page_num %u\n", 1682 start, length, params.page_shift, params.page_num); 1683 1684 inline_size = ARRAY_SIZE(params.pbl.inline_pbl_array); 1685 if (params.page_num <= inline_size) { 1686 err = efa_create_inline_pbl(dev, mr, ¶ms); 1687 if (err) 1688 return err; 1689 1690 err = efa_com_register_mr(&dev->edev, ¶ms, &result); 1691 if (err) 1692 return err; 1693 } else { 1694 err = efa_create_pbl(dev, &pbl, mr, ¶ms); 1695 if (err) 1696 return err; 1697 1698 err = efa_com_register_mr(&dev->edev, ¶ms, &result); 1699 pbl_destroy(dev, &pbl); 1700 1701 if (err) 1702 return err; 1703 } 1704 1705 mr->ibmr.lkey = result.l_key; 1706 mr->ibmr.rkey = result.r_key; 1707 mr->ibmr.length = length; 1708 mr->ic_info.recv_ic_id = result.ic_info.recv_ic_id; 1709 mr->ic_info.rdma_read_ic_id = result.ic_info.rdma_read_ic_id; 1710 mr->ic_info.rdma_recv_ic_id = result.ic_info.rdma_recv_ic_id; 1711 mr->ic_info.recv_ic_id_valid = result.ic_info.recv_ic_id_valid; 1712 mr->ic_info.rdma_read_ic_id_valid = result.ic_info.rdma_read_ic_id_valid; 1713 mr->ic_info.rdma_recv_ic_id_valid = result.ic_info.rdma_recv_ic_id_valid; 1714 ibdev_dbg(&dev->ibdev, "Registered mr[%d]\n", mr->ibmr.lkey); 1715 1716 return 0; 1717 } 1718 1719 struct ib_mr *efa_reg_user_mr_dmabuf(struct ib_pd *ibpd, u64 start, 1720 u64 length, u64 virt_addr, 1721 int fd, int access_flags, 1722 struct ib_dmah *dmah, 1723 struct uverbs_attr_bundle *attrs) 1724 { 1725 struct efa_dev *dev = to_edev(ibpd->device); 1726 struct ib_umem_dmabuf *umem_dmabuf; 1727 struct efa_mr *mr; 1728 int err; 1729 1730 if (dmah) { 1731 err = -EOPNOTSUPP; 1732 goto err_out; 1733 } 1734 1735 mr = efa_alloc_mr(ibpd, access_flags, &attrs->driver_udata); 1736 if (IS_ERR(mr)) { 1737 err = PTR_ERR(mr); 1738 goto err_out; 1739 } 1740 1741 umem_dmabuf = ib_umem_dmabuf_get_pinned(ibpd->device, start, length, fd, 1742 access_flags); 1743 if (IS_ERR(umem_dmabuf)) { 1744 err = PTR_ERR(umem_dmabuf); 1745 ibdev_dbg(&dev->ibdev, "Failed to get dmabuf umem[%pe]\n", 1746 umem_dmabuf); 1747 goto err_free; 1748 } 1749 1750 mr->umem = &umem_dmabuf->umem; 1751 err = efa_register_mr(ibpd, mr, start, length, virt_addr, access_flags); 1752 if (err) 1753 goto err_release; 1754 1755 return &mr->ibmr; 1756 1757 err_release: 1758 ib_umem_release(mr->umem); 1759 err_free: 1760 kfree(mr); 1761 err_out: 1762 atomic64_inc(&dev->stats.reg_mr_err); 1763 return ERR_PTR(err); 1764 } 1765 1766 struct ib_mr *efa_reg_mr(struct ib_pd *ibpd, u64 start, u64 length, 1767 u64 virt_addr, int access_flags, 1768 struct ib_dmah *dmah, 1769 struct ib_udata *udata) 1770 { 1771 struct efa_dev *dev = to_edev(ibpd->device); 1772 struct efa_mr *mr; 1773 int err; 1774 1775 if (dmah) { 1776 err = -EOPNOTSUPP; 1777 goto err_out; 1778 } 1779 1780 mr = efa_alloc_mr(ibpd, access_flags, udata); 1781 if (IS_ERR(mr)) { 1782 err = PTR_ERR(mr); 1783 goto err_out; 1784 } 1785 1786 mr->umem = ib_umem_get(ibpd->device, start, length, access_flags); 1787 if (IS_ERR(mr->umem)) { 1788 err = PTR_ERR(mr->umem); 1789 ibdev_dbg(&dev->ibdev, 1790 "Failed to pin and map user space memory[%pe]\n", 1791 mr->umem); 1792 goto err_free; 1793 } 1794 1795 err = efa_register_mr(ibpd, mr, start, length, virt_addr, access_flags); 1796 if (err) 1797 goto err_release; 1798 1799 return &mr->ibmr; 1800 1801 err_release: 1802 ib_umem_release(mr->umem); 1803 err_free: 1804 kfree(mr); 1805 err_out: 1806 atomic64_inc(&dev->stats.reg_mr_err); 1807 return ERR_PTR(err); 1808 } 1809 1810 static int UVERBS_HANDLER(EFA_IB_METHOD_MR_QUERY)(struct uverbs_attr_bundle *attrs) 1811 { 1812 struct ib_mr *ibmr = uverbs_attr_get_obj(attrs, EFA_IB_ATTR_QUERY_MR_HANDLE); 1813 struct efa_mr *mr = to_emr(ibmr); 1814 u16 ic_id_validity = 0; 1815 int ret; 1816 1817 ret = uverbs_copy_to(attrs, EFA_IB_ATTR_QUERY_MR_RESP_RECV_IC_ID, 1818 &mr->ic_info.recv_ic_id, sizeof(mr->ic_info.recv_ic_id)); 1819 if (ret) 1820 return ret; 1821 1822 ret = uverbs_copy_to(attrs, EFA_IB_ATTR_QUERY_MR_RESP_RDMA_READ_IC_ID, 1823 &mr->ic_info.rdma_read_ic_id, sizeof(mr->ic_info.rdma_read_ic_id)); 1824 if (ret) 1825 return ret; 1826 1827 ret = uverbs_copy_to(attrs, EFA_IB_ATTR_QUERY_MR_RESP_RDMA_RECV_IC_ID, 1828 &mr->ic_info.rdma_recv_ic_id, sizeof(mr->ic_info.rdma_recv_ic_id)); 1829 if (ret) 1830 return ret; 1831 1832 if (mr->ic_info.recv_ic_id_valid) 1833 ic_id_validity |= EFA_QUERY_MR_VALIDITY_RECV_IC_ID; 1834 if (mr->ic_info.rdma_read_ic_id_valid) 1835 ic_id_validity |= EFA_QUERY_MR_VALIDITY_RDMA_READ_IC_ID; 1836 if (mr->ic_info.rdma_recv_ic_id_valid) 1837 ic_id_validity |= EFA_QUERY_MR_VALIDITY_RDMA_RECV_IC_ID; 1838 1839 return uverbs_copy_to(attrs, EFA_IB_ATTR_QUERY_MR_RESP_IC_ID_VALIDITY, 1840 &ic_id_validity, sizeof(ic_id_validity)); 1841 } 1842 1843 int efa_dereg_mr(struct ib_mr *ibmr, struct ib_udata *udata) 1844 { 1845 struct efa_dev *dev = to_edev(ibmr->device); 1846 struct efa_com_dereg_mr_params params; 1847 struct efa_mr *mr = to_emr(ibmr); 1848 int err; 1849 1850 ibdev_dbg(&dev->ibdev, "Deregister mr[%d]\n", ibmr->lkey); 1851 1852 params.l_key = mr->ibmr.lkey; 1853 err = efa_com_dereg_mr(&dev->edev, ¶ms); 1854 if (err) 1855 return err; 1856 1857 ib_umem_release(mr->umem); 1858 kfree(mr); 1859 1860 return 0; 1861 } 1862 1863 int efa_get_port_immutable(struct ib_device *ibdev, u32 port_num, 1864 struct ib_port_immutable *immutable) 1865 { 1866 struct ib_port_attr attr; 1867 int err; 1868 1869 err = ib_query_port(ibdev, port_num, &attr); 1870 if (err) { 1871 ibdev_dbg(ibdev, "Couldn't query port err[%d]\n", err); 1872 return err; 1873 } 1874 1875 immutable->pkey_tbl_len = attr.pkey_tbl_len; 1876 immutable->gid_tbl_len = attr.gid_tbl_len; 1877 1878 return 0; 1879 } 1880 1881 static int efa_dealloc_uar(struct efa_dev *dev, u16 uarn) 1882 { 1883 struct efa_com_dealloc_uar_params params = { 1884 .uarn = uarn, 1885 }; 1886 1887 return efa_com_dealloc_uar(&dev->edev, ¶ms); 1888 } 1889 1890 #define EFA_CHECK_USER_SUPP(_dev, _supported_caps, _attr, _mask, _attr_str) \ 1891 (_attr_str = (!(_dev)->dev_attr._attr || ((_supported_caps) & (_mask))) ? \ 1892 NULL : #_attr) 1893 1894 static int efa_user_supp_handshake(const struct ib_ucontext *ibucontext, 1895 const struct efa_ibv_alloc_ucontext_cmd *cmd) 1896 { 1897 struct efa_dev *dev = to_edev(ibucontext->device); 1898 char *attr_str; 1899 1900 if (EFA_CHECK_USER_SUPP(dev, cmd->supported_caps, max_tx_batch, 1901 EFA_ALLOC_UCONTEXT_CMD_SUPP_CAPS_TX_BATCH, 1902 attr_str)) 1903 goto err; 1904 1905 if (EFA_CHECK_USER_SUPP(dev, cmd->supported_caps, min_sq_depth, 1906 EFA_ALLOC_UCONTEXT_CMD_SUPP_CAPS_MIN_SQ_WR, 1907 attr_str)) 1908 goto err; 1909 1910 return 0; 1911 1912 err: 1913 ibdev_dbg(&dev->ibdev, "Userspace handshake failed for %s attribute\n", 1914 attr_str); 1915 return -EOPNOTSUPP; 1916 } 1917 1918 int efa_alloc_ucontext(struct ib_ucontext *ibucontext, struct ib_udata *udata) 1919 { 1920 struct efa_ucontext *ucontext = to_eucontext(ibucontext); 1921 struct efa_dev *dev = to_edev(ibucontext->device); 1922 struct efa_ibv_alloc_ucontext_resp resp = {}; 1923 struct efa_ibv_alloc_ucontext_cmd cmd = {}; 1924 struct efa_com_alloc_uar_result result; 1925 int err; 1926 1927 /* 1928 * it's fine if the driver does not know all request fields, 1929 * we will ack input fields in our response. 1930 */ 1931 1932 err = ib_copy_from_udata(&cmd, udata, 1933 min(sizeof(cmd), udata->inlen)); 1934 if (err) { 1935 ibdev_dbg(&dev->ibdev, 1936 "Cannot copy udata for alloc_ucontext\n"); 1937 goto err_out; 1938 } 1939 1940 err = efa_user_supp_handshake(ibucontext, &cmd); 1941 if (err) 1942 goto err_out; 1943 1944 err = efa_com_alloc_uar(&dev->edev, &result); 1945 if (err) 1946 goto err_out; 1947 1948 ucontext->uarn = result.uarn; 1949 1950 resp.cmds_supp_udata_mask |= EFA_USER_CMDS_SUPP_UDATA_QUERY_DEVICE; 1951 resp.cmds_supp_udata_mask |= EFA_USER_CMDS_SUPP_UDATA_CREATE_AH; 1952 resp.sub_cqs_per_cq = dev->dev_attr.sub_cqs_per_cq; 1953 resp.inline_buf_size = dev->dev_attr.inline_buf_size; 1954 resp.inline_buf_size_ex = dev->dev_attr.inline_buf_size_ex; 1955 resp.max_llq_size = dev->dev_attr.max_llq_size; 1956 resp.max_tx_batch = dev->dev_attr.max_tx_batch; 1957 resp.min_sq_wr = dev->dev_attr.min_sq_depth; 1958 1959 err = ib_copy_to_udata(udata, &resp, 1960 min(sizeof(resp), udata->outlen)); 1961 if (err) 1962 goto err_dealloc_uar; 1963 1964 return 0; 1965 1966 err_dealloc_uar: 1967 efa_dealloc_uar(dev, result.uarn); 1968 err_out: 1969 atomic64_inc(&dev->stats.alloc_ucontext_err); 1970 return err; 1971 } 1972 1973 void efa_dealloc_ucontext(struct ib_ucontext *ibucontext) 1974 { 1975 struct efa_ucontext *ucontext = to_eucontext(ibucontext); 1976 struct efa_dev *dev = to_edev(ibucontext->device); 1977 1978 efa_dealloc_uar(dev, ucontext->uarn); 1979 } 1980 1981 void efa_mmap_free(struct rdma_user_mmap_entry *rdma_entry) 1982 { 1983 struct efa_user_mmap_entry *entry = to_emmap(rdma_entry); 1984 1985 kfree(entry); 1986 } 1987 1988 static int __efa_mmap(struct efa_dev *dev, struct efa_ucontext *ucontext, 1989 struct vm_area_struct *vma) 1990 { 1991 struct rdma_user_mmap_entry *rdma_entry; 1992 struct efa_user_mmap_entry *entry; 1993 unsigned long va; 1994 int err = 0; 1995 u64 pfn; 1996 1997 rdma_entry = rdma_user_mmap_entry_get(&ucontext->ibucontext, vma); 1998 if (!rdma_entry) { 1999 ibdev_dbg(&dev->ibdev, 2000 "pgoff[%#lx] does not have valid entry\n", 2001 vma->vm_pgoff); 2002 atomic64_inc(&dev->stats.mmap_err); 2003 return -EINVAL; 2004 } 2005 entry = to_emmap(rdma_entry); 2006 2007 ibdev_dbg(&dev->ibdev, 2008 "Mapping address[%#llx], length[%#zx], mmap_flag[%d]\n", 2009 entry->address, rdma_entry->npages * PAGE_SIZE, 2010 entry->mmap_flag); 2011 2012 pfn = entry->address >> PAGE_SHIFT; 2013 switch (entry->mmap_flag) { 2014 case EFA_MMAP_IO_NC: 2015 err = rdma_user_mmap_io(&ucontext->ibucontext, vma, pfn, 2016 entry->rdma_entry.npages * PAGE_SIZE, 2017 pgprot_noncached(vma->vm_page_prot), 2018 rdma_entry); 2019 break; 2020 case EFA_MMAP_IO_WC: 2021 err = rdma_user_mmap_io(&ucontext->ibucontext, vma, pfn, 2022 entry->rdma_entry.npages * PAGE_SIZE, 2023 pgprot_writecombine(vma->vm_page_prot), 2024 rdma_entry); 2025 break; 2026 case EFA_MMAP_DMA_PAGE: 2027 for (va = vma->vm_start; va < vma->vm_end; 2028 va += PAGE_SIZE, pfn++) { 2029 err = vm_insert_page(vma, va, pfn_to_page(pfn)); 2030 if (err) 2031 break; 2032 } 2033 break; 2034 default: 2035 err = -EINVAL; 2036 } 2037 2038 if (err) { 2039 ibdev_dbg( 2040 &dev->ibdev, 2041 "Couldn't mmap address[%#llx] length[%#zx] mmap_flag[%d] err[%d]\n", 2042 entry->address, rdma_entry->npages * PAGE_SIZE, 2043 entry->mmap_flag, err); 2044 atomic64_inc(&dev->stats.mmap_err); 2045 } 2046 2047 rdma_user_mmap_entry_put(rdma_entry); 2048 return err; 2049 } 2050 2051 int efa_mmap(struct ib_ucontext *ibucontext, 2052 struct vm_area_struct *vma) 2053 { 2054 struct efa_ucontext *ucontext = to_eucontext(ibucontext); 2055 struct efa_dev *dev = to_edev(ibucontext->device); 2056 size_t length = vma->vm_end - vma->vm_start; 2057 2058 ibdev_dbg(&dev->ibdev, 2059 "start %#lx, end %#lx, length = %#zx, pgoff = %#lx\n", 2060 vma->vm_start, vma->vm_end, length, vma->vm_pgoff); 2061 2062 return __efa_mmap(dev, ucontext, vma); 2063 } 2064 2065 static int efa_ah_destroy(struct efa_dev *dev, struct efa_ah *ah) 2066 { 2067 struct efa_com_destroy_ah_params params = { 2068 .ah = ah->ah, 2069 .pdn = to_epd(ah->ibah.pd)->pdn, 2070 }; 2071 2072 return efa_com_destroy_ah(&dev->edev, ¶ms); 2073 } 2074 2075 int efa_create_ah(struct ib_ah *ibah, 2076 struct rdma_ah_init_attr *init_attr, 2077 struct ib_udata *udata) 2078 { 2079 struct rdma_ah_attr *ah_attr = init_attr->ah_attr; 2080 struct efa_dev *dev = to_edev(ibah->device); 2081 struct efa_com_create_ah_params params = {}; 2082 struct efa_ibv_create_ah_resp resp = {}; 2083 struct efa_com_create_ah_result result; 2084 struct efa_ah *ah = to_eah(ibah); 2085 int err; 2086 2087 if (!(init_attr->flags & RDMA_CREATE_AH_SLEEPABLE)) { 2088 ibdev_dbg(&dev->ibdev, 2089 "Create address handle is not supported in atomic context\n"); 2090 err = -EOPNOTSUPP; 2091 goto err_out; 2092 } 2093 2094 if (udata->inlen && 2095 !ib_is_udata_cleared(udata, 0, udata->inlen)) { 2096 ibdev_dbg(&dev->ibdev, "Incompatible ABI params\n"); 2097 err = -EINVAL; 2098 goto err_out; 2099 } 2100 2101 memcpy(params.dest_addr, ah_attr->grh.dgid.raw, 2102 sizeof(params.dest_addr)); 2103 params.pdn = to_epd(ibah->pd)->pdn; 2104 err = efa_com_create_ah(&dev->edev, ¶ms, &result); 2105 if (err) 2106 goto err_out; 2107 2108 memcpy(ah->id, ah_attr->grh.dgid.raw, sizeof(ah->id)); 2109 ah->ah = result.ah; 2110 2111 resp.efa_address_handle = result.ah; 2112 2113 if (udata->outlen) { 2114 err = ib_copy_to_udata(udata, &resp, 2115 min(sizeof(resp), udata->outlen)); 2116 if (err) { 2117 ibdev_dbg(&dev->ibdev, 2118 "Failed to copy udata for create_ah response\n"); 2119 goto err_destroy_ah; 2120 } 2121 } 2122 ibdev_dbg(&dev->ibdev, "Created ah[%d]\n", ah->ah); 2123 2124 return 0; 2125 2126 err_destroy_ah: 2127 efa_ah_destroy(dev, ah); 2128 err_out: 2129 atomic64_inc(&dev->stats.create_ah_err); 2130 return err; 2131 } 2132 2133 int efa_destroy_ah(struct ib_ah *ibah, u32 flags) 2134 { 2135 struct efa_dev *dev = to_edev(ibah->pd->device); 2136 struct efa_ah *ah = to_eah(ibah); 2137 2138 ibdev_dbg(&dev->ibdev, "Destroy ah[%d]\n", ah->ah); 2139 2140 if (!(flags & RDMA_DESTROY_AH_SLEEPABLE)) { 2141 ibdev_dbg(&dev->ibdev, 2142 "Destroy address handle is not supported in atomic context\n"); 2143 return -EOPNOTSUPP; 2144 } 2145 2146 efa_ah_destroy(dev, ah); 2147 return 0; 2148 } 2149 2150 struct rdma_hw_stats *efa_alloc_hw_port_stats(struct ib_device *ibdev, 2151 u32 port_num) 2152 { 2153 return rdma_alloc_hw_stats_struct(efa_port_stats_descs, 2154 ARRAY_SIZE(efa_port_stats_descs), 2155 RDMA_HW_STATS_DEFAULT_LIFESPAN); 2156 } 2157 2158 struct rdma_hw_stats *efa_alloc_hw_device_stats(struct ib_device *ibdev) 2159 { 2160 return rdma_alloc_hw_stats_struct(efa_device_stats_descs, 2161 ARRAY_SIZE(efa_device_stats_descs), 2162 RDMA_HW_STATS_DEFAULT_LIFESPAN); 2163 } 2164 2165 static int efa_fill_device_stats(struct efa_dev *dev, 2166 struct rdma_hw_stats *stats) 2167 { 2168 struct efa_com_stats_admin *as = &dev->edev.aq.stats; 2169 struct efa_stats *s = &dev->stats; 2170 2171 stats->value[EFA_SUBMITTED_CMDS] = atomic64_read(&as->submitted_cmd); 2172 stats->value[EFA_COMPLETED_CMDS] = atomic64_read(&as->completed_cmd); 2173 stats->value[EFA_CMDS_ERR] = atomic64_read(&as->cmd_err); 2174 stats->value[EFA_NO_COMPLETION_CMDS] = atomic64_read(&as->no_completion); 2175 2176 stats->value[EFA_KEEP_ALIVE_RCVD] = atomic64_read(&s->keep_alive_rcvd); 2177 stats->value[EFA_ALLOC_PD_ERR] = atomic64_read(&s->alloc_pd_err); 2178 stats->value[EFA_CREATE_QP_ERR] = atomic64_read(&s->create_qp_err); 2179 stats->value[EFA_CREATE_CQ_ERR] = atomic64_read(&s->create_cq_err); 2180 stats->value[EFA_REG_MR_ERR] = atomic64_read(&s->reg_mr_err); 2181 stats->value[EFA_ALLOC_UCONTEXT_ERR] = 2182 atomic64_read(&s->alloc_ucontext_err); 2183 stats->value[EFA_CREATE_AH_ERR] = atomic64_read(&s->create_ah_err); 2184 stats->value[EFA_MMAP_ERR] = atomic64_read(&s->mmap_err); 2185 2186 return ARRAY_SIZE(efa_device_stats_descs); 2187 } 2188 2189 static int efa_fill_port_stats(struct efa_dev *dev, struct rdma_hw_stats *stats, 2190 u32 port_num) 2191 { 2192 struct efa_com_get_stats_params params = {}; 2193 union efa_com_get_stats_result result; 2194 struct efa_com_rdma_write_stats *rws; 2195 struct efa_com_rdma_read_stats *rrs; 2196 struct efa_com_messages_stats *ms; 2197 struct efa_com_network_stats *ns; 2198 struct efa_com_basic_stats *bs; 2199 int err; 2200 2201 params.scope = EFA_ADMIN_GET_STATS_SCOPE_ALL; 2202 params.type = EFA_ADMIN_GET_STATS_TYPE_BASIC; 2203 2204 err = efa_com_get_stats(&dev->edev, ¶ms, &result); 2205 if (err) 2206 return err; 2207 2208 bs = &result.basic_stats; 2209 stats->value[EFA_TX_BYTES] = bs->tx_bytes; 2210 stats->value[EFA_TX_PKTS] = bs->tx_pkts; 2211 stats->value[EFA_RX_BYTES] = bs->rx_bytes; 2212 stats->value[EFA_RX_PKTS] = bs->rx_pkts; 2213 stats->value[EFA_RX_DROPS] = bs->rx_drops; 2214 2215 params.type = EFA_ADMIN_GET_STATS_TYPE_MESSAGES; 2216 err = efa_com_get_stats(&dev->edev, ¶ms, &result); 2217 if (err) 2218 return err; 2219 2220 ms = &result.messages_stats; 2221 stats->value[EFA_SEND_BYTES] = ms->send_bytes; 2222 stats->value[EFA_SEND_WRS] = ms->send_wrs; 2223 stats->value[EFA_RECV_BYTES] = ms->recv_bytes; 2224 stats->value[EFA_RECV_WRS] = ms->recv_wrs; 2225 2226 params.type = EFA_ADMIN_GET_STATS_TYPE_RDMA_READ; 2227 err = efa_com_get_stats(&dev->edev, ¶ms, &result); 2228 if (err) 2229 return err; 2230 2231 rrs = &result.rdma_read_stats; 2232 stats->value[EFA_RDMA_READ_WRS] = rrs->read_wrs; 2233 stats->value[EFA_RDMA_READ_BYTES] = rrs->read_bytes; 2234 stats->value[EFA_RDMA_READ_WR_ERR] = rrs->read_wr_err; 2235 stats->value[EFA_RDMA_READ_RESP_BYTES] = rrs->read_resp_bytes; 2236 2237 if (EFA_DEV_CAP(dev, RDMA_WRITE)) { 2238 params.type = EFA_ADMIN_GET_STATS_TYPE_RDMA_WRITE; 2239 err = efa_com_get_stats(&dev->edev, ¶ms, &result); 2240 if (err) 2241 return err; 2242 2243 rws = &result.rdma_write_stats; 2244 stats->value[EFA_RDMA_WRITE_WRS] = rws->write_wrs; 2245 stats->value[EFA_RDMA_WRITE_BYTES] = rws->write_bytes; 2246 stats->value[EFA_RDMA_WRITE_WR_ERR] = rws->write_wr_err; 2247 stats->value[EFA_RDMA_WRITE_RECV_BYTES] = rws->write_recv_bytes; 2248 } 2249 2250 params.type = EFA_ADMIN_GET_STATS_TYPE_NETWORK; 2251 err = efa_com_get_stats(&dev->edev, ¶ms, &result); 2252 if (err) 2253 return err; 2254 2255 ns = &result.network_stats; 2256 stats->value[EFA_RETRANS_BYTES] = ns->retrans_bytes; 2257 stats->value[EFA_RETRANS_PKTS] = ns->retrans_pkts; 2258 stats->value[EFA_RETRANS_TIMEOUT_EVENS] = ns->retrans_timeout_events; 2259 stats->value[EFA_UNRESPONSIVE_REMOTE_EVENTS] = ns->unresponsive_remote_events; 2260 stats->value[EFA_IMPAIRED_REMOTE_CONN_EVENTS] = ns->impaired_remote_conn_events; 2261 2262 return ARRAY_SIZE(efa_port_stats_descs); 2263 } 2264 2265 int efa_get_hw_stats(struct ib_device *ibdev, struct rdma_hw_stats *stats, 2266 u32 port_num, int index) 2267 { 2268 if (port_num) 2269 return efa_fill_port_stats(to_edev(ibdev), stats, port_num); 2270 else 2271 return efa_fill_device_stats(to_edev(ibdev), stats); 2272 } 2273 2274 enum rdma_link_layer efa_port_link_layer(struct ib_device *ibdev, 2275 u32 port_num) 2276 { 2277 return IB_LINK_LAYER_UNSPECIFIED; 2278 } 2279 2280 DECLARE_UVERBS_NAMED_METHOD(EFA_IB_METHOD_MR_QUERY, 2281 UVERBS_ATTR_IDR(EFA_IB_ATTR_QUERY_MR_HANDLE, 2282 UVERBS_OBJECT_MR, 2283 UVERBS_ACCESS_READ, 2284 UA_MANDATORY), 2285 UVERBS_ATTR_PTR_OUT(EFA_IB_ATTR_QUERY_MR_RESP_IC_ID_VALIDITY, 2286 UVERBS_ATTR_TYPE(u16), 2287 UA_MANDATORY), 2288 UVERBS_ATTR_PTR_OUT(EFA_IB_ATTR_QUERY_MR_RESP_RECV_IC_ID, 2289 UVERBS_ATTR_TYPE(u16), 2290 UA_MANDATORY), 2291 UVERBS_ATTR_PTR_OUT(EFA_IB_ATTR_QUERY_MR_RESP_RDMA_READ_IC_ID, 2292 UVERBS_ATTR_TYPE(u16), 2293 UA_MANDATORY), 2294 UVERBS_ATTR_PTR_OUT(EFA_IB_ATTR_QUERY_MR_RESP_RDMA_RECV_IC_ID, 2295 UVERBS_ATTR_TYPE(u16), 2296 UA_MANDATORY)); 2297 2298 ADD_UVERBS_METHODS(efa_mr, 2299 UVERBS_OBJECT_MR, 2300 &UVERBS_METHOD(EFA_IB_METHOD_MR_QUERY)); 2301 2302 const struct uapi_definition efa_uapi_defs[] = { 2303 UAPI_DEF_CHAIN_OBJ_TREE(UVERBS_OBJECT_MR, 2304 &efa_mr), 2305 {}, 2306 }; 2307