Commit 3646ae0d authored by Shahjada Abul Husain's avatar Shahjada Abul Husain Committed by David S. Miller
Browse files

cxgb4: fix missed high priority region calculation



commit c2193999 ("cxgb4: add support for high priority filters")
has missed considering high priority region calculation in some code
paths. This patch fixes them.

Fixes: c2193999 ("cxgb4: add support for high priority filters")
Signed-off-by: default avatarShahjada Abul Husain <shahjada@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8ae67496
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -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;
+2 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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);