Now the default packet lifetime(CMA_IBOE_PACKET_LIFETIME) is 18. That means the minimum ack timeout is 2 seconds(2^(18+1)*4us=2.097seconds). The packet lifetime means the maximum transmission time of packets on the network, the maximum transmission time of packets is closely related to the network. 2 seconds is too long for simple lossless networks. The packet lifetime should allow the user to adjust according to the network situation. So add a parameter for the packet lifetime. Signed-off-by: Chao Leng <lengchao@xxxxxxxxxx> --- drivers/infiniband/core/cma.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index cc2222b85c88..8e2ff5d610e3 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c @@ -50,6 +50,10 @@ MODULE_LICENSE("Dual BSD/GPL"); #define CMA_IBOE_PACKET_LIFETIME 18 #define CMA_PREFERRED_ROCE_GID_TYPE IB_GID_TYPE_ROCE_UDP_ENCAP +static unsigned char cma_packet_lifetime = CMA_IBOE_PACKET_LIFETIME; +module_param_named(packet_lifetime, cma_packet_lifetime, byte, 0644); +MODULE_PARM_DESC(packet_lifetime, "max transmission time of the packet"); + static const char * const cma_events[] = { [RDMA_CM_EVENT_ADDR_RESOLVED] = "address resolved", [RDMA_CM_EVENT_ADDR_ERROR] = "address error", @@ -3301,7 +3305,7 @@ static int cma_resolve_iboe_route(struct rdma_id_private *id_priv) if (id_priv->timeout_set && id_priv->timeout) route->path_rec->packet_life_time = id_priv->timeout - 1; else - route->path_rec->packet_life_time = CMA_IBOE_PACKET_LIFETIME; + route->path_rec->packet_life_time = cma_packet_lifetime; mutex_unlock(&id_priv->qp_mutex); if (!route->path_rec->mtu) { -- 2.16.4