浏览代码

IB/rdmavt: Add hardware driver send work request check

Some hardware drivers requires additional checks on send WRs.  Create an
optional call back to allow hardware drivers to reject a send WR.

Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Ira Weiny 9 年之前
父节点
当前提交
60c30f5725
共有 2 个文件被更改,包括 6 次插入0 次删除
  1. 4 0
      drivers/infiniband/sw/rdmavt/qp.c
  2. 2 0
      include/rdma/rdma_vt.h

+ 4 - 0
drivers/infiniband/sw/rdmavt/qp.c

@@ -1394,6 +1394,10 @@ static int rvt_post_one_wr(struct rvt_qp *qp, struct ib_send_wr *wr)
 	if (next == qp->s_last)
 	if (next == qp->s_last)
 		return -ENOMEM;
 		return -ENOMEM;
 
 
+	if (rdi->driver_f.check_send_wr &&
+	    rdi->driver_f.check_send_wr(qp, wr))
+		return -EINVAL;
+
 	rkt = &rdi->lkey_table;
 	rkt = &rdi->lkey_table;
 	pd = ibpd_to_rvtpd(qp->ibqp.pd);
 	pd = ibpd_to_rvtpd(qp->ibqp.pd);
 	wqe = rvt_get_swqe_ptr(qp, qp->s_head);
 	wqe = rvt_get_swqe_ptr(qp, qp->s_head);

+ 2 - 0
include/rdma/rdma_vt.h

@@ -265,6 +265,8 @@ struct rvt_driver_provided {
 	void (*modify_qp)(struct rvt_qp *qp, struct ib_qp_attr *attr,
 	void (*modify_qp)(struct rvt_qp *qp, struct ib_qp_attr *attr,
 			  int attr_mask, struct ib_udata *udata);
 			  int attr_mask, struct ib_udata *udata);
 
 
+	int (*check_send_wr)(struct rvt_qp *qp, struct ib_send_wr *wr);
+
 	void (*notify_create_mad_agent)(struct rvt_dev_info *rdi, int port_idx);
 	void (*notify_create_mad_agent)(struct rvt_dev_info *rdi, int port_idx);
 	void (*notify_free_mad_agent)(struct rvt_dev_info *rdi, int port_idx);
 	void (*notify_free_mad_agent)(struct rvt_dev_info *rdi, int port_idx);
 };
 };