[openib-general] OpenIB and OpenRDMA: Convergence on common RDMA APIs and ULPs for Linux

Roland Dreier roland at topspin.com
Wed May 25 19:35:52 PDT 2005


I believe the way forward is to evolve the existing drivers/infiniband
code already in Linux into a drivers/rdma that supports both IB and
RNICs.  To be extremely blunt, I believe the RNIC-PI is irrelevant to
the Linux kernel -- no IB vendors will support ripping out a working
midlayer and starting from scratch, and it doesn't make sense to have
two essentially equivalent midlayers in the same kernel.

To put a really concrete proposal on the table, I would suggest to
start by extending the current ib_client registration structure, which
looks like

	struct ib_client {
		char  *name;
		void (*add)   (struct ib_device *);
		void (*remove)(struct ib_device *);
	
		struct list_head list;
	};

by extending the current enum ib_node_type to something like

	enum rdma_device_type {
		RDMA_DEVICE_IB_CA,
		RDMA_DEVICE_IB_SWITCH,
		RDMA_DEVICE_IB_ROUTER,
		RDMA_DEVICE_RNIC
	};

Then the various pieces of code layered on top of the RDMA midlayer
can decide whether they want to deal with a particular device or not
by looking at the node_type member.  For example, the IB CM, IPoIB,
etc. could ignore devices of type RDMA_DEVICE_RNIC, while SDP or iSER
would use all devices and the RNIC CM would take only devices of type
RDMA_DEVICE_RNIC.

Then someone would have to start implementing a low-level driver for a
specific RNIC, and find which modifications to the existing verbs are
required.  For example, I believe the QP attribute structure passed
into the QP modify verb probably has to become a union containing the
IB attributes and the RNIC attributes.  However, most verbs should
work fine with at most trivial modifications.

The existing OpenIB SDP code will be a good example to study as we
determine what abstractions need to be added to make it simple for
consumers to deal with the differences between IB and RNIC.

 - R.



More information about the general mailing list