Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
Pull rdma updates from Jason Gunthorpe: "A smaller cycle this time. Notably we see another new driver, 'Soft iWarp', and the deletion of an ancient unused driver for nes. - Revise and simplify the signature offload RDMA MR APIs - More progress on hoisting object allocation boiler plate code out of the drivers - Driver bug fixes and revisions for hns, hfi1, efa, cxgb4, qib, i40iw - Tree wide cleanups: struct_size, put_user_page, xarray, rst doc conversion - Removal of obsolete ib_ucm chardev and nes driver - netlink based discovery of chardevs and autoloading of the modules providing them - Move more of the rdamvt/hfi1 uapi to include/uapi/rdma - New driver 'siw' for software based iWarp running on top of netdev, much like rxe's software RoCE. - mlx5 feature to report events in their raw devx format to userspace - Expose per-object counters through rdma tool - Adaptive interrupt moderation for RDMA (DIM), sharing the DIM core from netdev" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (194 commits) RMDA/siw: Require a 64 bit arch RDMA/siw: Mark expected switch fall-throughs RDMA/core: Fix -Wunused-const-variable warnings rdma/siw: Remove set but not used variable 's' rdma/siw: Add missing dependencies on LIBCRC32C and DMA_VIRT_OPS RDMA/siw: Add missing rtnl_lock around access to ifa rdma/siw: Use proper enumerated type in map_cqe_status RDMA/siw: Remove unnecessary kthread create/destroy printouts IB/rdmavt: Fix variable shadowing issue in rvt_create_cq RDMA/core: Fix race when resolving IP address RDMA/core: Make rdma_counter.h compile stand alone IB/core: Work on the caller socket net namespace in nldev_newlink() RDMA/rxe: Fill in wc byte_len with IB_WC_RECV_RDMA_WITH_IMM RDMA/mlx5: Set RDMA DIM to be enabled by default RDMA/nldev: Added configuration of RDMA dynamic interrupt moderation to netlink RDMA/core: Provide RDMA DIM support for ULPs linux/dim: Implement RDMA adaptive moderation (DIM) IB/mlx5: Report correctly tag matching rendezvous capability docs: infiniband: add it to the driver-api bookset IB/mlx5: Implement VHCA tunnel mechanism in DEVX ...
This commit is contained in:
@@ -4279,11 +4279,11 @@ static void i40iw_qhash_ctrl(struct i40iw_device *iwdev,
|
||||
/* if not found then add a child listener if interface is going up */
|
||||
if (!ifup)
|
||||
return;
|
||||
child_listen_node = kzalloc(sizeof(*child_listen_node), GFP_ATOMIC);
|
||||
child_listen_node = kmemdup(parent_listen_node,
|
||||
sizeof(*child_listen_node), GFP_ATOMIC);
|
||||
if (!child_listen_node)
|
||||
return;
|
||||
node_allocated = true;
|
||||
memcpy(child_listen_node, parent_listen_node, sizeof(*child_listen_node));
|
||||
|
||||
memcpy(child_listen_node->loc_addr, ipaddr, ipv4 ? 4 : 16);
|
||||
|
||||
|
@@ -772,6 +772,8 @@ static int i40iw_query_qp(struct ib_qp *ibqp,
|
||||
struct i40iw_qp *iwqp = to_iwqp(ibqp);
|
||||
struct i40iw_sc_qp *qp = &iwqp->sc_qp;
|
||||
|
||||
attr->qp_state = iwqp->ibqp_state;
|
||||
attr->cur_qp_state = attr->qp_state;
|
||||
attr->qp_access_flags = 0;
|
||||
attr->cap.max_send_wr = qp->qp_uk.sq_size;
|
||||
attr->cap.max_recv_wr = qp->qp_uk.rq_size;
|
||||
@@ -1064,44 +1066,38 @@ void i40iw_cq_wq_destroy(struct i40iw_device *iwdev, struct i40iw_sc_cq *cq)
|
||||
* @ib_cq: cq pointer
|
||||
* @udata: user data or NULL for kernel object
|
||||
*/
|
||||
static int i40iw_destroy_cq(struct ib_cq *ib_cq, struct ib_udata *udata)
|
||||
static void i40iw_destroy_cq(struct ib_cq *ib_cq, struct ib_udata *udata)
|
||||
{
|
||||
struct i40iw_cq *iwcq;
|
||||
struct i40iw_device *iwdev;
|
||||
struct i40iw_sc_cq *cq;
|
||||
|
||||
if (!ib_cq) {
|
||||
i40iw_pr_err("ib_cq == NULL\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
iwcq = to_iwcq(ib_cq);
|
||||
iwdev = to_iwdev(ib_cq->device);
|
||||
cq = &iwcq->sc_cq;
|
||||
i40iw_cq_wq_destroy(iwdev, cq);
|
||||
cq_free_resources(iwdev, iwcq);
|
||||
kfree(iwcq);
|
||||
i40iw_rem_devusecount(iwdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40iw_create_cq - create cq
|
||||
* @ibdev: device pointer from stack
|
||||
* @ibcq: CQ allocated
|
||||
* @attr: attributes for cq
|
||||
* @udata: user data
|
||||
*/
|
||||
static struct ib_cq *i40iw_create_cq(struct ib_device *ibdev,
|
||||
const struct ib_cq_init_attr *attr,
|
||||
struct ib_udata *udata)
|
||||
static int i40iw_create_cq(struct ib_cq *ibcq,
|
||||
const struct ib_cq_init_attr *attr,
|
||||
struct ib_udata *udata)
|
||||
{
|
||||
struct ib_device *ibdev = ibcq->device;
|
||||
struct i40iw_device *iwdev = to_iwdev(ibdev);
|
||||
struct i40iw_cq *iwcq;
|
||||
struct i40iw_cq *iwcq = to_iwcq(ibcq);
|
||||
struct i40iw_pbl *iwpbl;
|
||||
u32 cq_num = 0;
|
||||
struct i40iw_sc_cq *cq;
|
||||
struct i40iw_sc_dev *dev = &iwdev->sc_dev;
|
||||
struct i40iw_cq_init_info info;
|
||||
struct i40iw_cq_init_info info = {};
|
||||
enum i40iw_status_code status;
|
||||
struct i40iw_cqp_request *cqp_request;
|
||||
struct cqp_commands_info *cqp_info;
|
||||
@@ -1111,22 +1107,16 @@ static struct ib_cq *i40iw_create_cq(struct ib_device *ibdev,
|
||||
int entries = attr->cqe;
|
||||
|
||||
if (iwdev->closing)
|
||||
return ERR_PTR(-ENODEV);
|
||||
return -ENODEV;
|
||||
|
||||
if (entries > iwdev->max_cqe)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
iwcq = kzalloc(sizeof(*iwcq), GFP_KERNEL);
|
||||
if (!iwcq)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
memset(&info, 0, sizeof(info));
|
||||
return -EINVAL;
|
||||
|
||||
err_code = i40iw_alloc_resource(iwdev, iwdev->allocated_cqs,
|
||||
iwdev->max_cq, &cq_num,
|
||||
&iwdev->next_cq);
|
||||
if (err_code)
|
||||
goto error;
|
||||
return err_code;
|
||||
|
||||
cq = &iwcq->sc_cq;
|
||||
cq->back_cq = (void *)iwcq;
|
||||
@@ -1233,15 +1223,13 @@ static struct ib_cq *i40iw_create_cq(struct ib_device *ibdev,
|
||||
}
|
||||
|
||||
i40iw_add_devusecount(iwdev);
|
||||
return (struct ib_cq *)iwcq;
|
||||
return 0;
|
||||
|
||||
cq_destroy:
|
||||
i40iw_cq_wq_destroy(iwdev, cq);
|
||||
cq_free_resources:
|
||||
cq_free_resources(iwdev, iwcq);
|
||||
error:
|
||||
kfree(iwcq);
|
||||
return ERR_PTR(err_code);
|
||||
return err_code;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2018,8 +2006,7 @@ static int i40iw_dereg_mr(struct ib_mr *ib_mr, struct ib_udata *udata)
|
||||
struct cqp_commands_info *cqp_info;
|
||||
u32 stag_idx;
|
||||
|
||||
if (iwmr->region)
|
||||
ib_umem_release(iwmr->region);
|
||||
ib_umem_release(iwmr->region);
|
||||
|
||||
if (iwmr->type != IW_MEMREG_TYPE_MEM) {
|
||||
/* region is released. only test for userness. */
|
||||
@@ -2655,6 +2642,11 @@ static int i40iw_query_pkey(struct ib_device *ibdev,
|
||||
}
|
||||
|
||||
static const struct ib_device_ops i40iw_dev_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.driver_id = RDMA_DRIVER_I40IW,
|
||||
/* NOTE: Older kernels wrongly use 0 for the uverbs_abi_ver */
|
||||
.uverbs_abi_ver = I40IW_ABI_VER,
|
||||
|
||||
.alloc_hw_stats = i40iw_alloc_hw_stats,
|
||||
.alloc_mr = i40iw_alloc_mr,
|
||||
.alloc_pd = i40iw_alloc_pd,
|
||||
@@ -2694,6 +2686,7 @@ static const struct ib_device_ops i40iw_dev_ops = {
|
||||
.reg_user_mr = i40iw_reg_user_mr,
|
||||
.req_notify_cq = i40iw_req_notify_cq,
|
||||
INIT_RDMA_OBJ_SIZE(ib_pd, i40iw_pd, ibpd),
|
||||
INIT_RDMA_OBJ_SIZE(ib_cq, i40iw_cq, ibcq),
|
||||
INIT_RDMA_OBJ_SIZE(ib_ucontext, i40iw_ucontext, ibucontext),
|
||||
};
|
||||
|
||||
@@ -2712,7 +2705,6 @@ static struct i40iw_ib_device *i40iw_init_rdma_device(struct i40iw_device *iwdev
|
||||
i40iw_pr_err("iwdev == NULL\n");
|
||||
return NULL;
|
||||
}
|
||||
iwibdev->ibdev.owner = THIS_MODULE;
|
||||
iwdev->iwibdev = iwibdev;
|
||||
iwibdev->iwdev = iwdev;
|
||||
|
||||
@@ -2771,9 +2763,6 @@ void i40iw_port_ibevent(struct i40iw_device *iwdev)
|
||||
*/
|
||||
void i40iw_destroy_rdma_device(struct i40iw_ib_device *iwibdev)
|
||||
{
|
||||
if (!iwibdev)
|
||||
return;
|
||||
|
||||
ib_unregister_device(&iwibdev->ibdev);
|
||||
wait_event_timeout(iwibdev->iwdev->close_wq,
|
||||
!atomic64_read(&iwibdev->iwdev->use_count),
|
||||
@@ -2795,7 +2784,6 @@ int i40iw_register_rdma_device(struct i40iw_device *iwdev)
|
||||
return -ENOMEM;
|
||||
iwibdev = iwdev->iwibdev;
|
||||
rdma_set_device_sysfs_group(&iwibdev->ibdev, &i40iw_attr_group);
|
||||
iwibdev->ibdev.driver_id = RDMA_DRIVER_I40IW;
|
||||
ret = ib_register_device(&iwibdev->ibdev, "i40iw%d");
|
||||
if (ret)
|
||||
goto error;
|
||||
|
Reference in New Issue
Block a user