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

Commit 8a5ed9ef authored by Al Viro's avatar Al Viro Committed by Jeff Garzik
Browse files

typhoon: missed rx overruns on big-endian



rxBuffCleared is little-endian; we miss le32_to_cpu() in checks for
rx ring overruns.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent b46281f9
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1596,7 +1596,7 @@ typhoon_recycle_rx_skb(struct typhoon *tp, u32 idx)
	struct rx_free *r;

	if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*r)) ==
				indexes->rxBuffCleared) {
				le32_to_cpu(indexes->rxBuffCleared)) {
		/* no room in ring, just drop the skb
		 */
		dev_kfree_skb_any(rxb->skb);
@@ -1627,7 +1627,7 @@ typhoon_alloc_rx_skb(struct typhoon *tp, u32 idx)
	rxb->skb = NULL;

	if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*r)) ==
				indexes->rxBuffCleared)
				le32_to_cpu(indexes->rxBuffCleared))
		return -ENOMEM;

	skb = dev_alloc_skb(PKT_BUF_SZ);
+1 −1
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ struct typhoon_indexes {
	volatile __le32 txLoCleared;
	volatile __le32 txHiCleared;
	volatile __le32 rxLoReady;
	volatile __u32 rxBuffCleared;	/* AV: really? */
	volatile __le32 rxBuffCleared;
	volatile __le32 cmdCleared;
	volatile __le32 respReady;
	volatile __le32 rxHiReady;