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