It seems that cma_detach_from_dev():

 > +static void cma_detach_from_dev(struct rdma_id_private *id_priv)
 > +{
 > +    list_del(&id_priv->list);
 > +    if (atomic_dec_and_test(&id_priv->cma_dev->refcount))
 > +            wake_up(&id_priv->cma_dev->wait);
 > +    id_priv->cma_dev = NULL;
 > +}

doesn't need to do atomic_dec_and_test(), because it is never dropping
the last reference to id_priv (and in fact if it was, the last line
would be a use-after-free bug).

Does it make sense to replace it with:

        static void cma_detach_from_dev(struct rdma_id_private *id_priv)
        {
                list_del(&id_priv->list);
                /*
                 * cma_detach_from_dev() will never be dropping the last
                 * reference to id_priv, so no need to test here.
                 */
                atomic_dec(&id_priv->cma_dev->refcount);
                id_priv->cma_dev = NULL;
        }

on my x86_64 build that's worth

        add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-40 (-40)
        function                                     old     new   delta
        cma_detach_from_dev                          106      66     -40

 - R.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to