<!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>