[openib-general] [PATCH] [RFC] librdmacm: expose device list to users for iWARP
amith rajith mamidala
mamidala at cse.ohio-state.edu
Mon Jul 17 15:15:36 PDT 2006
Hi,
We were wondering if a similar patch is applied to the iWARP side. This
functionality is very useful,
Thanks,
Amith
---------- Forwarded message ----------
Date: Thu, 13 Jul 2006 16:31:56 -0700
From: Sean Hefty <sean.hefty at intel.com>
To: openib-general at openib.org
Cc: 'amith rajith mamidala' <mamidala at cse.ohio-state.edu>
Subject: [PATCH] [RFC] librdmacm: expose device list to users
The following patch adds calls to the userspace RDMA CM to return its list
of RDMA devices. The calls are similar to ibv_get_device_list() /
ibv_free_device_list().
Currently, RDMA device contexts are handed to the user only after they
create an rdma_cm_id and bind it to a local device. By exposing the device
list to the user, it makes it easier for the user to allocate device
specific resources (such as PDs, CQs, etc.) that are shared among multiple
rdma_cm_id's.
Signed-off-by: Sean Hefty <sean.hefty at intel.com>
---
Index: include/rdma/rdma_cma.h
===================================================================
--- include/rdma/rdma_cma.h (revision 8215)
+++ include/rdma/rdma_cma.h (working copy)
@@ -332,4 +332,20 @@ static inline uint16_t rdma_get_dst_port
((struct sockaddr_in *) &id->route.addr.dst_addr)->sin_port;
}
+/**
+ * rdma_get_devices - Get list of RDMA devices currently available.
+ * @num_devices: If non-NULL, set to the number of devices returned.
+ *
+ * Return a NULL-terminated array of opened RDMA devices. Callers can use this
+ * routine to allocate resources on specific RDMA devices that will be shared
+ * across multiple rdma_cm_id's.
+ * The array must be released by calling rdma_free_devices().
+ */
+struct ibv_context **rdma_get_devices(int *num_devices);
+
+/**
+ * rdma_free_devices - Frees the list of devices returned by rdma_get_devices().
+ */
+void rdma_free_devices(struct ibv_context **list);
+
#endif /* RDMA_CMA_H */
Index: src/cma.c
===================================================================
--- src/cma.c (revision 8517)
+++ src/cma.c (working copy)
@@ -216,6 +216,32 @@ err:
return ret;
}
+struct ibv_context **rdma_get_devices(int *num_devices)
+{
+ struct ibv_context **devs = NULL;
+ int i;
+
+ if (!cma_dev_cnt && ucma_init())
+ goto out;
+
+ devs = malloc(sizeof *devs * (cma_dev_cnt + 1));
+ if (!devs)
+ goto out;
+
+ for (i = 0; i < cma_dev_cnt; i++)
+ devs[i] = cma_dev_array[i].verbs;
+ devs[i] = NULL;
+out:
+ if (num_devices)
+ *num_devices = devs ? cma_dev_cnt : 0;
+ return devs;
+}
+
+void rdma_free_devices(struct ibv_context **list)
+{
+ free(list);
+}
+
static void __attribute__((destructor)) rdma_cma_fini(void)
{
ucma_cleanup();
Index: src/librdmacm.map
===================================================================
--- src/librdmacm.map (revision 8215)
+++ src/librdmacm.map (working copy)
@@ -21,5 +21,7 @@ RDMACM_1.0 {
rdma_get_dst_attr;
rdma_join_multicast;
rdma_leave_multicast;
+ rdma_get_devices;
+ rdma_free_devices;
local: *;
};
More information about the general
mailing list