[ofw] [PATCH 4/4] MAD: fix issues routing vendor MADs
Leonid Keller
leonid at mellanox.co.il
Tue May 12 08:44:54 PDT 2009
Thank you.
You may commit all this patch series.
> -----Original Message-----
> From: Sean Hefty [mailto:sean.hefty at intel.com]
> Sent: Tuesday, May 12, 2009 6:25 PM
> To: Leonid Keller; ofw at lists.openfabrics.org
> Subject: RE: [ofw] [PATCH 4/4] MAD: fix issues routing vendor MADs
>
> >Could you elaborate on removing IB_MCLASS_SUBN_ADM and some other
> >management classes and on the changes in GMP handling ?
>
> Unless I missed something, the handling should be the same.
> See details below.
>
> >> ); diff -up -r -X \mshefty\scm\winof\trunk\docs\dontdiff.txt
> >> -I '\$Id:' trunk\core\al/kernel/al_smi.c
> >> branches\winverbs\core\al/kernel/al_smi.c
> >> --- trunk\core\al/kernel/al_smi.c 2009-01-26
> >> 09:34:30.250875000 -0800
> >> +++ branches\winverbs\core\al/kernel/al_smi.c 2009-05-07
> >> 15:53:12.270907500 -0700
> >> @@ -184,12 +184,12 @@ mad_route_t
> >> route_recv_dm_mad(
> >> IN ib_mad_element_t*
> >> p_mad_element );
> >>
> >> -mad_route_t
> >> -route_recv_gmp(
> >> +static mad_route_t
> >> +route_recv_bm(
>
> Rename route_recv_gmp to route_recv_bm. This core of this
> function was only really called for BM MADs.
>
> >> IN ib_mad_element_t*
> >> p_mad_element );
> >>
> >> -mad_route_t
> >> -route_recv_gmp_attr(
> >> +static mad_route_t
> >> +route_recv_perf(
>
> This isn't a rename. Route_recv_gmp_attr folds into
> route_recv_bm. A new call is added to check for perf MADs.
>
> >> p_mad_wr,IB_WCS_SUCCESS); @@ -2937,35 +2950,19 @@ process_mad_recv(
> >> break;
> >>
> >> case IB_MCLASS_PERF:
> >> - /* Process the received GMP. */
> >> - switch( p_mad_element->p_mad_buf->method )
> >> - {
> >> - case IB_MAD_METHOD_GET:
> >> - case IB_MAD_METHOD_SET:
> >> - route = ROUTE_LOCAL;
> >> - break;
> >> - default:
> >> - break;
> >> - }
> >> + route = route_recv_perf( p_mad_element );
>
> The perf MAD handling code above goes into the new
> route_recv_perf call. It just makes the code prettier.
>
> >> break;
> >>
> >> case IB_MCLASS_BM:
> >> - route = route_recv_gmp( p_mad_element );
> >> + route = route_recv_bm( p_mad_element );
>
> We're dealing with BM MADs here only.
>
> >> break;
> >>
> >> - case IB_MCLASS_SUBN_ADM:
> >> - case IB_MCLASS_DEV_MGMT:
> >> - case IB_MCLASS_COMM_MGMT:
> >> - case IB_MCLASS_SNMP:
> >> + case IB_MLX_VENDOR_CLASS1:
> >> + case IB_MLX_VENDOR_CLASS2:
> >> + route = ROUTE_LOCAL;
> >> break;
> >>
> >> default:
> >> - /* Route vendor specific MADs to the
> >> HCA provider. */
> >> - if( ib_class_is_vendor_specific(
> >> - p_mad_element->p_mad_buf->mgmt_class ) )
> >> - {
> >> - route = route_recv_gmp( p_mad_element );
>
> This is the only other call to route_recv_gmp, and it is
> limited to vendor specific MADs. The MLX vendor class MADs
> are routed locally. All other vendor defined MADs are
> dispatched normally. This is a change to routing of vendor MADs.
>
> >> @@ -3090,72 +3087,38 @@ route_recv_smp_attr( }
> >>
> >>
> >> -/*
> >> - * Route a received GMP.
> >> - */
> >> -mad_route_t
> >> -route_recv_gmp(
> >> +static mad_route_t
> >> +route_recv_bm(
> >> IN ib_mad_element_t*
> >> p_mad_element )
> >> {
> >> - mad_route_t route;
> >> -
> >> - AL_ENTER( AL_DBG_SMI );
> >> -
> >> - CL_ASSERT( p_mad_element );
> >> -
> >> - /* Process the received GMP. */
> >> switch( p_mad_element->p_mad_buf->method )
> >> {
> >> case IB_MAD_METHOD_GET:
> >> case IB_MAD_METHOD_SET:
> >> - /* Route vendor specific MADs to the HCA provider. */
> >> - if( ib_class_is_vendor_specific(
> >> - p_mad_element->p_mad_buf->mgmt_class ) )
> >> - {
> >> - route = ROUTE_LOCAL;
> >> - }
> >> - else
> >> - {
> >> - route = route_recv_gmp_attr( p_mad_element );
> >> - }
>
> Based on the two places where route_recv_gmp is called,
> route_recv_gmp_attr only ends up being called for BM MADs.
>
> >> + if( p_mad_element->p_mad_buf->attr_id ==
> >> IB_MAD_ATTR_CLASS_PORT_INFO )
> >> + return ROUTE_LOCAL;
>
> route_recv_gmp_attr returns local based on this check. I
> merged the two calls.
>
> >> break;
> >> -
> >> default:
> >> - route = ROUTE_DISPATCHER;
> >> break;
> >> }
> >> -
> >> - AL_EXIT( AL_DBG_SMI );
> >> - return route;
> >> + return ROUTE_DISPATCHER;
> >> }
> >>
> >> -
> >> -
> >> -/*
> >> - * Route received GMP attributes.
> >> - */
> >> -mad_route_t
> >> -route_recv_gmp_attr(
> >> +static mad_route_t
> >> +route_recv_perf(
> >> IN ib_mad_element_t*
> >> p_mad_element )
> >> {
> >> - mad_route_t route;
> >> -
> >> - AL_ENTER( AL_DBG_SMI );
> >> -
> >> - CL_ASSERT( p_mad_element );
> >> -
> >> - /* Process the received GMP attributes. */
> >> - if( p_mad_element->p_mad_buf->attr_id ==
> >> IB_MAD_ATTR_CLASS_PORT_INFO )
> >> - route = ROUTE_LOCAL;
>
> This is the all moved into route_recv_bm
>
> >> - else
> >> - route = ROUTE_DISPATCHER;
> >> -
> >> - AL_EXIT( AL_DBG_SMI );
> >> - return route;
> >> + switch( p_mad_element->p_mad_buf->method )
> >> + {
> >> + case IB_MAD_METHOD_GET:
> >> + case IB_MAD_METHOD_SET:
> >> + return ROUTE_LOCAL;
> >> + default:
> >> + break;
> >> + }
> >> + return ROUTE_DISPATCHER;
> >> }
>
> This is the perf MAD handling code moved into a new call.
>
> Hope that answers your question.
>
> - Sean
>
>
More information about the ofw
mailing list