在 2017/12/25 17:00, Leon Romanovsky 写道: > On Sat, Dec 23, 2017 at 04:22:20PM +0800, Lijun Ou wrote: >> When the length of sge is zero, the driver need to filter it >> >> Signed-off-by: Lijun Ou <oulijun@xxxxxxxxxx> >> --- >> drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 29 ++++++++++++++++++++--------- >> 1 file changed, 20 insertions(+), 9 deletions(-) >> >> diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c >> index 869e36f..a1d8ca0 100644 >> --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c >> +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c >> @@ -230,26 +230,37 @@ static int hns_roce_v2_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, >> V2_RC_SEND_WQE_BYTE_4_INLINE_S, 1); >> } else { >> if (wr->num_sge <= 2) { >> - for (i = 0; i < wr->num_sge; i++) >> - set_data_seg_v2(dseg + i, >> - wr->sg_list + i); >> + for (i = 0; i < wr->num_sge; i++) { >> + if (likely(wr->sg_list[i].length)) { >> + set_data_seg_v2(dseg, >> + wr->sg_list + i); >> + dseg++; > > Actually, you don't need to advance desg and keep your "desg + i" code as before. > > I have a more general question, is this scenario (having length == 0) real? > > Thanks > Yes, The origin plan for processing the length of sge is zero is that the hardware recognizes and filter it. but the final plan is that the software filter it and have an improved performance. -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html