[openib-general] Re: [PATCH] [RFC] group devices by type

Michael S. Tsirkin mst at mellanox.co.il
Thu Jan 26 07:16:25 PST 2006


Quoting r. Sean Hefty <sean.hefty at intel.com>:
> Subject: [PATCH] [RFC] group devices by type
> 
> I'd like to get some feedback about adding the ability to group devices
> by some higher level type.  This would permit identifying all devices
> that are of type "Infiniband" from devices of other RDMA transports.
> 
> I've included the patch to ib_verbs.h to do this, along with changes to
> mad.c to show how it would be used.  If this is okay, then similar changes
> would be needed by a dozen or so other files, which I would do before
> submitting a final patch.
> 
> Signed-off-by: Sean Hefty <sean.hefty at intel.com>
> 

Wouldnt a simple helper function be sufficient?
Something like:

int rdma_is_ib_device(enum ib_node_type t)
{
	switch (t) {
	case IB_NODE_CA:
	case IB_NODE_SWITCH:
	case IB_NODE_ROUTER:
		return 1;
	}
	return 0;
}

> ----
> 
> Index: include/rdma/ib_verbs.h
> ===================================================================
> --- include/rdma/ib_verbs.h	(revision 5098)
> +++ include/rdma/ib_verbs.h	(working copy)
> @@ -57,7 +57,8 @@ union ib_gid {
>  };
>  
>  enum ib_node_type {

Flags as enums, hmm.

> -	IB_NODE_CA 	= 1,
> +	IB_NODE_IB = 0x10,		/* mask for all IB node types */
> +	IB_NODE_CA,
>  	IB_NODE_SWITCH,
>  	IB_NODE_ROUTER
>  };

I think this changes the ABI, so its somewhat problematic.
A way to do the same without breaking ABI below.

> Index: core/mad.c
> ===================================================================
> --- core/mad.c	(revision 5098)
> +++ core/mad.c	(working copy)
> @@ -2661,7 +2661,9 @@ static void ib_mad_init_device(struct ib
>  {
>  	int start, end, i;
>  
> -	if (device->node_type == IB_NODE_SWITCH) {
> +	if ((device->node_type & IB_NODE_IB) != IB_NODE_IB)

How about we have

IB_NODE_CA 	= 1,
IB_NODE_SWITCH,
IB_NODE_ROUTER
IB_NODE_MAX

and then you can

if (device->node_type >= IB_NODE_MAX)
	return;

> +		return;
> +	else if (device->node_type == IB_NODE_SWITCH) {
>  		start = 0;
>  		end   = 0;
>  	} else {

-- 
Michael S. Tsirkin
Staff Engineer, Mellanox Technologies



More information about the general mailing list