[ofw] [PATCH] ib/cm: update port attributes earlier in destruction path
Sean Hefty
sean.hefty at intel.com
Mon May 11 16:28:09 PDT 2009
The CM tries to modify the port attributes during the cleanup phase of
port cep destruction. However, if the stack is being brought down, by
the time ib_modify_hca is called, the h_ca handle is invalid.
Signed-off-by: Sean Hefty <sean.hefty at intel.com>
---
I can't think of any reason why modification of the port attributes is
deferred.
Index: al_cm_cep.c
===================================================================
--- al_cm_cep.c (revision 2139)
+++ al_cm_cep.c (working copy)
@@ -2409,6 +2409,7 @@
{
cep_agent_t *p_port_cep;
KLOCK_QUEUE_HANDLE hdl;
+ ib_port_attr_mod_t port_attr_mod;
AL_ENTER( AL_DBG_CM );
@@ -2433,6 +2434,16 @@
p_port_cep->h_pd = NULL;
}
+ if( p_port_cep->h_ca )
+ {
+ /* Update local port attributes */
+ port_attr_mod.cap.cm = FALSE;
+ ib_modify_ca( p_port_cep->h_ca, p_port_cep->port_num,
+ IB_CA_MOD_IS_CM_SUPPORTED, &port_attr_mod );
+ deref_al_obj( &p_port_cep->h_ca->obj );
+ p_port_cep->h_ca = NULL;
+ }
+
AL_EXIT( AL_DBG_CM );
}
@@ -2447,22 +2458,10 @@
IN al_obj_t *p_obj )
{
cep_agent_t *p_port_cep;
- ib_port_attr_mod_t port_attr_mod;
AL_ENTER( AL_DBG_CM );
p_port_cep = PARENT_STRUCT( p_obj, cep_agent_t, obj );
-
- if( p_port_cep->h_ca )
- {
- /* Update local port attributes */
- port_attr_mod.cap.cm = FALSE;
- ib_modify_ca( p_port_cep->h_ca, p_port_cep->port_num,
- IB_CA_MOD_IS_CM_SUPPORTED, &port_attr_mod );
-
- deref_al_obj( &p_port_cep->h_ca->obj );
- }
-
destroy_al_obj( &p_port_cep->obj );
cl_free( p_port_cep );
More information about the ofw
mailing list