Patch modified, please use this one instead.

        - mod: variable name changed from pkey to pkey_index
        - mod: check max pkeys allowed on device instead of hard coded limits
        - new: removed bogus calls to perror, sends confusing error messages


Signed-off-by: Susan K. Coulter <mar...@zo-fe1.lanl.gov>
---
 src/perftest_communication.c |    9 +++------
 src/perftest_parameters.c    |   37 ++++++++++++++++++++++++++++++++++++-
 src/perftest_parameters.h    |    1 +
 src/perftest_resources.c     |    2 +-
 4 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/src/perftest_communication.c b/src/perftest_communication.c
index 44c0f32..1f0abcc 100755
--- a/src/perftest_communication.c
+++ b/src/perftest_communication.c
@@ -207,8 +207,7 @@ static int ethernet_read_keys(struct pingpong_dest 
*rem_dest,
                char msg[KEY_MSG_SIZE];
 
                if (read(comm->rdma_params->sockfd, msg, sizeof msg) != sizeof 
msg) {
-                       perror("pp_read_keys");
-                       fprintf(stderr, "Couldn't read remote address\n");
+                       fprintf(stderr, "ethernet_read_keys: Couldn't read 
remote address\n");
                        return 1;
                }
 
@@ -229,8 +228,7 @@ static int ethernet_read_keys(struct pingpong_dest 
*rem_dest,
                int i;
 
                if (read(comm->rdma_params->sockfd, msg, sizeof msg) != sizeof 
msg) {
-                       perror("pp_read_keys");
-                       fprintf(stderr, "Couldn't read remote address\n");
+                       fprintf(stderr, "ethernet_read_keys: Couldn't read 
remote address\n");
                        return 1;
                }
 
@@ -1130,8 +1128,7 @@ int ethernet_write_data(struct perftest_comm *comm, char* 
msg) {
 int ethernet_read_data(struct perftest_comm *comm, char* recv_msg) {
 
        if (read(comm->rdma_params->sockfd, recv_msg, sizeof recv_msg) != 
sizeof recv_msg) {
-               perror("pp_read_keys");
-               fprintf(stderr, "Couldn't read reports\n");
+               fprintf(stderr, "ethernet_read_data: Couldn't read reports\n");
                return 1;
        }
 
diff --git a/src/perftest_parameters.c b/src/perftest_parameters.c
index 084f16f..e390f4c 100755
--- a/src/perftest_parameters.c
+++ b/src/perftest_parameters.c
@@ -267,6 +267,8 @@ static void usage(const char *argv0,VerbType verb,TestType 
tst)     {
        if (tst == BW)
                printf("  -q, --qp=<num of qp's>  Num of qp's(default 
%d)\n",DEF_NUM_QPS);
 
+       printf("  -Y, --pkey-index=<pkey index> PKey index to use for QP\n");
+
        putchar('\n');
 }
 /******************************************************************************
@@ -345,6 +347,7 @@ static void init_perftest_params(struct perftest_parameters 
*user_param) {
        user_param->limit_bw = 0;
        user_param->is_limit_msgrate = OFF;
        user_param->limit_msgrate = 0;
+       user_param->pkey_index    = 0;
 
        if (user_param->tst == LAT) {
                user_param->r_flag->unsorted  = OFF;
@@ -841,6 +844,33 @@ static int ctx_set_out_reads(struct ibv_context 
*context,int num_user_reads) {
 /******************************************************************************
  *
  
******************************************************************************/
+static int ctx_chk_pkey_index(struct ibv_context *context,int pkey_idx) {
+
+
+        int idx = 0;
+        struct ibv_device_attr attr;
+
+       if (!ibv_query_device(context,&attr)) {
+
+               if (pkey_idx > attr.max_pkeys - 1) {
+                       printf(RESULT_LINE);
+                       fprintf(stderr," Specified PKey Index, %i, greater than 
allowed max, %i\n",pkey_idx,attr.max_pkeys - 1);
+                       fprintf(stderr," Changing to 0\n");
+                       idx = 0;
+               } else
+                       idx = pkey_idx;
+       } else {
+               fprintf(stderr," Unable to validate PKey Index, changing to 
0\n");
+               idx = 0;
+       }
+
+        return idx;
+
+}
+
+/******************************************************************************
+ *
+ 
******************************************************************************/
 static void ctx_set_max_inline(struct ibv_context *context,struct 
perftest_parameters *user_param) {
 
 
@@ -941,9 +971,10 @@ int parser(struct perftest_parameters *user_param,char 
*argv[], int argc) {
                        { .name = "run_infinitely", .has_arg = 0, .flag = 
&run_inf_flag, .val = 1 },
                        { .name = "report_gbits",   .has_arg = 0, .flag = 
&report_fmt_flag, .val = 1},
                        { .name = "use-srq",        .has_arg = 0, .flag = 
&srq_flag, .val = 1},
+                       { .name = "pkey-index",     .has_arg = 1, .val = 'Y' },
             { 0 }
         };
-        c = 
getopt_long(argc,argv,"w:y:p:d:i:m:s:n:t:u:S:x:c:q:I:o:M:r:Q:A:l:D:f:B:T:E:J:j:K:k:aFegzRvhbNVCHUOZP",long_options,NULL);
+        c = 
getopt_long(argc,argv,"w:y:p:d:i:m:s:n:t:u:S:x:c:q:I:o:M:r:Q:A:l:D:f:B:T:E:J:j:K:k:Y:aFegzRvhbNVCHUOZP",long_options,NULL);
 
         if (c == -1)
                        break;
@@ -1143,6 +1174,7 @@ int parser(struct perftest_parameters *user_param,char 
*argv[], int argc) {
                        case 'P': user_param->machine = CLIENT; break;
                        case 'Z': user_param->machine = SERVER; break;
                        case 'v': user_param->mac_fwd = ON; break;
+                       case 'Y': user_param->pkey_index = 
strtol(optarg,NULL,0); break;
                        case 0: break; // required for long options to work.
                        default:
                                fprintf(stderr," Invalid Command or flag.\n");
@@ -1256,6 +1288,9 @@ int check_link_and_mtu(struct ibv_context *context,struct 
perftest_parameters *u
        if (!user_param->ib_devname)
                
GET_STRING(user_param->ib_devname,ibv_get_device_name(context->device))
 
+       if (user_param->pkey_index > 0)
+               user_param->pkey_index = ctx_chk_pkey_index(context, 
user_param->pkey_index);
+
        return SUCCESS;
 }
 
diff --git a/src/perftest_parameters.h b/src/perftest_parameters.h
index 42f6966..3f0d59f 100755
--- a/src/perftest_parameters.h
+++ b/src/perftest_parameters.h
@@ -291,6 +291,7 @@ struct perftest_parameters {
        int                             work_rdma_cm;
        char                    *user_mgid;
        int                             buff_size;
+       int                     pkey_index;
        // New test params format pilot. will be used in all flags soon,.
        enum ctx_test_method    test_method;
        enum ibv_transport_type transport_type;
diff --git a/src/perftest_resources.c b/src/perftest_resources.c
index 2ddddd1..9d869c1 100755
--- a/src/perftest_resources.c
+++ b/src/perftest_resources.c
@@ -619,7 +619,7 @@ int ctx_modify_qp_to_init(struct ibv_qp *qp,struct 
perftest_parameters *user_par
 
        memset(&attr, 0, sizeof(struct ibv_qp_attr));
        attr.qp_state        = IBV_QPS_INIT;
-       attr.pkey_index      = 0;
+       attr.pkey_index      = user_param->pkey_index;
 
        if ( user_param->use_xrc && (user_param->duplex || user_param->tst == 
LAT)) {
                num_of_qps /= 2;
-- 
1.7.1
On Aug 19, 2013, at 11:12 PM, Ido Shamai <i...@dev.mellanox.co.il> wrote:

> Thanks Susan,
> 
> We (me and Gil) will apply it soon.
> 
> Ido
> 
> On 8/20/2013 12:54 AM, Coulter, Susan K wrote:
>> Signed-off-by: Susan K. Coulter <mar...@zo-fe1.lanl.gov>
>> ---
>>  src/perftest_parameters.c |    7 ++++++-
>>  src/perftest_parameters.h |    3 +++
>>  src/perftest_resources.c  |    2 +-
>>  3 files changed, 10 insertions(+), 2 deletions(-)
>> 
>> diff --git a/src/perftest_parameters.c b/src/perftest_parameters.c
>> index 084f16f..0350a54 100755
>> --- a/src/perftest_parameters.c
>> +++ b/src/perftest_parameters.c
>> @@ -267,6 +267,8 @@ static void usage(const char *argv0,VerbType 
>> verb,TestType tst)  {
>>      if (tst == BW)
>>              printf("  -q, --qp=<num of qp's>  Num of qp's(default 
>> %d)\n",DEF_NUM_QPS);
>>  +   printf("  -Y, --pkey=<pkey index> PKey index to use for QP\n");
>> +
>>      putchar('\n');
>>  }
>>  
>> /******************************************************************************
>> @@ -345,6 +347,7 @@ static void init_perftest_params(struct 
>> perftest_parameters *user_param) {
>>      user_param->limit_bw = 0;
>>      user_param->is_limit_msgrate = OFF;
>>      user_param->limit_msgrate = 0;
>> +    user_param->pkey        = 0;
>>      if (user_param->tst == LAT) {
>>              user_param->r_flag->unsorted  = OFF;
>> @@ -941,9 +944,10 @@ int parser(struct perftest_parameters *user_param,char 
>> *argv[], int argc) {
>>                      { .name = "run_infinitely", .has_arg = 0, .flag = 
>> &run_inf_flag, .val = 1 },
>>                      { .name = "report_gbits",   .has_arg = 0, .flag = 
>> &report_fmt_flag, .val = 1},
>>                      { .name = "use-srq",        .has_arg = 0, .flag = 
>> &srq_flag, .val = 1},
>> +                    { .name = "pkey",           .has_arg = 1, .val = 'Y' },
>>              { 0 }
>>          };
>> -        c = 
>> getopt_long(argc,argv,"w:y:p:d:i:m:s:n:t:u:S:x:c:q:I:o:M:r:Q:A:l:D:f:B:T:E:J:j:K:k:aFegzRvhbNVCHUOZP",long_options,NULL);
>> +        c = 
>> getopt_long(argc,argv,"w:y:p:d:i:m:s:n:t:u:S:x:c:q:I:o:M:r:Q:A:l:D:f:B:T:E:J:j:K:k:Y:aFegzRvhbNVCHUOZP",long_options,NULL);
>>            if (c == -1)
>>                      break;
>> @@ -1143,6 +1147,7 @@ int parser(struct perftest_parameters *user_param,char 
>> *argv[], int argc) {
>>                      case 'P': user_param->machine = CLIENT; break;
>>                      case 'Z': user_param->machine = SERVER; break;
>>                      case 'v': user_param->mac_fwd = ON; break;
>> +                    case 'Y': 
>> CHECK_VALUE(user_param->pkey,int,MIN_PKEY_IDX,MAX_PKEY_IDX," PKey Index"); 
>> break;
>>                      case 0: break; // required for long options to work.
>>                      default:
>>                              fprintf(stderr," Invalid Command or flag.\n");
>> diff --git a/src/perftest_parameters.h b/src/perftest_parameters.h
>> index 42f6966..2110066 100755
>> --- a/src/perftest_parameters.h
>> +++ b/src/perftest_parameters.h
>> @@ -135,6 +135,8 @@
>>  #define MIN_CQ_MOD    (1)
>>  #define MAX_CQ_MOD    (1024)
>>  #define MAX_INLINE    (912)
>> +#define MIN_PKEY_IDX  (0)
>> +#define MAX_PKEY_IDX  (127)
>>    // Raw etherent defines
>>  #define RAWETH_MIN_MSG_SIZE (64)
>> @@ -291,6 +293,7 @@ struct perftest_parameters {
>>      int                             work_rdma_cm;
>>      char                    *user_mgid;
>>      int                             buff_size;
>> +    int                     pkey;
>>      // New test params format pilot. will be used in all flags soon,.
>>      enum ctx_test_method    test_method;
>>      enum ibv_transport_type transport_type;
>> diff --git a/src/perftest_resources.c b/src/perftest_resources.c
>> index 2ddddd1..4323734 100755
>> --- a/src/perftest_resources.c
>> +++ b/src/perftest_resources.c
>> @@ -619,7 +619,7 @@ int ctx_modify_qp_to_init(struct ibv_qp *qp,struct 
>> perftest_parameters *user_par
>>      memset(&attr, 0, sizeof(struct ibv_qp_attr));
>>      attr.qp_state        = IBV_QPS_INIT;
>> -    attr.pkey_index      = 0;
>> +    attr.pkey_index      = user_param->pkey;
>>      if ( user_param->use_xrc && (user_param->duplex || user_param->tst == 
>> LAT)) {
>>              num_of_qps /= 2;
> 

====================================

Susan Coulter
HPC-3 Network/Infrastructure
505-667-8425
Increase the Peace...
An eye for an eye leaves the whole world blind
====================================

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

Reply via email to