[ofw] RE: [patch] pkey_changes.diff patch

Smith, Stan stan.smith at intel.com
Mon Nov 10 09:53:45 PST 2008


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