I agree, this is indeed a bug, please check it in. 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
