On Sat, Oct 19, 2019 at 04:46:12PM +0800, Lijun Ou wrote: > index bd78ff9..722cc5f 100644 > +++ b/drivers/infiniband/hw/hns/hns_roce_qp.c > @@ -377,6 +377,10 @@ static int hns_roce_set_user_sq_size(struct hns_roce_dev *hr_dev, > hr_qp->sge.sge_cnt = roundup_pow_of_two(hr_qp->sq.wqe_cnt * > (hr_qp->sq.max_gs - 2)); > > + if (hr_qp->ibqp.qp_type == IB_QPT_UD) > + hr_qp->sge.sge_cnt = roundup_pow_of_two(hr_qp->sq.wqe_cnt * > + hr_qp->sq.max_gs); > + > if ((hr_qp->sq.max_gs > 2) && (hr_dev->pci_dev->revision == 0x20)) { > if (hr_qp->sge.sge_cnt > hr_dev->caps.max_extend_sg) { > dev_err(hr_dev->dev, > @@ -1022,6 +1026,9 @@ struct ib_qp *hns_roce_create_qp(struct ib_pd *pd, > int ret; > > switch (init_attr->qp_type) { > + case IB_QPT_UD: > + if (!capable(CAP_NET_RAW)) > + return -EPERM; This needs a big comment explaining why this HW requires it. Jason