RDMA/irdma: Make the source udp port vary
authorZhu Yanjun <yanjun.zhu@linux.dev>
Thu, 6 Jan 2022 18:03:58 +0000 (13:03 -0500)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 7 Jan 2022 23:34:55 +0000 (19:34 -0400)
Get the source udp port number for a QP based on the grh.flow_label or
lqpn/rqrpn. This provides a better spread of traffic across NIC RX queues.

Link: https://lore.kernel.org/r/20220106180359.2915060-4-yanjun.zhu@linux.dev
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Acked-by: Shiraz Saleem <shiraz.saleem@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/irdma/verbs.c

index 456fed94b145c38c58de38aa0828a2da0cbc0597..460e757d3fe612c7a7a013ba8e8fa22d02adc2d3 100644 (file)
@@ -1171,6 +1171,10 @@ int irdma_modify_qp_roce(struct ib_qp *ibqp, struct ib_qp_attr *attr,
                        udp_info->ttl = attr->ah_attr.grh.hop_limit;
                        udp_info->flow_label = attr->ah_attr.grh.flow_label;
                        udp_info->tos = attr->ah_attr.grh.traffic_class;
+                       udp_info->src_port =
+                               rdma_get_udp_sport(udp_info->flow_label,
+                                                  ibqp->qp_num,
+                                                  roce_info->dest_qp);
                        irdma_qp_rem_qos(&iwqp->sc_qp);
                        dev->ws_remove(iwqp->sc_qp.vsi, ctx_info->user_pri);
                        ctx_info->user_pri = rt_tos2priority(udp_info->tos);