[openib-general] [PATCH] Encapsulate finding of id in sa_query.c

Krishna Kumar krkumar at us.ibm.com
Mon Nov 8 10:50:44 PST 2004


On Fri, 5 Nov 2004, Roland Dreier wrote:

> Thanks but I'm not going to apply this.  I prefer to have the locking
> and the idr lookup be explicit (and it's only done in two places so
> the cleanup is pretty minimal).

Actually three places ... And IMO, it does make the locking code look
cleaner, eg, the original code (with multiple unlocks) :

void ib_sa_cancel_query(int id, struct ib_sa_query *query)
{
        unsigned long flags;

        spin_lock_irqsave(&idr_lock, flags);
        if (idr_find(&query_idr, query->id) != query) {
                spin_unlock_irqrestore(&idr_lock, flags);
                return;
        }
        spin_unlock_irqrestore(&idr_lock, flags);

        ib_cancel_mad(query->port->agent, query->id);
}

now becomes :

void ib_sa_cancel_query(int id, struct ib_sa_query *query)
{
        if (ib_sa_find_idr(id) == query)
                ib_cancel_mad(query->port->agent, query->id);
}

with the find:

static inline struct ib_sa_query *ib_sa_find_idr(int id)
{
        struct ib_sa_query      *query
        unsigned long           flags;

        spin_lock_irqsave(&idr_lock, flags);
        query = idr_find(&query_idr, id);
        spin_unlock_irqrestore(&idr_lock, flags);
        return query;
}

thx,

- KK




More information about the general mailing list