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

Commit 6a2fe983 authored by Phil Sutter's avatar Phil Sutter Committed by David S. Miller
Browse files

korina: fix loop back of receive descriptors



After the last loop iteration, i has the value RC32434_NUM_RDS and
therefore leads to an index overflow when used afterwards to address the
last element. This is yet another another bug introduced when rewriting
parts of the driver for upstream preparation, as the original driver
used 'RC32434_NUM_RDS - 1' instead.

Signed-off-by: default avatarPhil Sutter <n0-1@freewrt.org>
Acked-by: default avatarFlorian Fainelli <florian@openwrt.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent eed087e3
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -769,11 +769,12 @@ static void korina_alloc_ring(struct net_device *dev)
		lp->rd_ring[i].link = CPHYSADDR(&lp->rd_ring[i+1]);
	}

	/* loop back */
	lp->rd_ring[i].link = CPHYSADDR(&lp->rd_ring[0]);
	lp->rx_next_done  = 0;
	/* loop back receive descriptors, so the last
	 * descriptor points to the first one */
	lp->rd_ring[i - 1].link = CPHYSADDR(&lp->rd_ring[0]);
	lp->rd_ring[i - 1].control |= DMA_DESC_COD;

	lp->rd_ring[i].control |= DMA_DESC_COD;
	lp->rx_next_done  = 0;
	lp->rx_chain_head = 0;
	lp->rx_chain_tail = 0;
	lp->rx_chain_status = desc_empty;