Acquire the adapter lock before updating fields of the filter structure.

Submitted by:	gnn (different version)
MFC after:	3 days
This commit is contained in:
np 2012-02-07 09:39:46 +00:00
parent 489adb600f
commit c8229e85eb

View File

@ -4839,22 +4839,22 @@ filter_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m)
unsigned int rc = G_COOKIE(rpl->cookie);
struct filter_entry *f = &sc->tids.ftid_tab[idx];
ADAPTER_LOCK(sc);
if (rc == FW_FILTER_WR_FLT_ADDED) {
f->smtidx = (be64toh(rpl->oldval) >> 24) & 0xff;
f->pending = 0; /* asynchronous setup completed */
f->valid = 1;
return (0);
}
} else {
if (rc != FW_FILTER_WR_FLT_DELETED) {
/* Add or delete failed, display an error */
log(LOG_ERR,
"filter %u setup failed with error %u\n",
idx, rc);
}
if (rc != FW_FILTER_WR_FLT_DELETED) {
/* Add or delete failed, need to display an error */
device_printf(sc->dev,
"filter %u setup failed with error %u\n", idx, rc);
clear_filter(f);
sc->tids.ftids_in_use--;
}
clear_filter(f);
ADAPTER_LOCK(sc);
sc->tids.ftids_in_use--;
ADAPTER_UNLOCK(sc);
}