]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
libibumad debugging
authorSean Hefty <sean.hefty@intel.com>
Tue, 15 Jun 2010 17:28:08 +0000 (10:28 -0700)
committerSean Hefty <sean.hefty@intel.com>
Tue, 15 Jun 2010 17:28:08 +0000 (10:28 -0700)
trunk/core/al/al_mad.c
trunk/ulp/libibumad/include/infiniband/umad.h
trunk/ulp/libibumad/src/umad.cpp

index 4576fa8a94e13ce59fcc8974dea1040d37239883..f11ac2b257ddc9ca314320305f5c265dd65a789f 100644 (file)
@@ -1570,6 +1570,7 @@ __does_send_req_rmpp(
                {\r
                        switch( p_mad_element->p_mad_buf->method )\r
                        {\r
+                       case IB_MAD_METHOD_GETTABLE:\r
                        case IB_MAD_METHOD_GETTABLE_RESP:\r
                        case IB_MAD_METHOD_GETMULTI:\r
                        case IB_MAD_METHOD_GETMULTI_RESP:\r
index 712d021337acd34809e4d4409d303ce431223c3f..f6b41ace1df89695725c7c9073a4bcad88b6f457 100644 (file)
@@ -63,13 +63,13 @@ typedef struct ib_mad_addr
        uint8_t                 gid_index;\r
        uint8_t                 gid[16];\r
 \r
-       uint8_t                 grh_present;\r
+       uint8_t                 traffic_class;\r
        uint8_t                 reserved_grh;\r
        uint16_t                lid;\r
        uint8_t                 sl;\r
        uint8_t                 path_bits;\r
        uint8_t                 reserved_rate;\r
-       uint8_t                 traffic_class;\r
+       uint8_t                 grh_present;\r
 \r
 }      ib_mad_addr_t;\r
 \r
index cdf73fdc578cc318c932f66fbf7b0884cd3ac7f0..f033cbe672555f8724b02aac04b0ca23f1d65796 100644 (file)
@@ -548,6 +548,23 @@ size_t umad_size(void)
        return sizeof(struct ib_user_mad);\r
 }\r
 \r
+static void umad_convert_addr(struct ib_mad_addr *addr, WM_MAD_AV *av)\r
+{\r
+       av->VersionClassFlow = htonl((6 << 28) | (((uint32_t) addr->traffic_class) << 20) |\r
+                                                                (addr->flow_label & 0x000FFFFF));\r
+       av->Reserved = 0;\r
+       av->StaticRate = 0;\r
+}\r
+\r
+static void umad_convert_av(WM_MAD_AV *av, struct ib_mad_addr *addr)\r
+{\r
+       uint32_t ver_class_flow;\r
+\r
+       ver_class_flow = ntohl(av->VersionClassFlow);\r
+       addr->flow_label = ver_class_flow & 0x000FFFFF;\r
+       addr->traffic_class = (uint8_t) (ver_class_flow >> 20);\r
+}\r
+\r
 __declspec(dllexport)\r
 int umad_send(int portid, int agentid, void *umad, int length,\r
                          int timeout_ms, int retries)\r
@@ -562,8 +579,11 @@ int umad_send(int portid, int agentid, void *umad, int length,
        mad->retries    = (uint32_t) retries;\r
        mad->length             = (uint32_t) length;\r
 \r
+       umad_convert_addr(&mad->addr, &((WM_MAD *) mad)->Address);\r
        hr = ports[portid].prov->Send((WM_MAD *) mad, NULL);\r
+       umad_convert_av(&((WM_MAD *) mad)->Address, &mad->addr);\r
        if (FAILED(hr)) {\r
+               _set_errno(EIO);\r
                return GetLastError();\r
        }\r
 \r
@@ -588,20 +608,23 @@ int umad_recv(int portid, void *umad, int *length, int timeout_ms)
                } else {\r
                        hr = WaitForSingleObject(port->overlap.hEvent, (DWORD) timeout_ms);\r
                        if (hr == WAIT_TIMEOUT) {\r
+                               _set_errno(EWOULDBLOCK);\r
                                return -EWOULDBLOCK;\r
                        }\r
                }\r
        }\r
 \r
        if (FAILED(hr)) {\r
+               _set_errno(EIO);\r
                return -EIO;\r
        }\r
 \r
        if (mad->Length <= (UINT32) *length) {\r
                port->pending = FALSE;\r
                hr = (HRESULT) mad->Id;\r
+               umad_convert_av(&mad->Address, &((struct ib_user_mad *) mad)->addr);\r
        } else {\r
-               errno = ENOSPC;\r
+               _set_errno(ENOSPC);\r
                hr = -ENOSPC;\r
        }\r
 \r