|
@@ -1779,6 +1779,7 @@ static int e100_tx_clean(struct nic *nic)
|
|
for (cb = nic->cb_to_clean;
|
|
for (cb = nic->cb_to_clean;
|
|
cb->status & cpu_to_le16(cb_complete);
|
|
cb->status & cpu_to_le16(cb_complete);
|
|
cb = nic->cb_to_clean = cb->next) {
|
|
cb = nic->cb_to_clean = cb->next) {
|
|
|
|
+ rmb(); /* read skb after status */
|
|
netif_printk(nic, tx_done, KERN_DEBUG, nic->netdev,
|
|
netif_printk(nic, tx_done, KERN_DEBUG, nic->netdev,
|
|
"cb[%d]->status = 0x%04X\n",
|
|
"cb[%d]->status = 0x%04X\n",
|
|
(int)(((void*)cb - (void*)nic->cbs)/sizeof(struct cb)),
|
|
(int)(((void*)cb - (void*)nic->cbs)/sizeof(struct cb)),
|
|
@@ -1927,6 +1928,7 @@ static int e100_rx_indicate(struct nic *nic, struct rx *rx,
|
|
|
|
|
|
netif_printk(nic, rx_status, KERN_DEBUG, nic->netdev,
|
|
netif_printk(nic, rx_status, KERN_DEBUG, nic->netdev,
|
|
"status=0x%04X\n", rfd_status);
|
|
"status=0x%04X\n", rfd_status);
|
|
|
|
+ rmb(); /* read size after status bit */
|
|
|
|
|
|
/* If data isn't ready, nothing to indicate */
|
|
/* If data isn't ready, nothing to indicate */
|
|
if (unlikely(!(rfd_status & cb_complete))) {
|
|
if (unlikely(!(rfd_status & cb_complete))) {
|