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

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
...@@ -1596,7 +1596,7 @@ typhoon_recycle_rx_skb(struct typhoon *tp, u32 idx) ...@@ -1596,7 +1596,7 @@ typhoon_recycle_rx_skb(struct typhoon *tp, u32 idx)
struct rx_free *r; struct rx_free *r;
if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*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 /* no room in ring, just drop the skb
*/ */
dev_kfree_skb_any(rxb->skb); dev_kfree_skb_any(rxb->skb);
...@@ -1627,7 +1627,7 @@ typhoon_alloc_rx_skb(struct typhoon *tp, u32 idx) ...@@ -1627,7 +1627,7 @@ typhoon_alloc_rx_skb(struct typhoon *tp, u32 idx)
rxb->skb = NULL; rxb->skb = NULL;
if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*r)) == if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*r)) ==
indexes->rxBuffCleared) le32_to_cpu(indexes->rxBuffCleared))
return -ENOMEM; return -ENOMEM;
skb = dev_alloc_skb(PKT_BUF_SZ); skb = dev_alloc_skb(PKT_BUF_SZ);
......
...@@ -73,7 +73,7 @@ struct typhoon_indexes { ...@@ -73,7 +73,7 @@ struct typhoon_indexes {
volatile __le32 txLoCleared; volatile __le32 txLoCleared;
volatile __le32 txHiCleared; volatile __le32 txHiCleared;
volatile __le32 rxLoReady; volatile __le32 rxLoReady;
volatile __u32 rxBuffCleared; /* AV: really? */ volatile __le32 rxBuffCleared;
volatile __le32 cmdCleared; volatile __le32 cmdCleared;
volatile __le32 respReady; volatile __le32 respReady;
volatile __le32 rxHiReady; volatile __le32 rxHiReady;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment