diff options
-rw-r--r-- | drivers/net/ethernet/sis/sis900.c | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/drivers/net/ethernet/sis/sis900.c b/drivers/net/ethernet/sis/sis900.c index e45829628d5f..eb4aea3fe793 100644 --- a/drivers/net/ethernet/sis/sis900.c +++ b/drivers/net/ethernet/sis/sis900.c | |||
@@ -1187,8 +1187,14 @@ sis900_init_rx_ring(struct net_device *net_dev) | |||
1187 | } | 1187 | } |
1188 | sis_priv->rx_skbuff[i] = skb; | 1188 | sis_priv->rx_skbuff[i] = skb; |
1189 | sis_priv->rx_ring[i].cmdsts = RX_BUF_SIZE; | 1189 | sis_priv->rx_ring[i].cmdsts = RX_BUF_SIZE; |
1190 | sis_priv->rx_ring[i].bufptr = pci_map_single(sis_priv->pci_dev, | 1190 | sis_priv->rx_ring[i].bufptr = pci_map_single(sis_priv->pci_dev, |
1191 | skb->data, RX_BUF_SIZE, PCI_DMA_FROMDEVICE); | 1191 | skb->data, RX_BUF_SIZE, PCI_DMA_FROMDEVICE); |
1192 | if (unlikely(pci_dma_mapping_error(sis_priv->pci_dev, | ||
1193 | sis_priv->rx_ring[i].bufptr))) { | ||
1194 | dev_kfree_skb(skb); | ||
1195 | sis_priv->rx_skbuff[i] = NULL; | ||
1196 | break; | ||
1197 | } | ||
1192 | } | 1198 | } |
1193 | sis_priv->dirty_rx = (unsigned int) (i - NUM_RX_DESC); | 1199 | sis_priv->dirty_rx = (unsigned int) (i - NUM_RX_DESC); |
1194 | 1200 | ||
@@ -1621,6 +1627,14 @@ sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev) | |||
1621 | /* set the transmit buffer descriptor and enable Transmit State Machine */ | 1627 | /* set the transmit buffer descriptor and enable Transmit State Machine */ |
1622 | sis_priv->tx_ring[entry].bufptr = pci_map_single(sis_priv->pci_dev, | 1628 | sis_priv->tx_ring[entry].bufptr = pci_map_single(sis_priv->pci_dev, |
1623 | skb->data, skb->len, PCI_DMA_TODEVICE); | 1629 | skb->data, skb->len, PCI_DMA_TODEVICE); |
1630 | if (unlikely(pci_dma_mapping_error(sis_priv->pci_dev, | ||
1631 | sis_priv->tx_ring[entry].bufptr))) { | ||
1632 | dev_kfree_skb(skb); | ||
1633 | sis_priv->tx_skbuff[entry] = NULL; | ||
1634 | net_dev->stats.tx_dropped++; | ||
1635 | spin_unlock_irqrestore(&sis_priv->lock, flags); | ||
1636 | return NETDEV_TX_OK; | ||
1637 | } | ||
1624 | sis_priv->tx_ring[entry].cmdsts = (OWN | skb->len); | 1638 | sis_priv->tx_ring[entry].cmdsts = (OWN | skb->len); |
1625 | sw32(cr, TxENA | sr32(cr)); | 1639 | sw32(cr, TxENA | sr32(cr)); |
1626 | 1640 | ||
@@ -1824,9 +1838,15 @@ static int sis900_rx(struct net_device *net_dev) | |||
1824 | refill_rx_ring: | 1838 | refill_rx_ring: |
1825 | sis_priv->rx_skbuff[entry] = skb; | 1839 | sis_priv->rx_skbuff[entry] = skb; |
1826 | sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE; | 1840 | sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE; |
1827 | sis_priv->rx_ring[entry].bufptr = | 1841 | sis_priv->rx_ring[entry].bufptr = |
1828 | pci_map_single(sis_priv->pci_dev, skb->data, | 1842 | pci_map_single(sis_priv->pci_dev, skb->data, |
1829 | RX_BUF_SIZE, PCI_DMA_FROMDEVICE); | 1843 | RX_BUF_SIZE, PCI_DMA_FROMDEVICE); |
1844 | if (unlikely(pci_dma_mapping_error(sis_priv->pci_dev, | ||
1845 | sis_priv->rx_ring[entry].bufptr))) { | ||
1846 | dev_kfree_skb_irq(skb); | ||
1847 | sis_priv->rx_skbuff[entry] = NULL; | ||
1848 | break; | ||
1849 | } | ||
1830 | } | 1850 | } |
1831 | sis_priv->cur_rx++; | 1851 | sis_priv->cur_rx++; |
1832 | entry = sis_priv->cur_rx % NUM_RX_DESC; | 1852 | entry = sis_priv->cur_rx % NUM_RX_DESC; |
@@ -1852,9 +1872,15 @@ refill_rx_ring: | |||
1852 | } | 1872 | } |
1853 | sis_priv->rx_skbuff[entry] = skb; | 1873 | sis_priv->rx_skbuff[entry] = skb; |
1854 | sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE; | 1874 | sis_priv->rx_ring[entry].cmdsts = RX_BUF_SIZE; |
1855 | sis_priv->rx_ring[entry].bufptr = | 1875 | sis_priv->rx_ring[entry].bufptr = |
1856 | pci_map_single(sis_priv->pci_dev, skb->data, | 1876 | pci_map_single(sis_priv->pci_dev, skb->data, |
1857 | RX_BUF_SIZE, PCI_DMA_FROMDEVICE); | 1877 | RX_BUF_SIZE, PCI_DMA_FROMDEVICE); |
1878 | if (unlikely(pci_dma_mapping_error(sis_priv->pci_dev, | ||
1879 | sis_priv->rx_ring[entry].bufptr))) { | ||
1880 | dev_kfree_skb_irq(skb); | ||
1881 | sis_priv->rx_skbuff[entry] = NULL; | ||
1882 | break; | ||
1883 | } | ||
1858 | } | 1884 | } |
1859 | } | 1885 | } |
1860 | /* re-enable the potentially idle receive state matchine */ | 1886 | /* re-enable the potentially idle receive state matchine */ |