While disabling the Virtual kernel mode driver running with heavy traffic, API modify_qp() is not responding properly. It gets hanged

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