[ofw] RE: [patch] pkey_changes.diff patch
Tzachi Dar
tzachid at mellanox.co.il
Mon Nov 10 09:56:45 PST 2008
10 more minutes please.
Thanks
Tzachi
> -----Original Message-----
> From: Smith, Stan [mailto:stan.smith at intel.com]
> Sent: Monday, November 10, 2008 7:54 PM
> To: Tzachi Dar
> Cc: ofw at lists.openfabrics.org
> Subject: RE: [patch] pkey_changes.diff patch
>
>
> Hello,
> I did not see an svn update for ipoib_adapater.c?
> Was this patch applied?
>
> Thanks,
>
> Stan.
>
>
> Anatoly Greenblatt wrote:
> > <<pkey_changes.diff>> Hi,
> >
> > Attached please find final version of patch that changes network
> > connection status when pkey added/removed in SM.
> >
> > Thanks,
> > Anatoly.
> >
> > Index: ulp/ipoib/kernel/ipoib_adapter.c
> > ===================================================================
> > --- ulp/ipoib/kernel/ipoib_adapter.c (revision 1742)
> > +++ ulp/ipoib/kernel/ipoib_adapter.c (working copy)
> > @@ -548,19 +548,19 @@
> >
> > p_adapter->p_ifc->get_err_str( status )) );
> > goto pkey_end;
> > }
> > -
> > - CL_ASSERT(ca_attr->p_port_attr->p_pkey_table[0] ==
> > IB_DEFAULT_PKEY);
> > - for(index = 0; index <
> ca_attr->p_port_attr->num_pkeys; index++)
> > + CL_ASSERT(ca_attr->p_port_attr[p_adapter->p_port->port_num
> > -1].p_pkey_table[0] == IB_DEFAULT_PKEY);
> > + for(index = 0; index <
> > ca_attr->p_port_attr[p_adapter->p_port->port_num -1].num_pkeys;
> > index++) {
> > - if(cl_hton16(p_adapter->guids.port_guid.pkey) ==
> > ca_attr->p_port_attr->p_pkey_table[index])
> > + if(cl_hton16(p_adapter->guids.port_guid.pkey) ==
> > ca_attr->p_port_attr[p_adapter->p_port->port_num
> > -1].p_pkey_table[index])
> > break;
> > }
> > - if(index >= ca_attr->p_port_attr->num_pkeys)
> > + if(index >= ca_attr->p_port_attr[p_adapter->p_port->port_num
> > -1].num_pkeys)
> > {
> > IPOIB_PRINT_EXIT( TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR,
> > ("Pkey table
> is invalid,
> > index not found\n"));
> > NdisWriteErrorLogEntry( p_adapter->h_adapter,
> > EVENT_IPOIB_PARTITION_ERR, 1,
> > p_adapter->guids.port_guid.pkey );
> > + status = IB_NOT_FOUND;
> > p_adapter->p_port->pkey_index = PKEY_INVALID_INDEX;
> > goto pkey_end;
> > }
> > @@ -755,7 +755,11 @@
> > {
> > status =
> > ipoib_query_pkey_index(p_adapter);
> > if(status != IB_SUCCESS)
> > - break;
> > + {
> > + cl_obj_lock( &p_adapter->obj );
> > + p_adapter->state =
> IB_PNP_PORT_INIT;
> > + cl_obj_unlock( &p_adapter->obj );
> > + }
> > }
> >
> > case IB_PNP_SM_CHANGE:
> > @@ -1071,12 +1075,13 @@
> > }
> >
> >
> > -void
> > +ib_api_status_t
> > ipoib_set_active(
> > IN ipoib_adapter_t* const
> > p_adapter )
> > {
> > ib_pnp_event_t old_state;
> > uint8_t i;
> > + ib_api_status_t status = IB_SUCCESS;
> >
> > IPOIB_ENTER( IPOIB_DBG_INIT );
> >
> > @@ -1105,8 +1110,13 @@
> >
> > default:
> > if (p_adapter->guids.port_guid.pkey !=
> IB_DEFAULT_PKEY)
> > - ipoib_query_pkey_index(p_adapter);
> > -
> > + {
> > + status = ipoib_query_pkey_index(p_adapter);
> > + if( IB_SUCCESS != status)
> > + {
> > + break;
> > + }
> > + }
> > /* Join all programmed multicast groups. */
> > for( i = 0; i < p_adapter->mcast_array_size; i++ )
> > {
> > @@ -1144,6 +1154,7 @@
> > }
> >
> > IPOIB_EXIT( IPOIB_DBG_INIT );
> > + return status;
> > }
> >
> >
> > Index: ulp/ipoib/kernel/ipoib_adapter.h
> > ===================================================================
> > --- ulp/ipoib/kernel/ipoib_adapter.h (revision 1742)
> > +++ ulp/ipoib/kernel/ipoib_adapter.h (working copy)
> > @@ -413,7 +413,7 @@
> > IN const uint8_t
> > link_speed );
> >
> >
> > -void
> > +ib_api_status_t
> > ipoib_set_active(
> > IN ipoib_adapter_t* const
> > p_adapter );
> >
> > Index: ulp/ipoib/kernel/ipoib_port.c
> > ===================================================================
> > --- ulp/ipoib/kernel/ipoib_port.c (revision 1742)
> > +++ ulp/ipoib/kernel/ipoib_port.c (working copy)
> > @@ -5789,8 +5789,36 @@
> > cl_spinlock_release( &p_port->recv_lock );
> >
> > /* Notify the adapter that we now have an active
> connection. */
> > - ipoib_set_active( p_port->p_adapter );
> > + status = ipoib_set_active( p_port->p_adapter );
> > + if( status != IB_SUCCESS )
> > + {
> > + ib_qp_mod_t qp_mod;
> > + ipoib_set_inactive( p_port->p_adapter );
> > + KeSetEvent( &p_port->sa_event,
> EVENT_INCREMENT, FALSE );
> > + IPOIB_PRINT_EXIT( TRACE_LEVEL_INFORMATION,
> > IPOIB_DBG_INIT,
> > + ("ipoib_set_active returned
> > %s.\n",p_port->p_adapter->p_ifc->get_err_str( status )));
> > + cl_spinlock_acquire( &p_port->recv_lock );
> > + cl_obj_lock( &p_port->obj );
> > + p_port->state = IB_QPS_ERROR;
> > + if( p_port->ib_mgr.h_query )
> > + {
> > + p_port->p_adapter->p_ifc->cancel_query(
> > + p_port->p_adapter->h_al,
> > p_port->ib_mgr.h_query );
> > + p_port->ib_mgr.h_query = NULL;
> > + }
> > + cl_obj_unlock( &p_port->obj );
> > + cl_spinlock_release( &p_port->recv_lock );
> >
> > + CL_ASSERT( p_port->ib_mgr.h_qp );
> > + cl_memclr( &qp_mod, sizeof(ib_qp_mod_t) );
> > + qp_mod.req_state = IB_QPS_ERROR;
> > + status = p_port->p_adapter->p_ifc->modify_qp(
> > p_port->ib_mgr.h_qp, &qp_mod );
> > + __endpt_mgr_reset_all( p_port );
> > +
> > + ipoib_port_deref( p_port, ref_join_bcast );
> > + return;
> > + }
> > +
> > /* garbage collector timer is needed when link is active */
> > gc_due_time.QuadPart =
> > -(int64_t)(((uint64_t)p_port->p_adapter->params.mc_leave_rescan *
> > 2000000) * 10);
> > KeSetTimerEx(&p_port->gc_timer,gc_due_time,
>
>
More information about the ofw
mailing list