[openfabrics-ewg] RE: [openib-general] OFED-1.0-rc4 is available

Woodruff, Robert J robert.j.woodruff at intel.com
Thu May 4 15:56:52 PDT 2006


Tziporet wrote,

>Hi All,

>We have prepared OFED 1.0 RC4.

I took a version of the OFED RC4 kernel code, 
gen2/branches/1.0/ofed/tags/rc4/linux-kernel
applied my latest backport patch (for svn6829), which applied fine.
and built a kernel RPM for testing.

Then I took the 1.0 userspace code and built it.

I found that using the cma version of uDAPL did not work
and caused a core dump. Using the newer userspace cma.c code
fixes the problem. I applied this patch and it fixed the
problem. 

Not sure if anyone cares about having the rdma_cm in OFED, but 
if they do, I think it needs this fix. 

woody

--- cma.c	2006-04-07 10:15:20.000000000 -0700
+++ /home/woody/gen2/trunk/src/userspace/librdmacm/src/cma.c
2006-05-04 16:24:00.701184088 -0700
@@ -109,6 +109,7 @@ struct cma_id_private {
 	struct rdma_cm_id id;
 	struct cma_device *cma_dev;
 	int		  events_completed;
+	int		  connect_error;
 	pthread_cond_t	  cond;
 	pthread_mutex_t	  mut;
 	uint32_t	  handle;
@@ -150,10 +151,8 @@ static int check_abi_version(void)
 		return -ENODEV;
 	}
 
-	strncat(path, "/class/misc/rdma_cm/abi_version", sizeof path);
-	if (sysfs_read_attribute_value(path, val, sizeof val))
-		abi_ver = 1; /* ABI version wasn't available until
version 2 */
-	else
+	strncat(path, "/class/infiniband_ucma/abi_version", sizeof
path);
+	if (!sysfs_read_attribute_value(path, val, sizeof val))
 		abi_ver = strtol(val, NULL, 10);
 
 	if (abi_ver < RDMA_USER_CM_MIN_ABI_VERSION ||
@@ -435,11 +434,9 @@ int rdma_bind_addr(struct rdma_cm_id *id
 	if (ret != size)
 		return (ret > 0) ? -ENODATA : ret;
 
-	if (abi_ver > 1) {
-		ret = ucma_query_route(id);
-		if (ret)
-			return ret;
-	}
+	ret = ucma_query_route(id);
+	if (ret)
+		return ret;
 
 	memcpy(&id->route.addr.src_addr, addr, addrlen);
 	return 0;
@@ -689,7 +686,7 @@ int rdma_listen(struct rdma_cm_id *id, i
 	if (ret != size)
 		return (ret > 0) ? -ENODATA : ret;
 
-	return 0;
+	return ucma_query_route(id);
 }
 
 int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param
*conn_param)
@@ -924,17 +921,27 @@ retry:
 		evt->status = ucma_process_conn_resp(id_priv);
 		if (!evt->status)
 			evt->event = RDMA_CM_EVENT_ESTABLISHED;
-		else
+		else {
 			evt->event = RDMA_CM_EVENT_CONNECT_ERROR;
+			id_priv->connect_error = 1;
+		}
 		break;
 	case RDMA_CM_EVENT_ESTABLISHED:
 		evt->status = ucma_process_establish(&id_priv->id);
-		if (evt->status)
+		if (evt->status) {
 			evt->event = RDMA_CM_EVENT_CONNECT_ERROR;
+			id_priv->connect_error = 1;
+		}
 		break;
 	case RDMA_CM_EVENT_REJECTED:
+		if (id_priv->connect_error)
+			goto retry;
 		ucma_modify_qp_err(evt->id);
 		break;
+	case RDMA_CM_EVENT_DISCONNECTED:
+		if (id_priv->connect_error)
+			goto retry;
+		break;
 	default:
 		break;
 	}



More information about the ewg mailing list