|
@@ -3012,7 +3012,8 @@ int cxgb4_alloc_sftid(struct tid_info *t, int family, void *data)
|
|
|
}
|
|
|
if (stid >= 0) {
|
|
|
t->stid_tab[stid].data = data;
|
|
|
- stid += t->stid_base;
|
|
|
+ stid -= t->nstids;
|
|
|
+ stid += t->sftid_base;
|
|
|
t->stids_in_use++;
|
|
|
}
|
|
|
spin_unlock_bh(&t->stid_lock);
|
|
@@ -3024,7 +3025,14 @@ EXPORT_SYMBOL(cxgb4_alloc_sftid);
|
|
|
*/
|
|
|
void cxgb4_free_stid(struct tid_info *t, unsigned int stid, int family)
|
|
|
{
|
|
|
- stid -= t->stid_base;
|
|
|
+ /* Is it a server filter TID? */
|
|
|
+ if (t->nsftids && (stid >= t->sftid_base)) {
|
|
|
+ stid -= t->sftid_base;
|
|
|
+ stid += t->nstids;
|
|
|
+ } else {
|
|
|
+ stid -= t->stid_base;
|
|
|
+ }
|
|
|
+
|
|
|
spin_lock_bh(&t->stid_lock);
|
|
|
if (family == PF_INET)
|
|
|
__clear_bit(stid, t->stid_bmap);
|
|
@@ -4185,7 +4193,7 @@ int cxgb4_create_server_filter(const struct net_device *dev, unsigned int stid,
|
|
|
adap = netdev2adap(dev);
|
|
|
|
|
|
/* Adjust stid to correct filter index */
|
|
|
- stid -= adap->tids.nstids;
|
|
|
+ stid -= adap->tids.sftid_base;
|
|
|
stid += adap->tids.nftids;
|
|
|
|
|
|
/* Check to make sure the filter requested is writable ...
|
|
@@ -4248,7 +4256,7 @@ int cxgb4_remove_server_filter(const struct net_device *dev, unsigned int stid,
|
|
|
adap = netdev2adap(dev);
|
|
|
|
|
|
/* Adjust stid to correct filter index */
|
|
|
- stid -= adap->tids.nstids;
|
|
|
+ stid -= adap->tids.sftid_base;
|
|
|
stid += adap->tids.nftids;
|
|
|
|
|
|
f = &adap->tids.ftid_tab[stid];
|