public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
From: Sasha Khapyorsky <sashak-smomgflXvOZWk0Htik3J/w@public.gmane.org>
To: Hal Rosenstock <hal.rosenstock-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCHv3] opensm: Reduce heap consumption by multicast routing tables (MFTs)
Date: Fri, 16 Oct 2009 14:24:06 +0200	[thread overview]
Message-ID: <20091016122406.GQ20210@me> (raw)
In-Reply-To: <f0e08f230910151535p4aed8827p29f7887d0161dbf-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On 18:35 Thu 15 Oct     , Hal Rosenstock wrote:
> >> @@ -138,6 +122,51 @@ void osm_mcast_tbl_set(IN osm_mcast_tbl_t * p_tbl, IN uint16_t mlid_ho,
> >>
> >>  /**********************************************************************
> >>   **********************************************************************/
> >> +void
> >> +osm_mcast_tbl_realloc_mask_tbl(IN osm_mcast_tbl_t * p_tbl,
> >> +                            IN osm_subn_t * p_subn, IN uintn_t mlid_offset)
> >
> > I would suggest to simplify the function name to something like
> > 'osm_mcast_tbl_realloc()' - osm_mcast_tbl API doesn't have any
> > information about a buffer internal structure.
> >
> >
> >> +{
> >> +     size_t mft_size, size;
> >> +     uint16_t (*p_mask_tbl)[][IB_MCAST_POSITION_MAX];
> >> +
> >> +     if (mlid_offset < p_tbl->mft_size)
> >> +             return;
> >> +
> >> +     /*
> >> +        The number of bytes needed in the mask table is:
> >> +        The (maximum bit mask 'position' + 1) times the
> >> +        number of bytes in each bit mask times the
> >> +        number of MLIDs supported by the table.
> >> +
> >> +        We must always allocate the array with the maximum position
> >> +        since it is (and must be) defined that way the table structure
> >> +        in order to create a pointer to a two dimensional array.
> >> +      */
> >> +     mft_size = (mlid_offset + IB_MCAST_BLOCK_SIZE) /
> >> +                 IB_MCAST_BLOCK_SIZE * IB_MCAST_BLOCK_SIZE;
> >> +     if (mft_size > (p_tbl->max_block + 1) * IB_MCAST_BLOCK_SIZE)
> >> +             mft_size = (p_tbl->max_block + 1) * IB_MCAST_BLOCK_SIZE;
> >
> > Hmm, wouldn't this:
> >
> >        mft_size = (mlid_offset / IB_MCAST_BLOCK_SIZE + 1) * IB_MCAST_BLOCK_SIZE;
> >
> > do the same as lines above?
> 
> What about the limit (max_block) check ?

If passed mlid_offset can exceed this then it is likely needed, but I'm
not sure that this is the case - then we are asking for more mlids than
a subnet is capable to handle and probably it is blocked somewhere
already (but I didn't check really).

> >> @@ -154,6 +183,8 @@ boolean_t osm_mcast_tbl_is_port(IN const osm_mcast_tbl_t * p_tbl,
> >>               CL_ASSERT(mlid_ho <= p_tbl->max_mlid_ho);
> >>
> >>               mlid_offset = mlid_ho - IB_LID_MCAST_START_HO;
> >> +             if (mlid_offset >= p_tbl->mft_size)
> >> +                     return FALSE;
> >
> > If you are introducing new field mft_size, I would also suggest to change
> > the meaning of max_mlid_ho field to be max configured mlid for this
> > table and not max capability mlid (which is almost duplicated by
> > num_entries field).
> 
> Yes, almost duplicated.
> 
> > I suppose that this can be done as separate patch.
> >
> > Then all such and similar (many below) checks should be performed against
> > this actually configured max mlid and not against table size. As we
> > discussed already this prevents some bugs for 'max_mlid < table_size - 1'
> > case.
> 
> I'll look at this subsequent to this patch.

I would suggest to make it first (guess that it is possible without
relation to MFT reallocation), so we will need to change all those
lines only once.

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

  parent reply	other threads:[~2009-10-16 12:24 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-14 21:35 [PATCHv3] opensm: Reduce heap consumption by multicast routing tables (MFTs) Hal Rosenstock
     [not found] ` <20091014213546.GA32163-Wuw85uim5zDR7s880joybQ@public.gmane.org>
2009-10-15 20:42   ` Sasha Khapyorsky
2009-10-15 22:35     ` Hal Rosenstock
     [not found]       ` <f0e08f230910151535p4aed8827p29f7887d0161dbf-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-10-16 12:24         ` Sasha Khapyorsky [this message]
2009-10-16 13:28           ` Hal Rosenstock

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091016122406.GQ20210@me \
    --to=sashak-smomgflxvozwk0htik3j/w@public.gmane.org \
    --cc=hal.rosenstock-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox