Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d53fa12 authored by Matt Carlson's avatar Matt Carlson Committed by David S. Miller
Browse files

tg3: Fix RSS indirection table distribution



The current RSS indirection table is populated such that more traffic
will hit the first RSS ring.  This patch adjusts the indirection table
so that the load is more evenly distributed.

Signed-off-by: default avatarMatt Carlson <mcarlson@broadcom.com>
Reviewed-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5baa5e9a
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -8723,15 +8723,24 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
	udelay(100);

	if (tg3_flag(tp, ENABLE_RSS)) {
		int i = 0;
		u32 reg = MAC_RSS_INDIR_TBL_0;
		u8 *ent = (u8 *)&val;

		/* Setup the indirection table */
		for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i++) {
			int idx = i % sizeof(val);
		if (tp->irq_cnt == 2) {
			for (i = 0; i < TG3_RSS_INDIR_TBL_SIZE; i += 8) {
				tw32(reg, 0x0);
				reg += 4;
			}
		} else {
			u32 val;

			ent[idx] = i % (tp->irq_cnt - 1);
			if (idx == sizeof(val) - 1) {
			while (i < TG3_RSS_INDIR_TBL_SIZE) {
				val = i % (tp->irq_cnt - 1);
				i++;
				for (; i % 8; i++) {
					val <<= 4;
					val |= (i % (tp->irq_cnt - 1));
				}
				tw32(reg, val);
				reg += 4;
			}