mirror of https://gitee.com/openkylin/linux.git
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;
|
||||
|
||||
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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue