<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>[PATCH] reregister\cl_vecto\reg_svc</TITLE>
</HEAD>
<BODY>
<P><FONT SIZE=2>FAb </FONT>
<BR><FONT SIZE=2>Attach patch the include the follow:</FONT>
</P>
<P><FONT SIZE=2>1. few cosmetics fixes (AL_ENTER etc....)</FONT>
<BR><FONT SIZE=2>2. bug in cl_vectoe_get function - </FONT>
</P>
<P> <FONT SIZE=2>/* Get a pointer to the element. */</FONT>
<BR><FONT SIZE=2> p_src = cl_vector_get_ptr( p_vector, index );</FONT>
<BR><FONT SIZE=2>- p_vector->pfn_copy( p_src, p_element, p_vector->element_size );</FONT>
<BR><FONT SIZE=2>+ p_vector->pfn_copy( p_element, p_src, p_vector->element_size );</FONT>
</P>
<BR>
<P><FONT SIZE=2>3. bug in reg_svc - I think that the user_context was not set with the right value .</FONT>
</P>
<P><FONT SIZE=2>I did this(core/al/al_reg_svc.c line 305):</FONT>
<BR><FONT SIZE=2>"</FONT>
<BR> <FONT SIZE=2>/* Copy the service registration information. */</FONT>
<BR><FONT SIZE=2>- h_sa_reg->sa_req.user_context = h_sa_reg;</FONT>
<BR><FONT SIZE=2>+ h_sa_reg->sa_req.user_context = p_reg_svc_req->svc_context;</FONT>
</P>
<P><FONT SIZE=2>"</FONT>
</P>
<P><FONT SIZE=2>I also notice that in IpoIB when you issue reg_svc request AL doesn't take reference to the adapter so I add this (ref and deref if fail )</FONT></P>
<P><FONT SIZE=2>4. I remove the CLIENT REREGISTER from the PnP and use the SM_CHANGE event</FONT>
<BR><FONT SIZE=2>5. Low level driver support in client reregister</FONT>
</P>
<P><FONT SIZE=2>Pls review and apply</FONT>
</P>
<P><FONT SIZE=2>10x</FONT>
<BR><FONT SIZE=2>Yossi </FONT>
</P>
<BR>
<P><FONT SIZE=2>Singed-off-by: Yossi Leybovich (sleybo@mellanox.co.il)</FONT>
</P>
<P><FONT SIZE=2>Index: core/al/al_ci_ca_shared.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- core/al/al_ci_ca_shared.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ core/al/al_ci_ca_shared.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -371,6 +371,7 @@</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2> ib_ca_handle_t h_ca;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+ AL_ENTER(AL_DBG_CA);</FONT>
<BR><FONT SIZE=2> CL_ASSERT( p_event_rec );</FONT>
<BR><FONT SIZE=2> h_ca = p_event_rec->handle.h_ca;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>@@ -379,6 +380,8 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> if( h_ca->pfn_event_cb )</FONT>
<BR><FONT SIZE=2> h_ca->pfn_event_cb( p_event_rec );</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ AL_EXIT(AL_DBG_CA);</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: core/al/al_reg_svc.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- core/al/al_reg_svc.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ core/al/al_reg_svc.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -305,7 +305,7 @@</FONT>
<BR><FONT SIZE=2> h_sa_reg->port_guid = p_reg_svc_req->port_guid;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> /* Copy the service registration information. */</FONT>
<BR><FONT SIZE=2>- h_sa_reg->sa_req.user_context = h_sa_reg;</FONT>
<BR><FONT SIZE=2>+ h_sa_reg->sa_req.user_context = p_reg_svc_req->svc_context;</FONT>
<BR><FONT SIZE=2> h_sa_reg->pfn_reg_svc_cb = p_reg_svc_req->pfn_reg_svc_cb;</FONT>
<BR><FONT SIZE=2> h_sa_reg->svc_rec = p_reg_svc_req->svc_rec;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: core/al/kernel/al_pnp.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- core/al/kernel/al_pnp.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ core/al/kernel/al_pnp.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -1465,7 +1465,7 @@</FONT>
<BR><FONT SIZE=2> ib_ca_attr_t *p_old_ca_attr;</FONT>
<BR><FONT SIZE=2> ib_api_status_t status;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>- CL_ENTER( AL_DBG_PNP, g_al_dbg_lvl );</FONT>
<BR><FONT SIZE=2>+ AL_ENTER( AL_DBG_PNP);</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> UNUSED_PARAM( p_item );</FONT>
<BR><FONT SIZE=2> CL_ASSERT( gp_pnp );</FONT>
<BR><FONT SIZE=2>@@ -1510,7 +1510,7 @@</FONT>
<BR><FONT SIZE=2> deref_al_obj( &gp_pnp->obj );</FONT>
<BR><FONT SIZE=2> gp_pnp->async_item_is_busy = FALSE;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>- CL_EXIT( AL_DBG_PNP, g_al_dbg_lvl );</FONT>
<BR><FONT SIZE=2>+ AL_EXIT( AL_DBG_PNP);</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: core/al/kernel/al_smi.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- core/al/kernel/al_smi.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ core/al/kernel/al_smi.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -1812,6 +1812,13 @@</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2> p_spl_qp_svc->base_lid = p_port_info->base_lid;</FONT>
<BR><FONT SIZE=2> p_spl_qp_svc->lmc = ib_port_info_get_lmc( p_port_info );</FONT>
<BR><FONT SIZE=2>+ if (p_port_info->subnet_timeout & 0x80)</FONT>
<BR><FONT SIZE=2>+ {</FONT>
<BR><FONT SIZE=2>+ AL_TRACE(AL_DBG_PNP,(" setting the sm_lid to 0 client reregister event \n"));</FONT>
<BR><FONT SIZE=2>+ ci_ca_lock_attr(p_spl_qp_svc->obj.p_ci_ca);</FONT>
<BR><FONT SIZE=2>+ p_spl_qp_svc->obj.p_ci_ca->p_pnp_attr->p_port_attr->sm_lid= 0;</FONT>
<BR><FONT SIZE=2>+ ci_ca_unlock_attr(p_spl_qp_svc->obj.p_ci_ca); </FONT></P>
<P><FONT SIZE=2>+ }</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/kernel/hca_data.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/kernel/hca_data.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/kernel/hca_data.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -693,6 +693,10 @@</FONT>
<BR><FONT SIZE=2> if (event_class_p) *event_class_p = E_EV_CA;</FONT>
<BR><FONT SIZE=2> return IB_AE_PORT_ACTIVE; /* ACTIVE STATE */</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+ case VAPI_CLIENT_REREGISTER:</FONT>
<BR><FONT SIZE=2>+ if (event_class_p) *event_class_p = E_EV_CA;</FONT>
<BR><FONT SIZE=2>+ return IB_AE_CLIENT_REREGISTER; /* ACTIVE STATE */</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2> default:</FONT>
<BR><FONT SIZE=2> CL_TRACE(MLNX_DBG_INFO, g_mlnx_dbg_lvl, ("FAIL to map %d (last known %d) returning %d\n",</FONT>
<BR><FONT SIZE=2> event_id, VAPI_PORT_ACTIVE, IB_AE_LOCAL_FATAL));</FONT>
<BR><FONT SIZE=2>@@ -2046,6 +2050,8 @@</FONT>
<BR><FONT SIZE=2> ibal_port_cap_p->sm_disable = TRUE;</FONT>
<BR><FONT SIZE=2> if (vapi_port_cap & IB_CAP_MASK_IS_SM)</FONT>
<BR><FONT SIZE=2> ibal_port_cap_p->sm = TRUE;</FONT>
<BR><FONT SIZE=2>+ if (vapi_port_cap & IB_CAP_MASK_IS_CLIENT_REREGISTRATION_SUP)</FONT>
<BR><FONT SIZE=2>+ ibal_port_cap_p->client_reregister= TRUE;</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> /////////////////////////////////////////////////////////</FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/kernel/hca_verbs.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/kernel/hca_verbs.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/kernel/hca_verbs.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -414,6 +414,10 @@</FONT>
<BR><FONT SIZE=2> hca_attr_mask |= HCA_ATTR_IS_VENDOR_CLS_SUP;</FONT>
<BR><FONT SIZE=2> hca_attr.is_vendor_cls_sup = (MT_bool)p_port_attr->cap.vend;</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>+ if (modca_cmd & IB_CA_MOD_IS_CLIENT_REREGISTER_SUPPORTED) {</FONT>
<BR><FONT SIZE=2>+ hca_attr_mask |= HCA_ATTR_IS_CLIENT_REREGISTRATION_SUP;</FONT>
<BR><FONT SIZE=2>+ hca_attr.is_client_reregister_sup= (MT_bool)p_port_attr->cap.client_reregister;</FONT>
<BR><FONT SIZE=2>+ }</FONT>
<BR><FONT SIZE=2> if (modca_cmd & IB_CA_MOD_QKEY_CTR) {</FONT>
<BR><FONT SIZE=2> if (p_port_attr->qkey_ctr == 0)</FONT>
<BR><FONT SIZE=2> hca_attr.reset_qkey_counter = TRUE;</FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/vapi/Hca/hcahal/tavor/thh_hob/thh_hob.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/vapi/Hca/hcahal/tavor/thh_hob/thh_hob.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/vapi/Hca/hcahal/tavor/thh_hob/thh_hob.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -2732,6 +2732,13 @@</FONT>
<BR><FONT SIZE=2> IB_CAP_MASK_CLR(capabilities, IB_CAP_MASK_IS_VENDOR_CLS_SUP);</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>+ if(HCA_ATTR_IS_SET(*hca_attr_mask_p, HCA_ATTR_IS_CLIENT_REREGISTRATION_SUP) ) {</FONT>
<BR><FONT SIZE=2>+ if (hca_attr_p->is_client_reregister_sup) {</FONT>
<BR><FONT SIZE=2>+ IB_CAP_MASK_SET(capabilities, IB_CAP_MASK_IS_CLIENT_REREGISTRATION_SUP);</FONT>
<BR><FONT SIZE=2>+ } else {</FONT>
<BR><FONT SIZE=2>+ IB_CAP_MASK_CLR(capabilities, IB_CAP_MASK_IS_CLIENT_REREGISTRATION_SUP);</FONT>
<BR><FONT SIZE=2>+ }</FONT>
<BR><FONT SIZE=2>+ } </FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> set_ib_props.capability_mask = capabilities;</FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/vapi/Hca/verbs/common/vapi_common.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/vapi/Hca/verbs/common/vapi_common.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/vapi/Hca/verbs/common/vapi_common.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -146,6 +146,7 @@</FONT>
<BR><FONT SIZE=2> SAFE_APPEND(HCA_ATTR_IS_SNMP_TUN_SUP)</FONT>
<BR><FONT SIZE=2> SAFE_APPEND(HCA_ATTR_IS_DEV_MGT_SUP)</FONT>
<BR><FONT SIZE=2> SAFE_APPEND(HCA_ATTR_IS_VENDOR_CLS_SUP)</FONT>
<BR><FONT SIZE=2>+ SAFE_APPEND(HCA_ATTR_IS_CLIENT_REREGISTRATION_SUP)</FONT>
<BR><FONT SIZE=2> SAFE_APPEND(HCA_ATTR_MAX)</FONT>
<BR><FONT SIZE=2> end_mask_sym(buf, cbuf, bufsz);</FONT>
<BR><FONT SIZE=2> return buf;</FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/vapi/Hca/verbs/vapi_types.h</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/vapi/Hca/verbs/vapi_types.h (revision 367)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/vapi/Hca/verbs/vapi_types.h (working copy)</FONT>
<BR><FONT SIZE=2>@@ -111,7 +111,8 @@</FONT>
<BR><FONT SIZE=2> HCA_ATTR_IS_SNMP_TUN_SUP = 2,</FONT>
<BR><FONT SIZE=2> HCA_ATTR_IS_DEV_MGT_SUP = 4,</FONT>
<BR><FONT SIZE=2> HCA_ATTR_IS_VENDOR_CLS_SUP = 8,</FONT>
<BR><FONT SIZE=2>- HCA_ATTR_MAX = 16 /*Dummy enum entry: always keep it the last one */</FONT>
<BR><FONT SIZE=2>+ HCA_ATTR_IS_CLIENT_REREGISTRATION_SUP = 16,</FONT>
<BR><FONT SIZE=2>+ HCA_ATTR_MAX = 32 /*Dummy enum entry: always keep it the last one */</FONT>
<BR><FONT SIZE=2> } VAPI_hca_attr_mask_enum_t;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>@@ -126,7 +127,8 @@</FONT>
<BR><FONT SIZE=2> HCA_ATTR_IS_SM|\</FONT>
<BR><FONT SIZE=2> HCA_ATTR_IS_SNMP_TUN_SUP|\</FONT>
<BR><FONT SIZE=2> HCA_ATTR_IS_DEV_MGT_SUP|\</FONT>
<BR><FONT SIZE=2>- HCA_ATTR_IS_VENDOR_CLS_SUP))!=0)</FONT>
<BR><FONT SIZE=2>+ HCA_ATTR_IS_VENDOR_CLS_SUP|\</FONT>
<BR><FONT SIZE=2>+ HCA_ATTR_IS_CLIENT_REREGISTRATION_SUP))!=0)</FONT>
<BR><FONT SIZE=2> #define HCA_ATTR_IS_SET(mask,attr) (((mask)&(attr))!=0)</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> /* QP attributes mask enumeration */</FONT>
<BR><FONT SIZE=2>@@ -385,7 +387,8 @@</FONT>
<BR><FONT SIZE=2> VAPI_LOCAL_EEC_CATASTROPHIC_ERROR, /*EEC*/</FONT>
<BR><FONT SIZE=2> VAPI_LOCAL_CATASTROPHIC_ERROR, /*none*/</FONT>
<BR><FONT SIZE=2> VAPI_PORT_ERROR, /*PORT*/</FONT>
<BR><FONT SIZE=2>- VAPI_PORT_ACTIVE /*PORT*/</FONT>
<BR><FONT SIZE=2>+ VAPI_PORT_ACTIVE, /*PORT*/</FONT>
<BR><FONT SIZE=2>+ VAPI_CLIENT_REREGISTER</FONT>
<BR><FONT SIZE=2> } VAPI_event_record_type_t;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>@@ -586,6 +589,7 @@</FONT>
<BR><FONT SIZE=2> MT_bool is_snmp_tun_sup;</FONT>
<BR><FONT SIZE=2> MT_bool is_dev_mgt_sup;</FONT>
<BR><FONT SIZE=2> MT_bool is_vendor_cls_sup;</FONT>
<BR><FONT SIZE=2>+ MT_bool is_client_reregister_sup;</FONT>
<BR><FONT SIZE=2> } VAPI_hca_attr_t; </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/vapi/mlxsys/mtl_types/ib_defs.h</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/vapi/mlxsys/mtl_types/ib_defs.h (revision 367)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/vapi/mlxsys/mtl_types/ib_defs.h (working copy)</FONT>
<BR><FONT SIZE=2>@@ -187,8 +187,11 @@</FONT>
<BR><FONT SIZE=2> /*20: */ IB_CAP_MASK_IS_VENDOR_CLS_SUP = (1<<20),</FONT>
<BR><FONT SIZE=2> /*21: */ IB_CAP_MASK_IS_DR_NOTICE_SUP = (1<<21),</FONT>
<BR><FONT SIZE=2> /*22: */ IB_CAP_MASK_IS_CAP_MASK_NOTICE_SUP = (1<<22),</FONT>
<BR><FONT SIZE=2>-/*23: */ IB_CAP_MASK_IS_BOOT_MGMT_SUP = (1<<23)</FONT>
<BR><FONT SIZE=2>-/*24 - 31: RESERVED */</FONT>
<BR><FONT SIZE=2>+/*23: */ IB_CAP_MASK_IS_BOOT_MGMT_SUP = (1<<23),</FONT>
<BR><FONT SIZE=2>+/*24: */ IB_CAP_MASK_IS_LINK_ROUND_TRIP_LATENCY_SUP = (1<<24), //???? NEW</FONT>
<BR><FONT SIZE=2>+/*25: */ IB_CAP_MASK_IS_CLIENT_REREGISTRATION_SUP = (1<<25)</FONT>
<BR><FONT SIZE=2>+/*26 - 31: RESERVED */</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2> } IB_capability_mask_bits_t;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: inc/complib/cl_obj.h</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- inc/complib/cl_obj.h (revision 367)</FONT>
<BR><FONT SIZE=2>+++ inc/complib/cl_obj.h (working copy)</FONT>
<BR><FONT SIZE=2>@@ -699,6 +699,8 @@</FONT>
<BR><FONT SIZE=2> cl_obj_lock(</FONT>
<BR><FONT SIZE=2> IN cl_obj_t * const p_obj )</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2>+ CL_ASSERT( p_obj->state == CL_INITIALIZED ||</FONT>
<BR><FONT SIZE=2>+ p_obj->state == CL_DESTROYING );</FONT>
<BR><FONT SIZE=2> cl_spinlock_acquire( &p_obj->lock );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> /*</FONT>
<BR><FONT SIZE=2>@@ -727,6 +729,8 @@</FONT>
<BR><FONT SIZE=2> cl_obj_unlock(</FONT>
<BR><FONT SIZE=2> IN cl_obj_t * const p_obj )</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2>+ CL_ASSERT( p_obj->state == CL_INITIALIZED ||</FONT>
<BR><FONT SIZE=2>+ p_obj->state == CL_DESTROYING );</FONT>
<BR><FONT SIZE=2> cl_spinlock_release( &p_obj->lock );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> /*</FONT>
<BR><FONT SIZE=2>Index: inc/complib/cl_vector.h</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- inc/complib/cl_vector.h (revision 367)</FONT>
<BR><FONT SIZE=2>+++ inc/complib/cl_vector.h (working copy)</FONT>
<BR><FONT SIZE=2>@@ -625,7 +625,7 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> /* Get a pointer to the element. */</FONT>
<BR><FONT SIZE=2> p_src = cl_vector_get_ptr( p_vector, index );</FONT>
<BR><FONT SIZE=2>- p_vector->pfn_copy( p_src, p_element, p_vector->element_size );</FONT>
<BR><FONT SIZE=2>+ p_vector->pfn_copy( p_element, p_src, p_vector->element_size );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> /*</FONT>
<BR><FONT SIZE=2> * PARAMETERS</FONT>
<BR><FONT SIZE=2>Index: inc/iba/ib_types.h</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- inc/iba/ib_types.h (revision 367)</FONT>
<BR><FONT SIZE=2>+++ inc/iba/ib_types.h (working copy)</FONT>
<BR><FONT SIZE=2>@@ -3839,38 +3839,38 @@</FONT>
<BR><FONT SIZE=2> #define IB_PORT_LINK_SPEED_SUPPORTED_MASK 0xF0</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV1 (CL_NTOH32(0x00000001))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_IS_SM (CL_NTOH32(0x00000002))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_NOTICE (CL_NTOH32(0x00000004))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_TRAP (CL_NTOH32(0x00000008))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV2 (CL_NTOH32(0x00000010))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_AUTO_MIG (CL_NTOH32(0x00000020))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_SL_MAP (CL_NTOH32(0x00000040))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_NV_MKEY (CL_NTOH32(0x00000080))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_NV_PKEY (CL_NTOH32(0x00000100))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_LED_INFO (CL_NTOH32(0x00000200))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_SM_DISAB (CL_NTOH32(0x00000400))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV3 (CL_NTOH32(0x00000800))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV4 (CL_NTOH32(0x00001000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV5 (CL_NTOH32(0x00002000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV6 (CL_NTOH32(0x00004000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV7 (CL_NTOH32(0x00008000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_COM_MGT (CL_NTOH32(0x00010000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_SNMP (CL_NTOH32(0x00020000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV8 (CL_NTOH32(0x00040000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_DEV_MGT (CL_NTOH32(0x00080000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_VEND_CLS (CL_NTOH32(0x00100000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_DR_NTC (CL_NTOH32(0x00200000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_CAP_NTC (CL_NTOH32(0x00400000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_HAS_BM (CL_NTOH32(0x00800000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV9 (CL_NTOH32(0x01000000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV10 (CL_NTOH32(0x02000000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV11 (CL_NTOH32(0x04000000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV12 (CL_NTOH32(0x08000000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV13 (CL_NTOH32(0x10000000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV14 (CL_NTOH32(0x20000000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV15 (CL_NTOH32(0x40000000))</FONT>
<BR><FONT SIZE=2>-#define IB_PORT_CAP_RESV16 (CL_NTOH32(0x80000000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_RESV0 (CL_NTOH32(0x00000001))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_IS_SM (CL_NTOH32(0x00000002))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_NOTICE (CL_NTOH32(0x00000004))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_TRAP (CL_NTOH32(0x00000008))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_IPD (CL_NTOH32(0x00000010))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_AUTO_MIG (CL_NTOH32(0x00000020))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_SL_MAP (CL_NTOH32(0x00000040))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_NV_MKEY (CL_NTOH32(0x00000080))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_NV_PKEY (CL_NTOH32(0x00000100))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_LED_INFO (CL_NTOH32(0x00000200))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_SM_DISAB (CL_NTOH32(0x00000400))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_SYS_GUID (CL_NTOH32(0x00000800))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_PKEY_SW_EXT_PORT_TRAP (CL_NTOH32(0x00001000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_RESV13 (CL_NTOH32(0x00002000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_RESV14 (CL_NTOH32(0x00004000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_RESV15 (CL_NTOH32(0x00008000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_COM_MGT (CL_NTOH32(0x00010000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_SNMP (CL_NTOH32(0x00020000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_REINIT (CL_NTOH32(0x00040000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_DEV_MGT (CL_NTOH32(0x00080000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_VEND_CLS (CL_NTOH32(0x00100000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_DR_NTC (CL_NTOH32(0x00200000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_CAP_NTC (CL_NTOH32(0x00400000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_BM (CL_NTOH32(0x00800000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_LINK_TRIP (CL_NTOH32(0x01000000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_HAS_CLI_REREG (CL_NTOH32(0x02000000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_RESV26 (CL_NTOH32(0x04000000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_RESV27 (CL_NTOH32(0x08000000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_RESV28 (CL_NTOH32(0x10000000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_RESV29 (CL_NTOH32(0x20000000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_RESV30 (CL_NTOH32(0x40000000))</FONT>
<BR><FONT SIZE=2>+#define IB_PORT_CAP_RESV31 (CL_NTOH32(0x80000000))</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> /****f* IBA Base: Types/ib_port_info_get_port_state</FONT>
<BR><FONT SIZE=2> * NAME</FONT>
<BR><FONT SIZE=2>@@ -7177,6 +7177,7 @@</FONT>
<BR><FONT SIZE=2> IB_AE_WQ_ACCESS_ERROR,</FONT>
<BR><FONT SIZE=2> IB_AE_PORT_ACTIVE,</FONT>
<BR><FONT SIZE=2> IB_AE_PORT_DOWN,</FONT>
<BR><FONT SIZE=2>+ IB_AE_CLIENT_REREGISTER,</FONT>
<BR><FONT SIZE=2> IB_AE_UNKNOWN /* ALWAYS LAST ENUM VALUE */</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> } ib_async_event_t;</FONT>
<BR><FONT SIZE=2>@@ -7266,6 +7267,9 @@</FONT>
<BR><FONT SIZE=2> * The link is declared unavailable: IB_LINK_INIT, IB_LINK_ARMED,</FONT>
<BR><FONT SIZE=2> * IB_LINK_DOWN.</FONT>
<BR><FONT SIZE=2> *</FONT>
<BR><FONT SIZE=2>+* IB_AE_CLIENT_REREGISTER</FONT>
<BR><FONT SIZE=2>+* The SM idicate to client to reregister its SA records.</FONT>
<BR><FONT SIZE=2>+*</FONT>
<BR><FONT SIZE=2> * IB_AE_UNKNOWN</FONT>
<BR><FONT SIZE=2> * An unknown error occurred which cannot be attributed to any</FONT>
<BR><FONT SIZE=2> * resource; behavior is indeterminate.</FONT>
<BR><FONT SIZE=2>@@ -7429,7 +7433,11 @@</FONT>
<BR><FONT SIZE=2> boolean_t reinit;</FONT>
<BR><FONT SIZE=2> boolean_t ledinfo;</FONT>
<BR><FONT SIZE=2> boolean_t port_active;</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>+ boolean_t ipd;</FONT>
<BR><FONT SIZE=2>+ boolean_t pkey_switch_ext_port;</FONT>
<BR><FONT SIZE=2>+ boolean_t bm;</FONT>
<BR><FONT SIZE=2>+ boolean_t link_rtl;</FONT>
<BR><FONT SIZE=2>+ boolean_t client_reregister;</FONT>
<BR><FONT SIZE=2> } ib_port_cap_t;</FONT>
<BR><FONT SIZE=2> /*****/</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>@@ -7521,7 +7529,7 @@</FONT>
<BR><FONT SIZE=2> * timeout = 4.096 microseconds * 2^subnet_timeout</FONT>
<BR><FONT SIZE=2> */</FONT>
<BR><FONT SIZE=2> uint8_t subnet_timeout;</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>+ uint8_t client_reregistration;</FONT>
<BR><FONT SIZE=2> ib_port_cap_t cap;</FONT>
<BR><FONT SIZE=2> uint16_t pkey_ctr;</FONT>
<BR><FONT SIZE=2> uint16_t qkey_ctr;</FONT>
<BR><FONT SIZE=2>@@ -9201,6 +9209,7 @@</FONT>
<BR><FONT SIZE=2> #define IB_CA_MOD_SHUTDOWN_PORT 0x00100000</FONT>
<BR><FONT SIZE=2> #define IB_CA_MOD_INIT_TYPE_VALUE 0x00200000</FONT>
<BR><FONT SIZE=2> #define IB_CA_MOD_SYSTEM_IMAGE_GUID 0x00400000</FONT>
<BR><FONT SIZE=2>+#define IB_CA_MOD_IS_CLIENT_REREGISTER_SUPPORTED 0x00800000</FONT>
<BR><FONT SIZE=2> /*</FONT>
<BR><FONT SIZE=2> * VALUES</FONT>
<BR><FONT SIZE=2> * IB_CA_MOD_IS_CM_SUPPORTED</FONT>
<BR><FONT SIZE=2>@@ -9279,6 +9288,10 @@</FONT>
<BR><FONT SIZE=2> *</FONT>
<BR><FONT SIZE=2> * IB_CA_MOD_SYSTEM_IMAGE_GUID</FONT>
<BR><FONT SIZE=2> * Used to modify the system image GUID for the port.</FONT>
<BR><FONT SIZE=2>+*</FONT>
<BR><FONT SIZE=2>+* IB_CA_MOD_IS_CLIENT_REREGISTER_SUPPORTED</FONT>
<BR><FONT SIZE=2>+* Used to modify the system image GUID for the port.</FONT>
<BR><FONT SIZE=2>+*</FONT>
<BR><FONT SIZE=2> *****/</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: ulp/ipoib/kernel/ipoib_adapter.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- ulp/ipoib/kernel/ipoib_adapter.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ ulp/ipoib/kernel/ipoib_adapter.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -500,6 +500,7 @@</FONT>
<BR><FONT SIZE=2> return IB_NOT_DONE;</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+ IPOIB_TRACE(IPOIB_DBG_INFO,("p_pnp_rec->pnp_event = 0x%x\n",p_pnp_rec->pnp_event));</FONT>
<BR><FONT SIZE=2> switch( p_pnp_rec->pnp_event )</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2> case IB_PNP_PORT_ADD:</FONT>
<BR><FONT SIZE=2>@@ -610,11 +611,24 @@</FONT>
<BR><FONT SIZE=2> case IB_PNP_SM_CHANGE:</FONT>
<BR><FONT SIZE=2> case IB_PNP_GID_CHANGE:</FONT>
<BR><FONT SIZE=2> case IB_PNP_LID_CHANGE:</FONT>
<BR><FONT SIZE=2>- /* TODO: Refresh all multicast group memberships in case the SM changed. */</FONT>
<BR><FONT SIZE=2>+ </FONT>
<BR><FONT SIZE=2>+ /* Join multicast groups and put QP in RTS. */</FONT>
<BR><FONT SIZE=2>+ CL_ASSERT( p_pnp_rec->context );</FONT>
<BR><FONT SIZE=2>+ cl_obj_lock( &p_adapter->obj );</FONT>
<BR><FONT SIZE=2>+ p_adapter->state = p_pnp_rec->pnp_event;</FONT>
<BR><FONT SIZE=2>+ cl_obj_unlock( &p_adapter->obj );</FONT>
<BR><FONT SIZE=2> IPOIB_TRACE( IPOIB_DBG_INFO,</FONT>
<BR><FONT SIZE=2>- ("IPOIB: Received unhandled PnP event %d\n",</FONT>
<BR><FONT SIZE=2>+ ("IPOIB: Received client reregister PnP event %d\n",</FONT>
<BR><FONT SIZE=2> p_pnp_rec->pnp_event) );</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ ipoib_port_sm_change( p_adapter->p_port);</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ status = IB_SUCCESS;</FONT>
<BR><FONT SIZE=2>+ </FONT>
<BR><FONT SIZE=2> default:</FONT>
<BR><FONT SIZE=2>+ IPOIB_TRACE( IPOIB_DBG_INFO,</FONT>
<BR><FONT SIZE=2>+ ("IPOIB: Received unhandled PnP event 0x%x\n",</FONT>
<BR><FONT SIZE=2>+ p_pnp_rec->pnp_event) );</FONT>
<BR><FONT SIZE=2> status = IB_SUCCESS;</FONT>
<BR><FONT SIZE=2> break;</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>Index: ulp/ipoib/kernel/ipoib_driver.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- ulp/ipoib/kernel/ipoib_driver.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ ulp/ipoib/kernel/ipoib_driver.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -2102,7 +2102,8 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> cl_memcpy( &ib_service.svc_rec.service_data8[ATS_IPV4_OFFSET],</FONT>
<BR><FONT SIZE=2> p_addr_item->address.as_bytes, IPV4_ADDR_SIZE );</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>+ /* taking reference for each service request.... */</FONT>
<BR><FONT SIZE=2>+ cl_obj_ref(&p_adapter->obj);</FONT>
<BR><FONT SIZE=2> ib_status = p_adapter->p_ifc->reg_svc(</FONT>
<BR><FONT SIZE=2> p_adapter->h_al, &ib_service, &p_addr_item->p_reg->h_reg_svc );</FONT>
<BR><FONT SIZE=2> if( ib_status != IB_SUCCESS )</FONT>
<BR><FONT SIZE=2>@@ -2134,6 +2135,7 @@</FONT>
<BR><FONT SIZE=2> p_adapter->p_ifc->get_err_str( ib_status )) );</FONT>
<BR><FONT SIZE=2> p_adapter->hung = TRUE;</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>+ cl_obj_deref(&p_adapter->obj);</FONT>
<BR><FONT SIZE=2> cl_free( p_addr_item->p_reg );</FONT>
<BR><FONT SIZE=2> p_addr_item->p_reg = NULL;</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>@@ -2221,7 +2223,7 @@</FONT>
<BR><FONT SIZE=2> p_reg->p_adapter->hung = TRUE;</FONT>
<BR><FONT SIZE=2> p_reg->h_reg_svc = NULL;</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>+ cl_obj_deref(&p_reg->p_adapter->obj);</FONT>
<BR><FONT SIZE=2> cl_obj_unlock( &p_reg->p_adapter->obj );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> IPOIB_EXIT( IPOIB_DBG_OID );</FONT>
<BR><FONT SIZE=2>Index: ulp/ipoib/kernel/ipoib_endpoint.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- ulp/ipoib/kernel/ipoib_endpoint.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ ulp/ipoib/kernel/ipoib_endpoint.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -196,7 +196,7 @@</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> cl_obj_unlock( p_obj );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>- IPOIB_EXIT( IPOIB_DBG_INIT );</FONT>
<BR><FONT SIZE=2>+ IPOIB_EXIT( IPOIB_DBG_ENDPT );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: ulp/ipoib/kernel/ipoib_endpoint.h</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- ulp/ipoib/kernel/ipoib_endpoint.h (revision 367)</FONT>
<BR><FONT SIZE=2>+++ ulp/ipoib/kernel/ipoib_endpoint.h (working copy)</FONT>
<BR><FONT SIZE=2>@@ -148,7 +148,7 @@</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2> IPOIB_ENTER( IPOIB_DBG_ENDPT );</FONT>
<BR><FONT SIZE=2> cl_obj_deref( &p_endpt->obj );</FONT>
<BR><FONT SIZE=2>- IPOIB_EXIT( IPOIB_DBG_INIT );</FONT>
<BR><FONT SIZE=2>+ IPOIB_EXIT( IPOIB_DBG_ENDPT );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: ulp/ipoib/kernel/ipoib_port.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- ulp/ipoib/kernel/ipoib_port.c (revision 367)</FONT>
<BR><FONT SIZE=2>+++ ulp/ipoib/kernel/ipoib_port.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -421,7 +421,7 @@</FONT>
<BR><FONT SIZE=2> *</FONT>
<BR><FONT SIZE=2> ******************************************************************************/</FONT>
<BR><FONT SIZE=2> static void</FONT>
<BR><FONT SIZE=2>-__port_get_mcast(</FONT>
<BR><FONT SIZE=2>+__port_get_bcast(</FONT>
<BR><FONT SIZE=2> IN ipoib_port_t* const p_port );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> static void</FONT>
<BR><FONT SIZE=2>@@ -680,6 +680,7 @@</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2> static void</FONT>
<BR><FONT SIZE=2> __port_free(</FONT>
<BR><FONT SIZE=2> IN cl_obj_t* const p_obj )</FONT>
<BR><FONT SIZE=2>@@ -4045,6 +4046,30 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> static ib_api_status_t</FONT>
<BR><FONT SIZE=2>+__endpt_mgr_remove_bcast(</FONT>
<BR><FONT SIZE=2>+ IN ipoib_port_t* const p_port)</FONT>
<BR><FONT SIZE=2>+{</FONT>
<BR><FONT SIZE=2>+ ipoib_endpt_t *p_endpt;</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ IPOIB_ENTER( IPOIB_DBG_INIT ); </FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ /* Remove the broadcast endpoint. */</FONT>
<BR><FONT SIZE=2>+ p_endpt = __endpt_mgr_get_by_gid(p_port, &p_port->ib_mgr.bcast_rec.mgid);</FONT>
<BR><FONT SIZE=2>+ if( !p_endpt )</FONT>
<BR><FONT SIZE=2>+ {</FONT>
<BR><FONT SIZE=2>+ IPOIB_TRACE_EXIT( IPOIB_DBG_ERROR,</FONT>
<BR><FONT SIZE=2>+ ("__endpt_mgr_get_by_gid failed.\n") );</FONT>
<BR><FONT SIZE=2>+ return IB_INVALID_GID;</FONT>
<BR><FONT SIZE=2>+ }</FONT>
<BR><FONT SIZE=2>+ </FONT>
<BR><FONT SIZE=2>+ __endpt_mgr_remove( p_port, p_endpt );</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ IPOIB_EXIT( IPOIB_DBG_INIT );</FONT>
<BR><FONT SIZE=2>+ return IB_SUCCESS;</FONT>
<BR><FONT SIZE=2>+ </FONT>
<BR><FONT SIZE=2>+}</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+static ib_api_status_t</FONT>
<BR><FONT SIZE=2> __endpt_mgr_add_bcast(</FONT>
<BR><FONT SIZE=2> IN ipoib_port_t* const p_port,</FONT>
<BR><FONT SIZE=2> IN ib_mcast_rec_t *p_mcast_rec )</FONT>
<BR><FONT SIZE=2>@@ -4353,7 +4378,7 @@</FONT>
<BR><FONT SIZE=2> p_port_rec->port_info.link_width_active) );</FONT>
<BR><FONT SIZE=2> ipoib_set_rate( p_port->p_adapter,</FONT>
<BR><FONT SIZE=2> p_port_rec->port_info.link_width_active );</FONT>
<BR><FONT SIZE=2>- __port_get_mcast( p_port );</FONT>
<BR><FONT SIZE=2>+ __port_get_bcast( p_port );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> else</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2>@@ -4386,7 +4411,7 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> static void</FONT>
<BR><FONT SIZE=2>-__port_get_mcast(</FONT>
<BR><FONT SIZE=2>+__port_get_bcast(</FONT>
<BR><FONT SIZE=2> IN ipoib_port_t* const p_port )</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2> ib_api_status_t status;</FONT>
<BR><FONT SIZE=2>@@ -4716,7 +4741,7 @@</FONT>
<BR><FONT SIZE=2> state isn't IB_PNP_PORT_ADD or PORT_DOWN? */</FONT>
<BR><FONT SIZE=2> CL_ASSERT( p_port->p_adapter->state == IB_PNP_PORT_ADD ||</FONT>
<BR><FONT SIZE=2> p_port->p_adapter->state == IB_PNP_PORT_DOWN );</FONT>
<BR><FONT SIZE=2>- __port_get_mcast( p_port );</FONT>
<BR><FONT SIZE=2>+ __port_get_bcast( p_port );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> else</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2>@@ -5034,3 +5059,19 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> IPOIB_EXIT( IPOIB_DBG_MCAST );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ib_api_status_t</FONT>
<BR><FONT SIZE=2>+ipoib_port_sm_change(</FONT>
<BR><FONT SIZE=2>+ IN ipoib_port_t* const p_port)</FONT>
<BR><FONT SIZE=2>+{</FONT>
<BR><FONT SIZE=2>+ ib_api_status_t status = IB_SUCCESS;</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ IPOIB_ENTER( IPOIB_DBG_INIT ); </FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ p_port->p_adapter->hung = TRUE;</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ IPOIB_EXIT( IPOIB_DBG_INIT );</FONT>
<BR><FONT SIZE=2>+ return status;</FONT>
<BR><FONT SIZE=2>+ </FONT>
<BR><FONT SIZE=2>+}</FONT>
<BR><FONT SIZE=2>Index: ulp/ipoib/kernel/ipoib_port.h</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- ulp/ipoib/kernel/ipoib_port.h (revision 367)</FONT>
<BR><FONT SIZE=2>+++ ulp/ipoib/kernel/ipoib_port.h (working copy)</FONT>
<BR><FONT SIZE=2>@@ -560,6 +560,10 @@</FONT>
<BR><FONT SIZE=2> IN ipoib_port_t* const p_port,</FONT>
<BR><FONT SIZE=2> IN const mac_addr_t mac );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+ib_api_status_t</FONT>
<BR><FONT SIZE=2>+ipoib_port_sm_change(</FONT>
<BR><FONT SIZE=2>+ IN ipoib_port_t* const p_port);</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2> void</FONT>
<BR><FONT SIZE=2> ipoib_port_remove_endpt(</FONT>
<BR><FONT SIZE=2> IN ipoib_port_t* const p_port,</FONT>
</P>
<P><FONT FACE="Arial" SIZE=2 COLOR="#000000"></FONT>
</BODY>
</HTML>