aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@ftp.linux.org.uk>2007-12-21 01:20:53 -0500
committerJeff Garzik <jeff@garzik.org>2007-12-22 22:53:05 -0500
commit8a5ed9efe661dd42bc140e522c2635e0d7b26141 (patch)
tree9f37f414587fa25e4ab34290a67789f67d4dcc02
parentb46281f9c5d6ab7b6e412e83f8c62cecf4ebbdfd (diff)
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: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/net/typhoon.c4
-rw-r--r--drivers/net/typhoon.h2
2 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c
index 16d443b71264..501abe379047 100644
--- a/drivers/net/typhoon.c
+++ b/drivers/net/typhoon.c
@@ -1596,7 +1596,7 @@ typhoon_recycle_rx_skb(struct typhoon *tp, u32 idx)
1596 struct rx_free *r; 1596 struct rx_free *r;
1597 1597
1598 if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*r)) == 1598 if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*r)) ==
1599 indexes->rxBuffCleared) { 1599 le32_to_cpu(indexes->rxBuffCleared)) {
1600 /* no room in ring, just drop the skb 1600 /* no room in ring, just drop the skb
1601 */ 1601 */
1602 dev_kfree_skb_any(rxb->skb); 1602 dev_kfree_skb_any(rxb->skb);
@@ -1627,7 +1627,7 @@ typhoon_alloc_rx_skb(struct typhoon *tp, u32 idx)
1627 rxb->skb = NULL; 1627 rxb->skb = NULL;
1628 1628
1629 if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*r)) == 1629 if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*r)) ==
1630 indexes->rxBuffCleared) 1630 le32_to_cpu(indexes->rxBuffCleared))
1631 return -ENOMEM; 1631 return -ENOMEM;
1632 1632
1633 skb = dev_alloc_skb(PKT_BUF_SZ); 1633 skb = dev_alloc_skb(PKT_BUF_SZ);
diff --git a/drivers/net/typhoon.h b/drivers/net/typhoon.h
index 19df20889b82..a02e09593970 100644
--- a/drivers/net/typhoon.h
+++ b/drivers/net/typhoon.h
@@ -73,7 +73,7 @@ struct typhoon_indexes {
73 volatile __le32 txLoCleared; 73 volatile __le32 txLoCleared;
74 volatile __le32 txHiCleared; 74 volatile __le32 txHiCleared;
75 volatile __le32 rxLoReady; 75 volatile __le32 rxLoReady;
76 volatile __u32 rxBuffCleared; /* AV: really? */ 76 volatile __le32 rxBuffCleared;
77 volatile __le32 cmdCleared; 77 volatile __le32 cmdCleared;
78 volatile __le32 respReady; 78 volatile __le32 respReady;
79 volatile __le32 rxHiReady; 79 volatile __le32 rxHiReady;