[ofa-general] Re: [PATCH] opensm: Add support for MulticastFDBTop
Hal Rosenstock
hal.rosenstock at gmail.com
Mon Sep 21 07:20:50 PDT 2009
On Mon, Sep 21, 2009 at 8:59 AM, Sasha Khapyorsky <sashak at voltaire.com>wrote:
> On 10:31 Wed 02 Sep , Hal Rosenstock wrote:
> >
> > Add support for SwitchInfo:MulticastFDBTop
> > Added by MgtWG errata #4505-4508
> > Also, per MgtWG RefID #4640, MulticastFDBTop value of 0xbfff means no
> entries
> >
> > In osm_mcast_mgr.c:mcast_mgr_set_mftables call new routine
> > mcast_mgr_set_mfttop to set MulticastFDBTop in SwitchInfo
> > based on max_block_in_use when switch port 0 indicates
> > IsMulticastFDBTop is supported.
> >
> > Signed-off-by: Hal Rosenstock <hal.rosenstock at gmail.com>
> > ---
> > diff --git a/opensm/opensm/osm_mcast_mgr.c
> b/opensm/opensm/osm_mcast_mgr.c
> > index d7c5ce1..3671e08 100644
> > --- a/opensm/opensm/osm_mcast_mgr.c
> > +++ b/opensm/opensm/osm_mcast_mgr.c
> > @@ -1066,6 +1066,83 @@ Exit:
> >
> > /**********************************************************************
> > **********************************************************************/
> > +static void mcast_mgr_set_mfttop(IN osm_sm_t * sm, IN osm_switch_t *
> p_sw)
> > +{
> > + osm_node_t *p_node;
> > + osm_dr_path_t *p_path;
> > + osm_physp_t *p_physp;
> > + osm_mcast_tbl_t *p_tbl;
> > + osm_madw_context_t context;
> > + ib_api_status_t status;
> > + ib_switch_info_t si;
> > + boolean_t set_swinfo_require = FALSE;
> > + uint16_t mcast_top;
> > + uint8_t life_state;
> > +
> > + OSM_LOG_ENTER(sm->p_log);
> > +
> > + CL_ASSERT(p_sw);
> > +
> > + p_node = p_sw->p_node;
> > +
> > + CL_ASSERT(p_node);
> > +
> > + p_physp = osm_node_get_physp_ptr(p_node, 0);
> > + p_path = osm_physp_get_dr_path_ptr(p_physp);
> > + p_tbl = osm_switch_get_mcast_tbl_ptr(p_sw);
> > +
> > + if (p_physp->port_info.capability_mask &
> IB_PORT_CAP_HAS_MCAST_FDB_TOP) {
>
> BTW any reason why this capability bit if placed in PortInfo and not in
> SwitchInfo (it is not port but switch related feature)?
I don't recall.
>
> > + /*
> > + Set the top of the multicast forwarding table.
> > + */
> > + si = p_sw->switch_info;
> > + if (p_tbl->max_block_in_use == -1)
> > + mcast_top = cl_hton16(IB_LID_MCAST_START_HO - 1);
> > + else
> > + mcast_top = cl_hton16(IB_LID_MCAST_START_HO +
> > + (p_tbl->max_block_in_use + 1)
> * IB_MCAST_BLOCK_SIZE - 1);
> > + if (mcast_top != si.mcast_top) {
> > + set_swinfo_require = TRUE;
> > + si.mcast_top = mcast_top;
> > + }
> > +
> > + /* check to see if the change state bit is on. If it is -
> then
> > + we need to clear it. */
> > + if (ib_switch_info_get_state_change(&si))
> > + life_state = ((sm->p_subn->opt.packet_life_time <<
> 3)
> > + | (si.life_state & IB_SWITCH_PSC)) &
> 0xfc;
> > + else
> > + life_state = (sm->p_subn->opt.packet_life_time <<
> 3) & 0xf8;
> > +
> > + if (life_state != si.life_state ||
> > + ib_switch_info_get_state_change(&si)) {
> > + set_swinfo_require = TRUE;
> > + si.life_state = life_state;
> > + }
>
> Switch's StateChange and LifeState are handled when unicast routing is
> configured. Why do we need duplicate it here?
>
I thought we could lose a PortStateChange but it looks like just making sure
that this bit is 0 on set should be fine. I'll send a revised patch shortly.
-- Hal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/general/attachments/20090921/7fa465c2/attachment.html>
More information about the general
mailing list