<!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>FW: [PATCH] client reregister </TITLE>
</HEAD>
<BODY>
<P><FONT SIZE=2>Fab</FONT>
</P>
<P><FONT SIZE=2>Attach is patch for supporting client reregister event in the HCA , PnP manager and in the IPoIB I followed your recommendation to implement reregistration just in the level of IPoIB till you will have the full design to the mcast/service_record mngr in the AL</FONT></P>
<P><FONT SIZE=2>Main changes:</FONT>
</P>
<P><FONT SIZE=2>1. for the HCA async event I add the support to parse the event, but I didn't have the chance to check that it actually work </FONT></P>
<P><FONT SIZE=2>(I encounter problem to get async events from the HCA , I don't get the cq async events as well. I will debug that later thus week) The code just add defines and cases and I think t safe to add it.</FONT></P>
<P><FONT SIZE=2>2. In PnP manager I trapped the port_info and set flag to signal that client reregister was set by the SM .</FONT>
</P>
<P><FONT SIZE=2>3. In the IPoIB after getting the PNP_CLIENT_REREGISTER event I remove the bcast entry and issue get_bcast again. After the IpoIB join the bcast group it register the IP address and refresh the mcast array (as it do in the PNP_ACTIVE). Of course that wont be needed after we will implement the mcast/service_records reregistration mngr in the AL (BTW did you find the time to put some initial design draft)</FONT></P>
<P><FONT SIZE=2>4. few cosmetics changes in the TRACES and the functions name. </FONT>
</P>
<P><FONT SIZE=2>Pls review and send me your comments.</FONT>
</P>
<P><FONT SIZE=2>10x</FONT>
<BR><FONT SIZE=2>Yossi</FONT>
</P>
<BR>
<BR>
<P><FONT SIZE=2>Singned-off-by:Yossi Leybovich (sleybo@mellanox.co.il)</FONT>
<BR><FONT SIZE=2>Index: core/al/al_ci_ca_shared.c ===================================================================</FONT>
<BR><FONT SIZE=2>--- core/al/al_ci_ca_shared.c (revision 355)</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_init.c ===================================================================</FONT>
<BR><FONT SIZE=2>--- core/al/al_init.c (revision 355)</FONT>
<BR><FONT SIZE=2>+++ core/al/al_init.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -39,7 +39,7 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-uint32_t g_al_dbg_lvl = AL_DBG_ERROR;</FONT>
<BR><FONT SIZE=2>+uint32_t g_al_dbg_lvl = AL_DBG_ERROR | AL_DBG_SMI;</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_pnp.c ===================================================================</FONT>
<BR><FONT SIZE=2>--- core/al/kernel/al_pnp.c (revision 355)</FONT>
<BR><FONT SIZE=2>+++ core/al/kernel/al_pnp.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -465,6 +465,7 @@</FONT>
<BR><FONT SIZE=2> case IB_PNP_PORT_DOWN:</FONT>
<BR><FONT SIZE=2> case IB_PNP_PKEY_CHANGE:</FONT>
<BR><FONT SIZE=2> case IB_PNP_SM_CHANGE:</FONT>
<BR><FONT SIZE=2>+ case IB_PNP_CLIENT_REREGISTER:</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> case IB_PNP_SUBNET_TIMEOUT_CHANGE:</FONT>
<BR><FONT SIZE=2>@@ -1409,6 +1410,7 @@</FONT>
<BR><FONT SIZE=2> event_rec.pnp_event = IB_PNP_SM_CHANGE;</FONT>
<BR><FONT SIZE=2> __pnp_process_port_forward( &event_rec );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2> /* Check for subnet timeout change. */</FONT>
<BR><FONT SIZE=2> if( p_old_port_attr->subnet_timeout !=</FONT>
<BR><FONT SIZE=2> p_new_port_attr->subnet_timeout )</FONT>
<BR><FONT SIZE=2>@@ -1416,6 +1418,12 @@</FONT>
<BR><FONT SIZE=2> event_rec.pnp_event = IB_PNP_SUBNET_TIMEOUT_CHANGE;</FONT>
<BR><FONT SIZE=2> __pnp_process_port_forward( &event_rec );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2>+ if( p_old_port_attr->client_reregistration )</FONT>
<BR><FONT SIZE=2>+ {</FONT>
<BR><FONT SIZE=2>+ event_rec.pnp_event = IB_PNP_CLIENT_REREGISTER;</FONT>
<BR><FONT SIZE=2>+ __pnp_process_port_forward( &event_rec );</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> </FONT>
<BR><FONT SIZE=2>@@ -1465,7 +1473,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 +1518,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>--- core/al/kernel/al_smi.c (revision 355)</FONT>
<BR><FONT SIZE=2>+++ core/al/kernel/al_smi.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -1810,8 +1810,14 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> if( p_port_info )</FONT>
<BR><FONT SIZE=2> {</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 client reregister event \n"));</FONT>
<BR><FONT SIZE=2>+ p_spl_qp_svc->obj.p_ci_ca->p_pnp_attr->p_port_attr->client_reregistration = 1;</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: hw/mt23108/kernel/hca_data.c ===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/kernel/hca_data.c (revision 355)</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>--- hw/mt23108/kernel/hca_verbs.c (revision 355)</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 355)</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 355)</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 355)</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 355)</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/iba/ib_al.h ===================================================================</FONT>
<BR><FONT SIZE=2>--- inc/iba/ib_al.h (revision 355)</FONT>
<BR><FONT SIZE=2>+++ inc/iba/ib_al.h (working copy)</FONT>
<BR><FONT SIZE=2>@@ -8076,7 +8076,8 @@</FONT>
<BR><FONT SIZE=2> #define IB_PNP_EVENT_SM 0x00100000</FONT>
<BR><FONT SIZE=2> #define IB_PNP_EVENT_GID 0x00200000</FONT>
<BR><FONT SIZE=2> #define IB_PNP_EVENT_LID 0x00400000</FONT>
<BR><FONT SIZE=2>-#define IB_PNP_EVENT_SUBNET 0x00800000</FONT>
<BR><FONT SIZE=2>+#define IB_PNP_EVENT_SUBNET 0x00800000</FONT>
<BR><FONT SIZE=2>+#define IB_PNP_EVENT_CLIENT_REREGISTER 0x01000000</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> #define IB_PNP_CA_ADD (IB_PNP_CA | IB_PNP_EVENT_ADD)</FONT>
<BR><FONT SIZE=2> #define IB_PNP_CA_REMOVE (IB_PNP_CA | IB_PNP_EVENT_REMOVE)</FONT>
<BR><FONT SIZE=2>@@ -8089,6 +8090,7 @@</FONT>
<BR><FONT SIZE=2> #define IB_PNP_PORT_DOWN (IB_PNP_PORT | IB_PNP_EVENT_DOWN)</FONT>
<BR><FONT SIZE=2> #define IB_PNP_PKEY_CHANGE (IB_PNP_PORT | IB_PNP_EVENT_PKEY)</FONT>
<BR><FONT SIZE=2> #define IB_PNP_SM_CHANGE (IB_PNP_PORT | IB_PNP_EVENT_SM)</FONT>
<BR><FONT SIZE=2>+#define IB_PNP_CLIENT_REREGISTER (IB_PNP_PORT | IB_PNP_EVENT_CLIENT_REREGISTER)</FONT>
<BR><FONT SIZE=2> #define IB_PNP_GID_CHANGE (IB_PNP_PORT | IB_PNP_EVENT_GID)</FONT>
<BR><FONT SIZE=2> #define IB_PNP_LID_CHANGE (IB_PNP_PORT | IB_PNP_EVENT_LID)</FONT>
<BR><FONT SIZE=2> #define IB_PNP_SUBNET_TIMEOUT_CHANGE (IB_PNP_PORT | IB_PNP_EVENT_SUBNET)</FONT>
<BR><FONT SIZE=2>Index: inc/iba/ib_types.h ===================================================================</FONT>
<BR><FONT SIZE=2>--- inc/iba/ib_types.h (revision 355)</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)) #define </FONT>
<BR><FONT SIZE=2>+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)) #define </FONT>
<BR><FONT SIZE=2>+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>--- ulp/ipoib/kernel/ipoib_adapter.c (revision 355)</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 = </FONT>
<BR><FONT SIZE=2>+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>@@ -614,7 +615,27 @@</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> 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>+ case IB_PNP_CLIENT_REREGISTER:</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 = IB_PNP_CLIENT_REREGISTER;</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 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_client_reregister( 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>@@ -855,7 +876,20 @@</FONT>
<BR><FONT SIZE=2> case IB_PNP_PORT_REMOVE:</FONT>
<BR><FONT SIZE=2> ipoib_resume_oids( p_adapter );</FONT>
<BR><FONT SIZE=2> break;</FONT>
<BR><FONT SIZE=2>+ case IB_PNP_CLIENT_REREGISTER:</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+ /* Join all programmed multicast groups. */</FONT>
<BR><FONT SIZE=2>+ ipoib_refresh_mcast(p_adapter, p_adapter->mcast_array, </FONT>
<BR><FONT SIZE=2>+p_adapter->mcast_array_size);</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ /* Register all existing addresses. */</FONT>
<BR><FONT SIZE=2>+ ipoib_reg_addrs( p_adapter );</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+ /* Now that we're in the broadcast group, notify that we have a link. */</FONT>
<BR><FONT SIZE=2>+ IPOIB_TRACE( IPOIB_DBG_INFO, ("Clinet Reregister!\n") );</FONT>
<BR><FONT SIZE=2>+ NdisMIndicateStatus( p_adapter->h_adapter, NDIS_STATUS_MEDIA_CONNECT,</FONT>
<BR><FONT SIZE=2>+ NULL, 0 );</FONT>
<BR><FONT SIZE=2>+ NdisMIndicateStatusComplete( p_adapter->h_adapter );</FONT>
<BR><FONT SIZE=2>+ break;</FONT>
<BR><FONT SIZE=2> default:</FONT>
<BR><FONT SIZE=2> /* Join all programmed multicast groups. */</FONT>
<BR><FONT SIZE=2> for( i = 0; i < p_adapter->mcast_array_size; i++ )</FONT>
<BR><FONT SIZE=2>Index: ulp/ipoib/kernel/ipoib_endpoint.c ===================================================================</FONT>
<BR><FONT SIZE=2>--- ulp/ipoib/kernel/ipoib_endpoint.c (revision 355)</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>--- ulp/ipoib/kernel/ipoib_endpoint.h (revision 355)</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>--- ulp/ipoib/kernel/ipoib_port.c (revision 355)</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> 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,28 @@</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_client_reregister(</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>+ /* Initiate cleanup of all endpoints */</FONT>
<BR><FONT SIZE=2>+ status = __endpt_mgr_remove_bcast( p_port );</FONT>
<BR><FONT SIZE=2>+ if( status != IB_SUCCESS )</FONT>
<BR><FONT SIZE=2>+ {</FONT>
<BR><FONT SIZE=2>+ IPOIB_TRACE( IPOIB_DBG_ERROR,</FONT>
<BR><FONT SIZE=2>+ ("__endpt_mgr_remove_bcast returned %s.\n",</FONT>
<BR><FONT SIZE=2>+ p_port->p_adapter->p_ifc->get_err_str( status )) );</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>+ __port_get_bcast( p_port);</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>Index: ulp/ipoib/kernel/ipoib_port.h ===================================================================</FONT>
<BR><FONT SIZE=2>--- ulp/ipoib/kernel/ipoib_port.h (revision 355)</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_client_reregister(</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>
<BR>
<P><FONT FACE="Arial" SIZE=2 COLOR="#000000"></FONT>
</BODY>
</HTML>