OSDN Git Service

IB/cma: Set default gid type to RoCEv2
authorMoni Shoua <monis@mellanox.com>
Tue, 30 May 2017 06:47:34 +0000 (09:47 +0300)
committerDoug Ledford <dledford@redhat.com>
Mon, 24 Jul 2017 12:43:55 +0000 (08:43 -0400)
RoCEv2 is the preferred RDMA protocol for Ethernet link layer because
of its advantages over RoCEv1. For better user experience make it the
default choice for RDMA_CM connections if device/port support it.

Signed-off-by: Moni Shoua <monis@mellanox.com>
Reviewed-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/cma.c

index 0eb3932..476de9a 100644 (file)
@@ -72,6 +72,7 @@ MODULE_LICENSE("Dual BSD/GPL");
 #define CMA_MAX_CM_RETRIES 15
 #define CMA_CM_MRA_SETTING (IB_CM_MRA_FLAG_DELAY | 24)
 #define CMA_IBOE_PACKET_LIFETIME 18
+#define CMA_PREFERRED_ROCE_GID_TYPE IB_GID_TYPE_ROCE_UDP_ENCAP
 
 static const char * const cma_events[] = {
        [RDMA_CM_EVENT_ADDR_RESOLVED]    = "address resolved",
@@ -4280,8 +4281,12 @@ static void cma_add_one(struct ib_device *device)
        for (i = rdma_start_port(device); i <= rdma_end_port(device); i++) {
                supported_gids = roce_gid_type_mask_support(device, i);
                WARN_ON(!supported_gids);
-               cma_dev->default_gid_type[i - rdma_start_port(device)] =
-                       find_first_bit(&supported_gids, BITS_PER_LONG);
+               if (supported_gids & CMA_PREFERRED_ROCE_GID_TYPE)
+                       cma_dev->default_gid_type[i - rdma_start_port(device)] =
+                               CMA_PREFERRED_ROCE_GID_TYPE;
+               else
+                       cma_dev->default_gid_type[i - rdma_start_port(device)] =
+                               find_first_bit(&supported_gids, BITS_PER_LONG);
                cma_dev->default_roce_tos[i - rdma_start_port(device)] = 0;
        }