On 08:40 Thu 07 Jan     , Hal Rosenstock wrote:
> On Tue, Jan 5, 2010 at 6:10 AM, Sasha Khapyorsky <sas...@voltaire.com> wrote:
> >
> > This splits QoS related port parameters setup over switch external ports
> > and end ports. Such separation leaves us with simpler code and saves
> > some repeated flows in case of switch external ports (actually required
> > per switch and not per port).
> 
> Not sure what you mean by required in this statement. What are you
> referring to as required per switch rather than per port ?

Duplicated per switch external port setup detection of common (per
switch) data - such as: number of ports, Sl2VL mapping capability
p0->port_info.capability_mask.

> 
> > Another advantages: Optimized Sl2VL Mapping procedure can be implemented
> > easier using this model. A low level port QoS related parameters setup
> > infrastructure is ready for supporting per port QoS related configuration
> > (which hopefully will be implemented some days).
> >
> > Signed-off-by: Sasha Khapyorsky <sas...@voltaire.com>
> > ---
> >  opensm/opensm/osm_qos.c |  137 
> > +++++++++++++++++++++--------------------------
> >  1 files changed, 61 insertions(+), 76 deletions(-)
> >
> > diff --git a/opensm/opensm/osm_qos.c b/opensm/opensm/osm_qos.c
> > index afeaa11..f54e995 100644
> > --- a/opensm/opensm/osm_qos.c
> > +++ b/opensm/opensm/osm_qos.c
> > @@ -77,6 +77,7 @@ static ib_api_status_t vlarb_update_table_block(osm_sm_t 
> > * sm,
> >        osm_madw_context_t context;
> >        uint32_t attr_mod;
> >        unsigned vl_mask, i;
> > +       ib_api_status_t status;
> >
> >        vl_mask = (1 << (ib_port_info_get_op_vls(&p->port_info) - 1)) - 1;
> >
> > @@ -96,10 +97,17 @@ static ib_api_status_t 
> > vlarb_update_table_block(osm_sm_t * sm,
> >        context.vla_context.set_method = TRUE;
> >        attr_mod = ((block_num + 1) << 16) | port_num;
> >
> > -       return osm_req_set(sm, osm_physp_get_dr_path_ptr(p),
> > -                          (uint8_t *) & block, sizeof(block),
> > -                          IB_MAD_ATTR_VL_ARBITRATION, cl_hton32(attr_mod),
> > -                          CL_DISP_MSGID_NONE, &context);
> > +       status = osm_req_set(sm, osm_physp_get_dr_path_ptr(p),
> > +                            (uint8_t *) & block, sizeof(block),
> > +                            IB_MAD_ATTR_VL_ARBITRATION, 
> > cl_hton32(attr_mod),
> > +                            CL_DISP_MSGID_NONE, &context);
> > +       if (status != IB_SUCCESS)
> > +               OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 6202 : "
> > +                       "failed to update VLArbitration tables "
> > +                       "for port %" PRIx64 " block %u\n",
> > +                       cl_ntoh64(p->port_guid), block_num);
> > +
> > +       return status;
> >  }
> >
> >  static ib_api_status_t vlarb_update(osm_sm_t * sm, osm_physp_t * p,
> > @@ -157,6 +165,7 @@ static ib_api_status_t sl2vl_update_table(osm_sm_t * 
> > sm, osm_physp_t * p,
> >        ib_slvl_table_t tbl, *p_tbl;
> >        osm_node_t *p_node = osm_physp_get_node_ptr(p);
> >        uint32_t attr_mod;
> > +       ib_api_status_t status;
> >        unsigned vl_mask;
> >        uint8_t vl1, vl2;
> >        int i;
> > @@ -181,70 +190,65 @@ static ib_api_status_t sl2vl_update_table(osm_sm_t * 
> > sm, osm_physp_t * p,
> >        context.slvl_context.port_guid = osm_physp_get_port_guid(p);
> >        context.slvl_context.set_method = TRUE;
> >        attr_mod = in_port << 8 | out_port;
> > -       return osm_req_set(sm, osm_physp_get_dr_path_ptr(p),
> > -                          (uint8_t *) & tbl, sizeof(tbl),
> > -                          IB_MAD_ATTR_SLVL_TABLE, cl_hton32(attr_mod),
> > -                          CL_DISP_MSGID_NONE, &context);
> > +       status = osm_req_set(sm, osm_physp_get_dr_path_ptr(p),
> > +                            (uint8_t *) & tbl, sizeof(tbl),
> > +                            IB_MAD_ATTR_SLVL_TABLE, cl_hton32(attr_mod),
> > +                            CL_DISP_MSGID_NONE, &context);
> > +       if (status != IB_SUCCESS)
> > +               OSM_LOG(sm->p_log, OSM_LOG_ERROR, "ERR 6203 : "
> > +                       "failed to update SL2VLMapping tables "
> > +                       "for port %" PRIx64 "i, attr_mod 0x%x\n",
> > +                       cl_ntoh64(p->port_guid), attr_mod);
> > +       return status;
> >  }
> >
> > -static ib_api_status_t sl2vl_update(osm_sm_t * sm, osm_port_t * p_port,
> > -                                   osm_physp_t * p, uint8_t port_num,
> > -                                   unsigned force_update,
> > -                                   const struct qos_config *qcfg)
> > +static int qos_extports_setup(osm_sm_t * sm, osm_node_t *node,
> > +                             const struct qos_config *qcfg)
> >  {
> > -       ib_api_status_t status;
> > -       uint8_t i, num_ports;
> > -       ib_port_info_t *pi = &p_port->p_physp->port_info;
> > -
> > -       if (!(pi->capability_mask & IB_PORT_CAP_HAS_SL_MAP))
> > -               return IB_SUCCESS;
> > +       osm_physp_t *p0, *p;
> > +       unsigned force_update;
> > +       unsigned num_ports = osm_node_get_num_physp(node);
> > +       int ret = 0;
> > +       unsigned i, j;
> >
> > -       if (osm_node_get_type(osm_physp_get_node_ptr(p)) == 
> > IB_NODE_TYPE_SWITCH)
> > -               num_ports = 
> > osm_node_get_num_physp(osm_physp_get_node_ptr(p));
> > -       else
> > -               num_ports = 1;
> > +       for (i = 1; i < num_ports; i++) {
> > +               p = osm_node_get_physp_ptr(node, i);
> > +               force_update = p->need_update || sm->p_subn->need_update;
> > +               p->vl_high_limit = qcfg->vl_high_limit;
> > +               if (vlarb_update(sm, p, p->port_num, force_update, qcfg))
> > +                       ret = -1;
> > +       }
> >
> > -       for (i = 0; i < num_ports; i++) {
> > -               status = sl2vl_update_table(sm, p, i, port_num, 
> > force_update,
> > -                                           &qcfg->sl2vl);
> > -               if (status != IB_SUCCESS)
> > -                       return status;
> > +       p0 = osm_node_get_physp_ptr(node, 0);
> > +       if (!(p0->port_info.capability_mask & IB_PORT_CAP_HAS_SL_MAP))
> > +               return ret;
> 
> Same comment on this as previous osm_qos patch comment on merging the
> SL2VL mapping capability check.

I answered there.

Sasha
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to