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

Commit 12d80ac4 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

net: dnet: fix dnet_poll()



A NAPI poll() handler is supposed to return exactly the budget when/if
napi_complete() has not been called.

It is also supposed to return number of frames that were received, so
that netdev_budget can have a meaning.

Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0c818594
Loading
Loading
Loading
Loading
+5 −13
Original line number Diff line number Diff line
@@ -398,13 +398,8 @@ static int dnet_poll(struct napi_struct *napi, int budget)
		 * break out of while loop if there are no more
		 * packets waiting
		 */
		if (!(dnet_readl(bp, RX_FIFO_WCNT) >> 16)) {
			napi_complete(napi);
			int_enable = dnet_readl(bp, INTR_ENB);
			int_enable |= DNET_INTR_SRC_RX_CMDFIFOAF;
			dnet_writel(bp, int_enable, INTR_ENB);
			return 0;
		}
		if (!(dnet_readl(bp, RX_FIFO_WCNT) >> 16))
			break;

		cmd_word = dnet_readl(bp, RX_LEN_FIFO);
		pkt_len = cmd_word & 0xFFFF;
@@ -433,20 +428,17 @@ static int dnet_poll(struct napi_struct *napi, int budget)
			       "size %u.\n", dev->name, pkt_len);
	}

	budget -= npackets;

	if (npackets < budget) {
		/* We processed all packets available.  Tell NAPI it can
		 * stop polling then re-enable rx interrupts */
		 * stop polling then re-enable rx interrupts.
		 */
		napi_complete(napi);
		int_enable = dnet_readl(bp, INTR_ENB);
		int_enable |= DNET_INTR_SRC_RX_CMDFIFOAF;
		dnet_writel(bp, int_enable, INTR_ENB);
		return 0;
	}

	/* There are still packets waiting */
	return 1;
	return npackets;
}

static irqreturn_t dnet_interrupt(int irq, void *dev_id)