Handling a situation when __complete_send_mad receives NULL instead of p_mad_wr parameter (may occur during Verifier low-mem simulation run) Signed-off by: Alexander Naslednikov (xalex at mellanox.co.il)
Index: D:/windows/MLNX_WinOF_trunk/core/al/kernel/al_smi.c
===================================================================
--- D:/windows/MLNX_WinOF_trunk/core/al/kernel/al_smi.c (revision 4987)
+++ D:/windows/MLNX_WinOF_trunk/core/al/kernel/al_smi.c (revision 4992)
@@ -893,7 +893,10 @@
/* Construct a send work completion. */
cl_memclr( &wc, sizeof( ib_wc_t ) );
- wc.wr_id = p_mad_wr->send_wr.wr_id;
+ if (p_mad_wr) {
+ // Handling the special race where p_mad_wr that comes from spl_qp
can be NULL
+ wc.wr_id = p_mad_wr->send_wr.wr_id;
+ }
wc.wc_type = IB_WC_SEND;
wc.status = wc_status;
Index: D:/windows/MLNX_WinOF_trunk/core/al/al_mad.c
===================================================================
--- D:/windows/MLNX_WinOF_trunk/core/al/al_mad.c (revision 4987)
+++ D:/windows/MLNX_WinOF_trunk/core/al/al_mad.c (revision 4992)
@@ -191,7 +191,7 @@
static boolean_t
__is_send_mad_done(
IN ib_mad_send_handle_t h_send,
- IN ib_wc_t *p_wc );
+ IN ib_wc_status_t status );
static void
__notify_send_comp(
@@ -1929,7 +1929,7 @@
}
/* See if the send request has completed. */
- if( __is_send_mad_done( h_send, p_wc ) )
+ if( __is_send_mad_done( h_send, p_wc->status ) )
{
/* The send has completed. */
cl_qlist_remove_item( &h_mad_svc->send_list,
@@ -2040,12 +2040,12 @@
static boolean_t
__is_send_mad_done(
IN ib_mad_send_handle_t h_send,
- IN ib_wc_t *p_wc )
+ IN ib_wc_status_t status )
{
AL_ENTER( AL_DBG_MAD_SVC );
/* Complete the send if the request failed. */
- if( p_wc->status != IB_WCS_SUCCESS )
+ if( status != IB_WCS_SUCCESS )
{
AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("y-send failed\n" )
);
return TRUE;
AsyncMadCompletion.patch
Description: AsyncMadCompletion.patch
_______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
