[ofa-general] [PATCH] librdmacm 2/2: add valgrind support to the cma code

Dotan Barak dotanb at dev.mellanox.co.il
Wed Aug 15 03:53:56 PDT 2007


Added valgrind support to the cma code and mark buffers that were filled
by the kernel level with the macro VALGRIND_MAKE_MEM_DEFINED.

Signed-off-by: Dotan Barak <dotanb at dev.mellanox.co.il>

---

diff --git a/src/cma.c b/src/cma.c
index 32edc1f..42fa162 100644
--- a/src/cma.c
+++ b/src/cma.c
@@ -57,6 +57,20 @@
 
 #define PFX "librdmacm: "
 
+#ifdef HAVE_VALGRIND_MEMCHECK_H
+
+#  include <valgrind/memcheck.h>
+
+#  ifndef VALGRIND_MAKE_MEM_DEFINED
+#    warning "Valgrind support requested, but VALGRIND_MAKE_MEM_DEFINED not available"
+#  endif
+
+#endif /* HAVE_VALGRIND_MEMCHECK_H */
+
+#ifndef VALGRIND_MAKE_MEM_DEFINED
+#  define VALGRIND_MAKE_MEM_DEFINED(addr,len)
+#endif
+
 #if __BYTE_ORDER == __LITTLE_ENDIAN
 static inline uint64_t htonll(uint64_t x) { return bswap_64(x); }
 static inline uint64_t ntohll(uint64_t x) { return bswap_64(x); }
@@ -383,6 +397,8 @@ int rdma_create_id(struct rdma_event_channel *channel,
 	if (ret != size)
 		goto err;
 
+	VALGRIND_MAKE_MEM_DEFINED(resp, sizeof *resp);
+
 	id_priv->handle = resp->id;
 	*id = &id_priv->id;
 	return 0;
@@ -405,6 +421,8 @@ static int ucma_destroy_kern_id(int fd, uint32_t handle)
 	if (ret != size)
 		return (ret > 0) ? -ENODATA : ret;
 
+	VALGRIND_MAKE_MEM_DEFINED(resp, sizeof *resp);
+
 	return resp->events_reported;
 }
 
@@ -458,6 +476,8 @@ static int ucma_query_route(struct rdma_cm_id *id)
 	if (ret != size)
 		return (ret > 0) ? -ENODATA : ret;
 
+	VALGRIND_MAKE_MEM_DEFINED(resp, sizeof *resp);
+
 	if (resp->num_paths) {
 		id->route.path_rec = malloc(sizeof *id->route.path_rec *
 					    resp->num_paths);
@@ -583,6 +603,8 @@ static int rdma_init_qp_attr(struct rdma_cm_id *id, struct ibv_qp_attr *qp_attr,
 	if (ret != size)
 		return (ret > 0) ? -ENODATA : ret;
 
+	VALGRIND_MAKE_MEM_DEFINED(resp, sizeof *resp);
+
 	ibv_copy_qp_attr_from_kern(qp_attr, resp);
 	*qp_attr_mask = resp->qp_attr_mask;
 	return 0;
@@ -1010,6 +1032,8 @@ int rdma_join_multicast(struct rdma_cm_id *id, struct sockaddr *addr,
 		goto err2;
 	}
 
+	VALGRIND_MAKE_MEM_DEFINED(resp, sizeof *resp);
+
 	mc->handle = resp->id;
 	return 0;
 err2:
@@ -1061,6 +1085,8 @@ int rdma_leave_multicast(struct rdma_cm_id *id, struct sockaddr *addr)
 		goto free;
 	}
 
+	VALGRIND_MAKE_MEM_DEFINED(resp, sizeof *resp);
+
 	pthread_mutex_lock(&id_priv->mut);
 	while (mc->events_completed < resp->events_reported)
 		pthread_cond_wait(&mc->cond, &id_priv->mut);
@@ -1255,6 +1281,8 @@ retry:
 		free(evt);
 		return (ret > 0) ? -ENODATA : ret;
 	}
+
+	VALGRIND_MAKE_MEM_DEFINED(resp, sizeof *resp);
 	
 	evt->event.event = resp->event;
 	switch (resp->event) {



More information about the general mailing list