- add transport type for making transport-specific decisions
- rdma read sink mrs need REMOTE_WRITE access for iwarp transports
- add chelsio devices

Changes since V1:

Restored the use of RDMA_MAX_RESP_RES/RDMA_MAX_INIT_DEPTH for rdmacm
connection setup.

Signed-off-by: Steve Wise <[email protected]>
---

 src/perftest_parameters.c |   63 ++++++++++++++++++++++++++++++++++-----------
 src/perftest_parameters.h |    4 ++-
 src/perftest_resources.c  |    2 +
 3 files changed, 53 insertions(+), 16 deletions(-)

diff --git a/src/perftest_parameters.c b/src/perftest_parameters.c
index e32303a..a6b75d2 100644
--- a/src/perftest_parameters.c
+++ b/src/perftest_parameters.c
@@ -564,6 +564,21 @@ static void force_dependecies(struct perftest_parameters 
*user_param) {
 
/****************************************************************************** 
  *
  
******************************************************************************/
+const char *transport_str(enum ibv_transport_type type) {
+
+       switch (type) {
+        case IBV_TRANSPORT_IB: 
+               return "IB";
+        case IBV_TRANSPORT_IWARP:
+               return "IW";
+        default:
+               return "Unknown";
+       }
+}
+
+/******************************************************************************
 
+ *
+ 
******************************************************************************/
 const char *link_layer_str(uint8_t link_layer) {
 
        switch (link_layer) {
@@ -592,21 +607,37 @@ static Device ib_dev_name(struct ibv_context *context) {
 
        else { 
 
-               switch (attr.vendor_part_id) { 
-                       case 4113  : dev_fname = CONNECTIB; break;
-                       case 4099  : dev_fname = CONNECTX3; break;
-                       case 26418 : dev_fname = CONNECTX2; break;
-                       case 26428 : dev_fname = CONNECTX2; break;
-                       case 26438 : dev_fname = CONNECTX2; break;
-                       case 26448 : dev_fname = CONNECTX2; break;
-                       case 26458 : dev_fname = CONNECTX2; break;
-                       case 26468 : dev_fname = CONNECTX2; break;
-                       case 26478 : dev_fname = CONNECTX2; break;
-                       case 25408 : dev_fname = CONNECTX;  break;
-                       case 25418 : dev_fname = CONNECTX;  break;
-                       case 25428 : dev_fname = CONNECTX;  break;
-                       case 25448 : dev_fname = CONNECTX;  break;
-                       default    : dev_fname = UNKNOWN;
+               switch (attr.vendor_id) {
+                       case 5555:
+                               switch (attr.vendor_part_id) { 
+                                       case 4113  : dev_fname = CONNECTIB; 
break;
+                                       case 4099  : dev_fname = CONNECTX3; 
break;
+                                       case 26418 : dev_fname = CONNECTX2; 
break;
+                                       case 26428 : dev_fname = CONNECTX2; 
break;
+                                       case 26438 : dev_fname = CONNECTX2; 
break;
+                                       case 26448 : dev_fname = CONNECTX2; 
break;
+                                       case 26458 : dev_fname = CONNECTX2; 
break;
+                                       case 26468 : dev_fname = CONNECTX2; 
break;
+                                       case 26478 : dev_fname = CONNECTX2; 
break;
+                                       case 25408 : dev_fname = CONNECTX;  
break;
+                                       case 25418 : dev_fname = CONNECTX;  
break;
+                                       case 25428 : dev_fname = CONNECTX;  
break;
+                                       case 25448 : dev_fname = CONNECTX;  
break;
+                                       default    : dev_fname = UNKNOWN;
+                               }
+                               break;
+                       case 5157: {
+                               switch (attr.vendor_part_id >> 12) {
+                                       case 10 :
+                                       case 4  : dev_fname = CHELSIO_T4; break;
+                                       case 11 :
+                                       case 5  : dev_fname = CHELSIO_T5; break;
+                                       default : dev_fname = UNKNOWN; break;
+                               }
+                               break;
+                       }
+                       default:
+                               dev_fname = UNKNOWN;
                }
        }
 
@@ -1189,6 +1220,7 @@ int parser(struct perftest_parameters *user_param,char 
*argv[], int argc) {
  
******************************************************************************/
 int check_link_and_mtu(struct ibv_context *context,struct perftest_parameters 
*user_param) {
 
+       user_param->transport_type = context->device->transport_type;
        user_param->link_type = set_link_layer(context,user_param->ib_port);
        if (user_param->link_type == LINK_FAILURE) {
                fprintf(stderr, " Couldn't set the link layer\n");
@@ -1323,6 +1355,7 @@ void ctx_print_test_info(struct perftest_parameters 
*user_param) {
        } 
 
        printf(" Mtu             : %luB\n",user_param->connection_type == 
RawEth ? user_param->curr_mtu : MTU_SIZE(user_param->curr_mtu));
+       printf(" Transport type  : %s\n" 
,transport_str(user_param->transport_type));
        printf(" Link type       : %s\n" 
,link_layer_str(user_param->link_type));
 
        if (user_param->gid_index != DEF_GID_INDEX)
diff --git a/src/perftest_parameters.h b/src/perftest_parameters.h
index 463630c..09f3e47 100644
--- a/src/perftest_parameters.h
+++ b/src/perftest_parameters.h
@@ -180,7 +180,8 @@ typedef enum { LOCAL , REMOTE } PrintDataSide;
 typedef enum {CMP_AND_SWAP, FETCH_AND_ADD} AtomicType;
 
 // The type of the device (Hermon B0/A0 or no)
-typedef enum { DEVICE_ERROR = -1 ,UNKNOWN = 0 ,CONNECTX = 1,CONNECTX2 = 2, 
CONNECTX3 = 3, CONNECTIB = 4, LEGACY = 5} Device;
+typedef enum { DEVICE_ERROR = -1 ,UNKNOWN = 0 ,CONNECTX = 1,CONNECTX2 = 2, 
CONNECTX3 = 3, CONNECTIB = 4, LEGACY = 5,
+              CHELSIO_T4 = 6, CHELSIO_T5 = 7} Device;
 
 // Type of test method.
 typedef enum { ITERATIONS , DURATION } TestMethod;
@@ -236,6 +237,7 @@ struct perftest_parameters {
        int                             margin;
        uint32_t                rem_ud_qpn;
        uint32_t                rem_ud_qkey;
+       enum ibv_transport_type transport_type;
        uint8_t                 link_type;
        uint8_t                 link_type2;
        MachineType             machine;
diff --git a/src/perftest_resources.c b/src/perftest_resources.c
index fd9809f..01726ba 100644
--- a/src/perftest_resources.c
+++ b/src/perftest_resources.c
@@ -376,6 +376,8 @@ int ctx_init(struct pingpong_context *ctx,struct 
perftest_parameters *user_param
                
        } else if (user_param->verb == READ) {
                flags |= IBV_ACCESS_REMOTE_READ;
+               if (user_param->transport_type == IBV_TRANSPORT_IWARP)
+                       flags |= IBV_ACCESS_REMOTE_WRITE;
 
        } else if (user_param->verb == ATOMIC) {
                flags |= IBV_ACCESS_REMOTE_ATOMIC;

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to