diff mbox

PKey patch

Message ID 79F41063-EC59-4515-B13B-C2104C8C490A@lanl.gov (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Coulter, Susan K Nov. 22, 2013, 9:10 p.m. UTC
… again … reworked as requested to use only the long option.

From e3471983cf96c17e4353ff98a339f3ca2b767b13 Mon Sep 17 00:00:00 2001
From: Susan K. Coulter <markus@zo-fe1.lanl.gov>
Date: Fri, 22 Nov 2013 13:38:11 -0700
Subject: [PATCH] Allow specification of PKey index

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

Patch

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..5899103 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("  --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) {
 
 
@@ -883,6 +913,7 @@  int parser(struct perftest_parameters *user_param,char *argv[], int argc) {
 	static int run_inf_flag = 0;
 	static int report_fmt_flag = 0;
 	static int srq_flag = 0;
+	static int pkey_flag = 0;
 
 	init_perftest_params(user_param);
 
@@ -941,6 +972,7 @@  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, .flag = &pkey_flag, .val = 1},
             { 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);
@@ -1143,7 +1175,11 @@  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 0: break; // required for long options to work.
+			case 0:  // used for long options
+        			if (pkey_flag) {
+                			user_param->pkey_index = strtol(optarg,NULL,0);
+				}			
+				break;
 			default:
 				fprintf(stderr," Invalid Command or flag.\n");
 				fprintf(stderr," Please check command line and run again.\n\n");
@@ -1256,6 +1292,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;