]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
winmad: fixup return values and zero allocated mad master
authorSean Hefty <sean.hefty@intel.com>
Tue, 15 Jun 2010 17:04:28 +0000 (17:04 +0000)
committerSean Hefty <sean.hefty@intel.com>
Tue, 15 Jun 2010 17:04:28 +0000 (17:04 +0000)
Winmad simply returns the status values defined by IBAL.  Convert those values into winmad define status values and align those values with errno.  This matches the expectations of libibumad.

As part of the cleanup, convert the check for success from IB_SUCCESS to IB_WCS_SUCCESS.  Both are defined as 0, so there's no functional change,but the mad status is a 'work completion status' value, not an API status value.

Finally, return the correct status value when canceling a read request.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1@2823 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

trunk/core/winmad/kernel/wm_provider.c
trunk/core/winmad/wm_ioctl.h
trunk/inc/user/iba/winmad.h
trunk/ulp/libibumad/src/umad.cpp

index a150bf1e1a55243a2c6531c31fdfc70ddd981941..f3926f9e41a3df7a6b7450c6c49a8439085a851e 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * Copyright (c) 2008 Intel Corporation. All rights reserved.\r
+ * Copyright (c) 2008-2010 Intel Corporation. All rights reserved.\r
  *\r
  * This software is available to you under the OpenIB.org BSD license\r
  * below:\r
@@ -407,9 +407,10 @@ unlock:
 void WmSendHandler(ib_mad_svc_handle_t hService, void *Context,\r
                                   ib_mad_element_t *pMad)\r
 {\r
-       if (pMad->status == IB_SUCCESS) {\r
+       if (pMad->status == IB_WCS_SUCCESS) {\r
                ((WM_REGISTRATION *) Context)->pDevice->IbInterface.put_mad(pMad);\r
        } else {\r
+               pMad->status = WM_IO_TIMEOUT;\r
                WmReceiveHandler(hService, Context, pMad);\r
        }\r
 }\r
@@ -417,10 +418,11 @@ void WmSendHandler(ib_mad_svc_handle_t hService, void *Context,
 void WmProviderCancel(WM_PROVIDER *pProvider, WDFREQUEST Request)\r
 {\r
        WDFREQUEST      request;\r
-       NTSTATUS        status;\r
+       NTSTATUS        status, result;\r
 \r
        WdfObjectAcquireLock(pProvider->ReadQueue);\r
        status = WdfIoQueueRetrieveNextRequest(pProvider->ReadQueue, &request);\r
+       result = status;\r
 \r
        while (NT_SUCCESS(status)) {\r
                WdfRequestComplete(request, STATUS_CANCELLED);\r
@@ -428,5 +430,5 @@ void WmProviderCancel(WM_PROVIDER *pProvider, WDFREQUEST Request)
        }\r
        WdfObjectReleaseLock(pProvider->ReadQueue);\r
 \r
-       WdfRequestComplete(Request, status);\r
+       WdfRequestComplete(Request, result);\r
 }\r
index 628b5b62136de3601b5188371f183986b2dba402..56063e0e9948c076ecd879e1a8ccd6be281600f6 100644 (file)
@@ -98,6 +98,9 @@ typedef struct _WM_IO_MAD_AV
 \r
 }      WM_IO_MAD_AV;\r
 \r
+#define WM_IO_SUCCESS 0\r
+#define WM_IO_TIMEOUT 138\r
+\r
 #pragma warning(push)\r
 #pragma warning(disable: 4200)\r
 typedef struct _WM_IO_MAD\r
index 779ef74e9a745bf568fc4bf95563aa441f1c1754..35261f55659c77be39f16634c79b24c1965404eb 100644 (file)
@@ -72,6 +72,9 @@ typedef struct _WM_MAD_AV
 \r
 }      WM_MAD_AV;\r
 \r
+#define WM_SUCCESS 0\r
+#define WM_TIMEOUT 138\r
+\r
 #pragma warning(push)\r
 #pragma warning(disable: 4200)\r
 typedef struct _WM_MAD\r
index 3ec19360ba37bc0e182ec2b868bd8c4cda899c0c..cdf73fdc578cc318c932f66fbf7b0884cd3ac7f0 100644 (file)
@@ -533,13 +533,13 @@ void *umad_get_mad(void *umad)
 __declspec(dllexport)\r
 void *umad_alloc(int num, size_t size)\r
 {\r
-       return new uint8_t[num * size];\r
+       return calloc(num, size);\r
 }\r
 \r
 __declspec(dllexport)\r
 void umad_free(void *umad)\r
 {\r
-       delete umad;\r
+       free(umad);\r
 }\r
 \r
 __declspec(dllexport)\r