Tzachi Dar wrote: > I agree, this is indeed a bug, please check it in.
Done in SVN commit 2869. > > Thanks > Tzachi > >> -----Original Message----- >> From: Smith, Stan [mailto:[email protected]] >> Sent: Tuesday, August 03, 2010 11:49 PM >> To: Tzachi Dar >> Cc: [email protected] >> Subject: [IPOIB_NDIS6_CM] missing IRQL restore >> >> >> Hello, >> In ipoib_port.cpp, function ipoib_port_send() the following code >> is executed: >> >> if (NDIS_TEST_SEND_AT_DISPATCH_LEVEL(send_flags)) { >> //TODO Tzachid: make an assert here to validate your >> IRQL ASSERT (KeGetCurrentIrql() == DISPATCH_LEVEL); >> old_irql = DISPATCH_LEVEL; >> } else { >> NDIS_RAISE_IRQL_TO_DISPATCH(&old_irql); >> //ASSERT (KeGetCurrentIrql() == PASSIVE_LEVEL); // >> Happens } >> >> Further on under an error condition >> >> cl_obj_lock( &p_port->obj ); >> if( p_port->state != IB_QPS_RTS ) >> { >> cl_obj_unlock( &p_port->obj ); >> >> IPOIB_PRINT( TRACE_LEVEL_VERBOSE, IPOIB_DBG_SEND, >> ("Invalid QP state: not RTS, exiting from >> port_send\n")); >> NET_BUFFER_LIST_STATUS(p_net_buffer_list) = >> NDIS_STATUS_FAILURE; ipoib_inc_send_stat( p_port->p_adapter, >> IP_STAT_DROPPED, 0 ); >> >> NdisMSendNetBufferListsCompleteX( p_port->p_adapter, >> >> p_net_buffer_list, >> >> send_complete_flags ); >> return; >> } >> cl_obj_unlock( &p_port->obj ); >> >> Looks like the IRQL can be messed up on exit. >> Following patch fixes the problem. >> Do you agree? >> >> thanks, >> >> stan. >> >> --- A/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp Tue Aug 03 13:02:05 >> 2010 +++ B/ulp/ipoib_NDIS6_CM/kernel/ipoib_port.cpp Tue Aug 03 >> 13:40:09 2010 @@ -5440,6 +5440,10 @@ >> NdisMSendNetBufferListsCompleteX( p_port->p_adapter, >> >> p_net_buffer_list, >> >> send_complete_flags ); >> + >> + NDIS_LOWER_IRQL(old_irql, DISPATCH_LEVEL); + >> + IPOIB_EXIT( IPOIB_DBG_SEND ); >> return; >> } >> cl_obj_unlock( &p_port->obj ); _______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
