instead of always assuming ibport as 1, actually test if the port is valid or not.
authorGengbin Zheng <gzheng@illinois.edu>
Mon, 11 Jun 2012 18:57:29 +0000 (13:57 -0500)
committerGengbin Zheng <gzheng@illinois.edu>
Mon, 11 Jun 2012 18:57:29 +0000 (13:57 -0500)
src/arch/net/machine-ibverbs.c

index 0cb4b15e89d1bd7aee7956ebc395dd8452071714..192a624d1b65243355a119877e0881738cee544f 100644 (file)
@@ -467,8 +467,6 @@ static void CmiMachineInit(char **argv){
        dev = *devList;
        CmiAssert(dev != NULL);
 
-       ibPort=1;
-
        MACHSTATE1(3,"device name %s",ibv_get_device_name(dev));
 
        context = (struct infiContext *)malloc(sizeof(struct infiContext));
@@ -480,10 +478,18 @@ static void CmiMachineInit(char **argv){
        
        MACHSTATE1(3,"context->localAddr allocated %p",context->localAddr);
        
-       context->ibPort = ibPort;
        //the context for this infiniband device 
        context->context = ibv_open_device(dev);
        CmiAssert(context->context != NULL);
+
+        // test ibPort
+        int MAXPORT = 8;
+        for (ibPort = 1; ibPort < MAXPORT; i++) {
+          struct ibv_port_attr attr;
+          if (ibv_query_port(context->context, ibPort, &attr) == 0) break;
+        }
+        if (ibPort == MAXPORT) CmiAbort("No valid IB port found!");
+       context->ibPort = ibPort;
        
        MACHSTATE1(3,"device opened %p",context->context);