Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b152d53 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband

parents 62ae144f eabc7793
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -312,7 +312,7 @@ static ssize_t ib_umad_write(struct file *filp, const char __user *buf,
	int ret, length, hdr_len, copy_offset;
	int rmpp_active = 0;

	if (count < sizeof (struct ib_user_mad))
	if (count < sizeof (struct ib_user_mad) + IB_MGMT_RMPP_HDR)
		return -EINVAL;

	length = count - sizeof (struct ib_user_mad);
+18 −19
Original line number Diff line number Diff line
@@ -730,14 +730,15 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask)
	}

	if (attr_mask & IB_QP_ACCESS_FLAGS) {
		/*
		 * Only enable RDMA/atomics if we have responder
		 * resources set to a non-zero value.
		 */
		if (qp->resp_depth) {
		qp_context->params2 |=
			cpu_to_be32(attr->qp_access_flags & IB_ACCESS_REMOTE_WRITE ?
				    MTHCA_QP_BIT_RWE : 0);

		/*
		 * Only enable RDMA reads and atomics if we have
		 * responder resources set to a non-zero value.
		 */
		if (qp->resp_depth) {
			qp_context->params2 |=
				cpu_to_be32(attr->qp_access_flags & IB_ACCESS_REMOTE_READ ?
					    MTHCA_QP_BIT_RRE : 0);
@@ -759,22 +760,19 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask)
		if (qp->resp_depth && !attr->max_dest_rd_atomic) {
			/*
			 * Lowering our responder resources to zero.
			 * Turn off RDMA/atomics as responder.
			 * (RWE/RRE/RAE in params2 already zero)
			 * Turn off reads RDMA and atomics as responder.
			 * (RRE/RAE in params2 already zero)
			 */
			qp_param->opt_param_mask |= cpu_to_be32(MTHCA_QP_OPTPAR_RWE |
								MTHCA_QP_OPTPAR_RRE |
			qp_param->opt_param_mask |= cpu_to_be32(MTHCA_QP_OPTPAR_RRE |
								MTHCA_QP_OPTPAR_RAE);
		}

		if (!qp->resp_depth && attr->max_dest_rd_atomic) {
			/*
			 * Increasing our responder resources from
			 * zero.  Turn on RDMA/atomics as appropriate.
			 * zero.  Turn on RDMA reads and atomics as
			 * appropriate.
			 */
			qp_context->params2 |=
				cpu_to_be32(qp->atomic_rd_en & IB_ACCESS_REMOTE_WRITE ?
					    MTHCA_QP_BIT_RWE : 0);
			qp_context->params2 |=
				cpu_to_be32(qp->atomic_rd_en & IB_ACCESS_REMOTE_READ ?
					    MTHCA_QP_BIT_RRE : 0);
@@ -782,8 +780,7 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask)
				cpu_to_be32(qp->atomic_rd_en & IB_ACCESS_REMOTE_ATOMIC ?
					    MTHCA_QP_BIT_RAE : 0);

			qp_param->opt_param_mask |= cpu_to_be32(MTHCA_QP_OPTPAR_RWE |
								MTHCA_QP_OPTPAR_RRE |
			qp_param->opt_param_mask |= cpu_to_be32(MTHCA_QP_OPTPAR_RRE |
								MTHCA_QP_OPTPAR_RAE);
		}

@@ -921,10 +918,12 @@ static void mthca_adjust_qp_caps(struct mthca_dev *dev,
        else
		qp->max_inline_data = max_data_size - MTHCA_INLINE_HEADER_SIZE;

	qp->sq.max_gs = max_data_size / sizeof (struct mthca_data_seg);
	qp->rq.max_gs = (min(dev->limits.max_desc_sz, 1 << qp->rq.wqe_shift) -
	qp->sq.max_gs = min_t(int, dev->limits.max_sg,
			      max_data_size / sizeof (struct mthca_data_seg));
	qp->rq.max_gs = min_t(int, dev->limits.max_sg,
			       (min(dev->limits.max_desc_sz, 1 << qp->rq.wqe_shift) -
				sizeof (struct mthca_next_seg)) /
			sizeof (struct mthca_data_seg);
			       sizeof (struct mthca_data_seg));
}

/*
+11 −6
Original line number Diff line number Diff line
@@ -802,13 +802,21 @@ static int srp_post_recv(struct srp_target_port *target)

/*
 * Must be called with target->scsi_host->host_lock held to protect
 * req_lim and tx_head.
 * req_lim and tx_head.  Lock cannot be dropped between call here and
 * call to __srp_post_send().
 */
static struct srp_iu *__srp_get_tx_iu(struct srp_target_port *target)
{
	if (target->tx_head - target->tx_tail >= SRP_SQ_SIZE)
		return NULL;

	if (unlikely(target->req_lim < 1)) {
		if (printk_ratelimit())
			printk(KERN_DEBUG PFX "Target has req_lim %d\n",
			       target->req_lim);
		return NULL;
	}

	return target->tx_ring[target->tx_head & SRP_SQ_SIZE];
}

@@ -823,11 +831,6 @@ static int __srp_post_send(struct srp_target_port *target,
	struct ib_send_wr wr, *bad_wr;
	int ret = 0;

	if (target->req_lim < 1) {
		printk(KERN_ERR PFX "Target has req_lim %d\n", target->req_lim);
		return -EAGAIN;
	}

	list.addr   = iu->dma;
	list.length = len;
	list.lkey   = target->srp_host->mr->lkey;
@@ -1417,6 +1420,8 @@ static ssize_t srp_create_target(struct class_device *class_dev,
	if (!target_host)
		return -ENOMEM;

	target_host->max_lun = SRP_MAX_LUN;

	target = host_to_target(target_host);
	memset(target, 0, sizeof *target);

+1 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ enum {
	SRP_PORT_REDIRECT	= 1,
	SRP_DLID_REDIRECT	= 2,

	SRP_MAX_LUN		= 512,
	SRP_MAX_IU_LEN		= 256,

	SRP_RQ_SHIFT    	= 6,