mirror of https://gitee.com/openkylin/linux.git
cxgb4: fix missed high priority region calculation
commitc219399988
("cxgb4: add support for high priority filters") has missed considering high priority region calculation in some code paths. This patch fixes them. Fixes:c219399988
("cxgb4: add support for high priority filters") Signed-off-by: Shahjada Abul Husain <shahjada@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8ae674964e
commit
3646ae0de9
|
@ -369,12 +369,16 @@ static int get_filter_count(struct adapter *adapter, unsigned int fidx,
|
|||
return -E2BIG;
|
||||
}
|
||||
} else {
|
||||
if ((fidx != (adapter->tids.nftids +
|
||||
adapter->tids.nsftids - 1)) &&
|
||||
fidx >= adapter->tids.nftids)
|
||||
if ((fidx != (adapter->tids.nftids + adapter->tids.nsftids +
|
||||
adapter->tids.nhpftids - 1)) &&
|
||||
fidx >= (adapter->tids.nftids + adapter->tids.nhpftids))
|
||||
return -E2BIG;
|
||||
|
||||
f = &adapter->tids.ftid_tab[fidx];
|
||||
if (fidx < adapter->tids.nhpftids)
|
||||
f = &adapter->tids.hpftid_tab[fidx];
|
||||
else
|
||||
f = &adapter->tids.ftid_tab[fidx -
|
||||
adapter->tids.nhpftids];
|
||||
if (!f->valid)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -480,6 +484,7 @@ int cxgb4_get_free_ftid(struct net_device *dev, int family)
|
|||
ftid -= n;
|
||||
}
|
||||
spin_unlock_bh(&t->ftid_lock);
|
||||
ftid += t->nhpftids;
|
||||
|
||||
return found ? ftid : -ENOMEM;
|
||||
}
|
||||
|
@ -815,10 +820,14 @@ int delete_filter(struct adapter *adapter, unsigned int fidx)
|
|||
struct filter_entry *f;
|
||||
int ret;
|
||||
|
||||
if (fidx >= adapter->tids.nftids + adapter->tids.nsftids)
|
||||
if (fidx >= adapter->tids.nftids + adapter->tids.nsftids +
|
||||
adapter->tids.nhpftids)
|
||||
return -EINVAL;
|
||||
|
||||
f = &adapter->tids.ftid_tab[fidx];
|
||||
if (fidx < adapter->tids.nhpftids)
|
||||
f = &adapter->tids.hpftid_tab[fidx];
|
||||
else
|
||||
f = &adapter->tids.ftid_tab[fidx - adapter->tids.nhpftids];
|
||||
ret = writable_filter(f);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
|
@ -672,7 +672,8 @@ int cxgb4_tc_flower_replace(struct net_device *dev,
|
|||
* 0 to driver. However, the hardware TCAM index
|
||||
* starts from 0. Hence, the -1 here.
|
||||
*/
|
||||
if (cls->common.prio <= adap->tids.nftids) {
|
||||
if (cls->common.prio <= (adap->tids.nftids +
|
||||
adap->tids.nhpftids)) {
|
||||
fidx = cls->common.prio - 1;
|
||||
if (fidx < adap->tids.nhpftids)
|
||||
fs->prio = 1;
|
||||
|
|
|
@ -137,7 +137,7 @@ static int cxgb4_matchall_alloc_filter(struct net_device *dev,
|
|||
* -1 here. 1 slot is enough to create a wildcard matchall
|
||||
* VIID rule.
|
||||
*/
|
||||
if (cls->common.prio <= adap->tids.nftids)
|
||||
if (cls->common.prio <= (adap->tids.nftids + adap->tids.nhpftids))
|
||||
fidx = cls->common.prio - 1;
|
||||
else
|
||||
fidx = cxgb4_get_free_ftid(dev, PF_INET);
|
||||
|
|
Loading…
Reference in New Issue