Hi All,
I am working Virtual Kernel mode Windows WMI driver, for windows server 2012 R2 and using Mellanox 4.8 stack.
While disabling the Virtual kernel mode driver running with heavy traffic, API modify_qp() is not responding properly. It gets hanged.
In case of less traffic,it is responding fine. While running IPERF, traffic carried nearly 15 Gbps per second, Modify_QP is not responding in some scenario (2 out of 10).
code:
AcquireWriteLock(&Adapter->IBListLock, &lockState);
listEntry = Adapter->IBListHead.Flink;
while (listEntry != &Adapter->IBListHead) {
pviConnectInfo = (PVI_CONNECT_INFO *)CONTAINING_RECORD(listEntry, PVI_CONNECT_INFO, listEntry);
if (pviConnectInfo->qp && pviConnectInfo->p_ifc) {
qp_mod.req_state = IB_QPS_ERROR;
ibStatus = pviConnectInfo->p_ifc->modify_qp(pviConnectInfo->qp, &qp_mod);
if (ibStatus != IB_SUCCESS) {
DEBUGP(VNIC_ERROR, (FUNCTION": %s: failed to move QP %p to ERROR state, error 0x%x\n",
Adapter->vnic_name, pviConnectInfo->qp, ibStatus));
}
}
listEntry = listEntry->Flink;
}
ReleaseLock(&Adapter->IBListLock, &lockState);
Here in this case,Modify_qp() fails to respond immediately (that is,it fails to move to error state)and it gets hanged, then i am getting BSOD and it is showing "watchdog timeout" . The reason is NdisAcquireReadWriteLock() acquired prolonged period, more than 25 micro seconds.
Please suggest me how to resolve and handle this issue.
Regards,
Janaki