[openib-general] [IWARP BRANCH] [PATCH 1/3] Fix rdma_lat and rdma_bw to work with the new stack and libraries
Pradipta Kumar Banerjee
bpradip at in.ibm.com
Tue Jun 27 10:56:26 PDT 2006
This patch fixes the broken rdma_lat by using the correct function signature for
rdma_get_cm_event.
old function signature - int rdma_get_cm_event(struct rdma_cm_event **event)
new function signature - int rdma_get_cm_event(struct rdma_event_channel *channel,
struct rdma_cm_event **event)
Signed-off-by: Pradipta Kumar Banerjee <bpradip at in.ibm.com>
---
Index: rdma_lat.c
=============================================================================
--- ../perftest-org/rdma_lat.c 2006-06-22 18:28:13.000000000 +0530
+++ rdma_lat.c 2006-06-22 18:36:12.000000000 +0530
@@ -51,6 +51,7 @@
#include <arpa/inet.h>
#include <byteswap.h>
#include <time.h>
+#include <errno.h>
#include <infiniband/verbs.h>
#include <rdma/rdma_cma.h>
@@ -83,6 +84,7 @@ struct pingpong_context {
struct ibv_sge list;
struct ibv_send_wr wr;
struct rdma_cm_id *cm_id;
+ struct rdma_event_channel *cm_channel;
};
struct pingpong_dest {
@@ -612,11 +614,12 @@ static void pp_close_cma(struct pingpong
}
}
- rdma_get_cm_event(&event);
+ rdma_get_cm_event(ctx->cm_channel, &event);
if (event->event != RDMA_CM_EVENT_DISCONNECTED)
printf("unexpected event during disconnect %d\n", event->event);
rdma_ack_cm_event(event);
rdma_destroy_id(ctx->cm_id);
+ rdma_destroy_event_channel(ctx->cm_channel);
}
static struct pingpong_context *pp_server_connect_cma(unsigned short port, int size, int tx_depth,
@@ -629,17 +632,26 @@ static struct pingpong_context *pp_serve
int ret;
struct sockaddr_in sin;
struct rdma_cm_id *child_cm_id;
+ struct rdma_event_channel *channel;
struct pingpong_context *ctx;
-
+
printf("%s starting server\n", __FUNCTION__);
- ret = rdma_create_id(&listen_id, NULL);
- if (ret) {
- fprintf(stderr, "%s rdma_create_id failed %d\n", __FUNCTION__, ret);
+ channel = rdma_create_event_channel();
+ if (!channel) {
+ ret = errno;
+ fprintf(stderr, "%s rdma_create_event_channel failed with error %d\n",
+ __FUNCTION__, ret);
return NULL;
}
+ ret = rdma_create_id(channel, &listen_id, NULL);
+ if (ret) {
+ fprintf(stderr, "%s rdma_create_id failed %d\n", __FUNCTION__, ret);
+ goto err3;
+ }
+ memset(&sin, 0, sizeof(sin));
sin.sin_addr.s_addr = 0;
- sin.sin_family = PF_INET;
+ sin.sin_family = AF_INET;
sin.sin_port = htons(port);
ret = rdma_bind_addr(listen_id, (struct sockaddr *)&sin);
if (ret) {
@@ -653,7 +665,7 @@ static struct pingpong_context *pp_serve
goto err2;
}
- ret = rdma_get_cm_event(&event);
+ ret = rdma_get_cm_event(channel, &event);
if (ret)
goto err2;
@@ -678,7 +690,8 @@ static struct pingpong_context *pp_serve
fprintf(stderr,"%s pp_init_cma_ctx failed\n", __FUNCTION__);
goto err0;
}
-
+
+ ctx->cm_channel = channel;
my_dest->qpn = 0;
my_dest->psn = 0xbb;
my_dest->rkey = ctx->mr->rkey;
@@ -694,7 +707,7 @@ static struct pingpong_context *pp_serve
goto err0;
}
rdma_ack_cm_event(event);
- ret = rdma_get_cm_event(&event);
+ ret = rdma_get_cm_event(channel, &event);
if (ret) {
fprintf(stderr,"rdma_get_cm_event error %d\n", ret);
rdma_destroy_id(child_cm_id);
@@ -713,8 +726,10 @@ err0:
err1:
rdma_ack_cm_event(event);
err2:
- rdma_destroy_id(listen_id);
fprintf(stderr,"%s NOT connected!\n", __FUNCTION__);
+ rdma_destroy_id(listen_id);
+err3:
+ rdma_destroy_event_channel(channel);
return NULL;
}
@@ -750,6 +765,7 @@ static struct pingpong_context *pp_clien
int ret;
struct sockaddr_in sin;
struct rdma_cm_id *cm_id;
+ struct rdma_event_channel *channel;
struct pingpong_context *ctx;
fprintf(stderr,"%s starting client\n", __FUNCTION__);
@@ -758,10 +774,18 @@ static struct pingpong_context *pp_clien
return NULL;
}
- ret = rdma_create_id(&cm_id, NULL);
+ channel = rdma_create_event_channel();
+ if (!channel) {
+ ret = errno;
+ fprintf(stderr, "%s rdma_create_event_channel failed with error %d\n",
+ __FUNCTION__, ret);
+ return NULL;
+ }
+
+ ret = rdma_create_id(channel, &cm_id, NULL);
if (ret) {
fprintf(stderr,"%s rdma_create_id failed %d\n", __FUNCTION__, ret);
- return NULL;
+ goto err3;
}
sin.sin_family = PF_INET;
@@ -772,7 +796,7 @@ static struct pingpong_context *pp_clien
goto err2;
}
- ret = rdma_get_cm_event(&event);
+ ret = rdma_get_cm_event(channel, &event);
if (ret)
goto err2;
@@ -789,7 +813,7 @@ static struct pingpong_context *pp_clien
goto err2;
}
- ret = rdma_get_cm_event(&event);
+ ret = rdma_get_cm_event(channel, &event);
if (ret)
goto err2;
@@ -806,7 +830,8 @@ static struct pingpong_context *pp_clien
fprintf(stderr,"%s pp_init_cma_ctx failed\n", __FUNCTION__);
goto err2;
}
-
+
+ ctx->cm_channel = channel;
my_dest->qpn = 0;
my_dest->psn = 0xaa;
my_dest->rkey = ctx->mr->rkey;
@@ -823,7 +848,7 @@ static struct pingpong_context *pp_clien
goto err2;
}
- ret = rdma_get_cm_event(&event);
+ ret = rdma_get_cm_event(channel, &event);
if (ret)
goto err2;
@@ -845,8 +870,10 @@ static struct pingpong_context *pp_clien
err1:
rdma_ack_cm_event(event);
err2:
- fprintf(stderr,"NOT connected!\n");
+ fprintf(stderr,"%s NOT connected!\n", __FUNCTION__);
rdma_destroy_id(cm_id);
+err3:
+ rdma_destroy_event_channel(channel);
return NULL;
}
More information about the general
mailing list