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>
This commit is contained in:
parent
b46281f9c5
commit
8a5ed9efe6
|
@ -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)
|
||||||
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 {
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue