[ofw] RE: [ofa-general] PATCH[5/6] Windows port of libibmad - rpc.c, sa.c, serv.c, smp.c, vendor.c

Sean Hefty sean.hefty at intel.com
Thu Dec 18 16:31:49 PST 2008


>-static pthread_mutex_t rpclock = PTHREAD_MUTEX_INITIALIZER;
>+static cl_plock_t rpclock;

There's a complib mutex implementation available.  plock is a reader/writer
lock.

>-	pthread_mutex_lock(&rpclock);
>+	cl_plock_acquire(&rpclock);
> }
>
> void
> madrpc_unlock(void)
> {
>-	pthread_mutex_unlock(&rpclock);
>+	cl_plock_release(&rpclock);

The lock is only acquired/released to serialize access.

>-void
>+MAD_EXPORT void
> madrpc_init(char *dev_name, int dev_port, int *mgmt_classes, int num_classes)
> {
> 	if (umad_init() < 0)
>@@ -314,7 +321,7 @@
> 		IBPANIC("too many classes %d requested", num_classes);
>
> 	while (num_classes--) {
>-		int rmpp_version = 0;
>+		uint8_t rmpp_version = 0;
> 		int mgmt = *mgmt_classes++;
>
> 		if (mgmt == IB_SA_CLASS)
>@@ -322,6 +329,7 @@
> 		if (mad_register_client(mgmt, rmpp_version) < 0)
> 			IBPANIC("client_register for mgmt class %d failed",
mgmt);
> 	}
>+	cl_plock_init(&rpclock);

Most complib objects also have construct and destroy calls that should be
invoked.  Maybe you can avoid the construct call here, but I'm not sure about
destroy.


- Sean




More information about the ofw mailing list