@@ -64,6 +64,7 @@ int main(int argc, char *argv[])
struct pingpong_context ctx;
struct raw_ethernet_info my_dest_info,rem_dest_info;
int ret_parser;
+ int ret_val = FAILURE;
struct perftest_parameters user_param;
#ifdef HAVE_RAW_ETH_EXP
struct ibv_exp_flow **flow_create_result;
@@ -101,7 +102,7 @@ int main(int argc, char *argv[])
if (ret_parser != VERSION_EXIT && ret_parser != HELP_EXIT)
fprintf(stderr," Parser function exited with Error\n");
DEBUG_LOG(TRACE,"<<<<<<%s",__FUNCTION__);
- return 1;
+ return FAILURE;
}
#ifdef HAVE_RAW_ETH_EXP
ALLOCATE(flow_create_result, struct ibv_exp_flow*, user_param.flows);
@@ -122,12 +123,12 @@ int main(int argc, char *argv[])
if (!ib_dev) {
fprintf(stderr," Unable to find the Infiniband/RoCE device\n");
DEBUG_LOG(TRACE,"<<<<<<%s",__FUNCTION__);
- return 1;
+ goto free_flows;
}
GET_STRING(user_param.ib_devname, ibv_get_device_name(ib_dev));
if (check_flow_steering_support(user_param.ib_devname)) {
- return 1;
+ goto free_flows;
}
/* Getting the relevant context from the device */
@@ -135,14 +136,14 @@ int main(int argc, char *argv[])
if (!ctx.context) {
fprintf(stderr, " Couldn't get context for the device\n");
DEBUG_LOG(TRACE,"<<<<<<%s",__FUNCTION__);
- return 1;
+ goto free_flows;
}
/* See if MTU and link type are valid and supported. */
if (check_link_and_mtu(ctx.context, &user_param)) {
fprintf(stderr, " Couldn't get context for the device\n");
DEBUG_LOG(TRACE,"<<<<<<%s",__FUNCTION__);
- return FAILURE;
+ goto free_flows;
}
/* Allocating arrays needed for the test. */
@@ -153,7 +154,7 @@ int main(int argc, char *argv[])
*/
if (send_set_up_connection(flow_rules, &ctx, &user_param, &my_dest_info, &rem_dest_info)) {
fprintf(stderr," Unable to set up socket connection\n");
- return 1;
+ goto free_flows;
}
/* Print basic test information. */
@@ -167,7 +168,7 @@ int main(int argc, char *argv[])
if (create_rdma_resources(&ctx, &user_param)) {
fprintf(stderr," Unable to create the rdma_resources\n");
- return FAILURE;
+ goto free_flows;
}
if (user_param.machine == CLIENT) {
@@ -175,13 +176,13 @@ int main(int argc, char *argv[])
/* Connects the client to a QP on the other machine with rdma_cm */
if (rdma_client_connect(&ctx, &user_param)) {
fprintf(stderr,"Unable to perform rdma_client function\n");
- return FAILURE;
+ goto free_flows;
}
} else if (rdma_server_connect(&ctx, &user_param)) {
/* Assigning a server to listen on rdma_cm port and connect to it. */
fprintf(stderr,"Unable to perform rdma_server function\n");
- return FAILURE;
+ goto free_flows;
}
} else {
@@ -189,7 +190,7 @@ int main(int argc, char *argv[])
/* initalize IB resources (data buffer, PD, MR, CQ and events channel) */
if (ctx_init(&ctx, &user_param)) {
fprintf(stderr, " Couldn't create IB resources\n");
- return FAILURE;
+ goto free_flows;
}
}
@@ -205,7 +206,7 @@ int main(int argc, char *argv[])
if (!flow_create_result[i]){
perror("error");
fprintf(stderr, "Couldn't attach QP\n");
- return FAILURE;
+ goto destroy_ctx;
}
}
@@ -239,7 +240,7 @@ int main(int argc, char *argv[])
if (ctx_connect(&ctx, NULL, &user_param, NULL)) {
fprintf(stderr," Unable to Connect the HCA's through the link\n");
DEBUG_LOG(TRACE,"<<<<<<%s",__FUNCTION__);
- return 1;
+ goto destroy_ctx;
}
}
@@ -247,12 +248,12 @@ int main(int argc, char *argv[])
if (ctx_set_recv_wqes(&ctx,&user_param)) {
fprintf(stderr," Failed to post receive recv_wqes\n");
- return 1;
+ goto destroy_ctx;
}
/* latency test function for SEND verb latency test. */
if (run_iter_lat_send(&ctx, &user_param)) {
- return 17;
+ goto eexists;
}
/* print report (like print_report_bw) in the correct format
@@ -267,7 +268,7 @@ int main(int argc, char *argv[])
if (ibv_exp_destroy_flow(flow_promisc)) {
perror("error");
fprintf(stderr, "Couldn't Destory promisc flow\n");
- return FAILURE;
+ goto destroy_ctx;
}
}
#endif
@@ -281,7 +282,7 @@ int main(int argc, char *argv[])
#endif
perror("error");
fprintf(stderr, "Couldn't Destory flow\n");
- return FAILURE;
+ goto destroy_ctx;
}
free(flow_rules[i]);
@@ -291,7 +292,7 @@ int main(int argc, char *argv[])
if (destroy_ctx(&ctx, &user_param)) {
fprintf(stderr,"Failed to destroy_ctx\n");
DEBUG_LOG(TRACE,"<<<<<<%s",__FUNCTION__);
- return 1;
+ return FAILURE;
}
if (user_param.output == FULL_VERBOSITY)
@@ -300,4 +301,12 @@ int main(int argc, char *argv[])
DEBUG_LOG(TRACE,"<<<<<<%s",__FUNCTION__);
return 0;
+eexists:
+ ret_val = 17;
+destroy_ctx:
+ destroy_ctx(&ctx, &user_param);
+free_flows:
+ free(flow_create_result);
+ free(flow_rules);
+ return ret_val;
}
Fixing issues reported by clang. CC: Gil Rockah <gilr@mellanox.com> Signed-off-by: Jarod Wilson <jarod@redhat.com> --- src/raw_ethernet_send_lat.c | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-)