next = mad->p_next;\r
mad->p_next = NULL;\r
\r
- if (mad->send_context1 == pRegistration) {\r
+ if (mad->context1 == pRegistration) {\r
pRegistration->pDevice->IbInterface.put_mad(mad);\r
} else {\r
WmInsertMad(pProvider, mad);\r
WmProviderUnlockRemove(pProvider);\r
}\r
\r
-static NTSTATUS WmCopyRead(WM_PROVIDER *pProvider, WM_IO_MAD *pIoMad,\r
- ib_mad_element_t *pMad, size_t *pLen)\r
+static NTSTATUS WmCopyMad(WM_IO_MAD *pIoMad, ib_mad_element_t *pMad, size_t *pLen)\r
{\r
- WM_REGISTRATION *reg;\r
-\r
- reg = (WM_REGISTRATION *) pMad->send_context1;\r
- pIoMad->Id = reg->Id;\r
-\r
+ pIoMad->Id = ((WM_REGISTRATION *) pMad->context1)->Id;\r
pIoMad->Status = pMad->status;\r
pIoMad->Timeout = pMad->timeout_ms;\r
pIoMad->Retries = pMad->retry_cnt;\r
}\r
\r
len = outlen;\r
- status = WmCopyRead(pProvider, wmad, pProvider->MadHead, &len);\r
+ status = WmCopyMad(wmad, pProvider->MadHead, &len);\r
if (status == STATUS_SUCCESS) {\r
- reg = (WM_REGISTRATION *) pProvider->MadHead->send_context1;\r
+ reg = (WM_REGISTRATION *) pProvider->MadHead->context1;\r
reg->pDevice->IbInterface.put_mad(WmRemoveMad(pProvider));\r
}\r
WdfObjectReleaseLock(pProvider->ReadQueue);\r
return STATUS_NO_MEMORY;\r
}\r
\r
- mad->context1 = pRegistration;\r
RtlCopyMemory(mad->p_mad_buf, pIoMad + 1, size);\r
mad->remote_qp = pIoMad->Address.Qpn;\r
mad->remote_qkey = pIoMad->Address.Qkey;\r
mad->remote_sl = pIoMad->Address.ServiceLevel;\r
mad->pkey_index = pIoMad->Address.PkeyIndex;\r
mad->path_bits = pIoMad->Address.PathBits;\r
- mad->p_mad_buf->trans_id &= 0xFFFFFFFF00000000;\r
+ if (!ib_mad_is_response(mad->p_mad_buf)) {\r
+ mad->p_mad_buf->trans_id &= 0xFFFFFFFF00000000;\r
+ }\r
\r
ib_status = pifc->send_mad(pRegistration->hService, mad, NULL);\r
if (ib_status != IB_SUCCESS) {\r
void WmReceiveHandler(ib_mad_svc_handle_t hService, void *Context,\r
ib_mad_element_t *pMad)\r
{\r
- WM_REGISTRATION *reg;\r
- WM_PROVIDER *prov = Context;\r
+ WM_REGISTRATION *reg = Context;\r
+ WM_PROVIDER *prov;\r
WDFREQUEST request;\r
NTSTATUS status;\r
WM_IO_MAD *wmad;\r
size_t len = 0;\r
\r
UNREFERENCED_PARAMETER(hService);\r
- reg = (WM_REGISTRATION *) pMad->send_context1;\r
+ prov = reg->pProvider;\r
+ pMad->context1 = reg;\r
\r
WdfObjectAcquireLock(prov->ReadQueue);\r
if (reg->hService == NULL) {\r
goto complete;\r
}\r
\r
- status = WmCopyRead(prov, wmad, pMad, &len);\r
+ status = WmCopyMad(wmad, pMad, &len);\r
if (status == STATUS_SUCCESS) {\r
- reg = (WM_REGISTRATION *) pMad->send_context1;\r
reg->pDevice->IbInterface.put_mad(pMad);\r
} else {\r
WmInsertMad(prov, pMad);\r
ib_mad_element_t *pMad)\r
{\r
if (pMad->status == IB_SUCCESS) {\r
- ((WM_REGISTRATION *) pMad->context1)->pDevice->IbInterface.put_mad(pMad);\r
+ ((WM_REGISTRATION *) Context)->pDevice->IbInterface.put_mad(pMad);\r
} else {\r
- pMad->send_context1 = (void*) pMad->context1;\r
WmReceiveHandler(hService, Context, pMad);\r
}\r
}\r