diff options
| author | Eric W. Biederman <ebiederm@xmission.com> | 2014-03-15 21:22:47 -0400 |
|---|---|---|
| committer | Eric W. Biederman <ebiederm@xmission.com> | 2014-03-25 00:19:21 -0400 |
| commit | 4b3afc6e386bdacbce8326afcf8040a632050d3a (patch) | |
| tree | d3a0a401b2f3d58e201fc859c2510f28c2a383b2 /drivers/net/ethernet/via | |
| parent | 20eca054e9d90db3d6181e35d7425dfb79d5cd00 (diff) | |
via-rhine: Call dev_kfree/consume_skb_any instead of dev_kfree_skb.
Replace dev_kfree_skb with dev_kfree_skb_any in rhine_start_tx which
can be called in hard irq and other contexts. Packets are only freed
in rhine_start_tx if they are dropped.
Replace dev_kfree_skb with dev_consume_skb_any in rhine_tx that can be
called in hard irq and other contexts. rhine_tx handles successfully
transmitted packets.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'drivers/net/ethernet/via')
| -rw-r--r-- | drivers/net/ethernet/via/via-rhine.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c index 9d93fa120578..ce2e4d14ab31 100644 --- a/drivers/net/ethernet/via/via-rhine.c +++ b/drivers/net/ethernet/via/via-rhine.c | |||
| @@ -1676,7 +1676,7 @@ static netdev_tx_t rhine_start_tx(struct sk_buff *skb, | |||
| 1676 | /* Must use alignment buffer. */ | 1676 | /* Must use alignment buffer. */ |
| 1677 | if (skb->len > PKT_BUF_SZ) { | 1677 | if (skb->len > PKT_BUF_SZ) { |
| 1678 | /* packet too long, drop it */ | 1678 | /* packet too long, drop it */ |
| 1679 | dev_kfree_skb(skb); | 1679 | dev_kfree_skb_any(skb); |
| 1680 | rp->tx_skbuff[entry] = NULL; | 1680 | rp->tx_skbuff[entry] = NULL; |
| 1681 | dev->stats.tx_dropped++; | 1681 | dev->stats.tx_dropped++; |
| 1682 | return NETDEV_TX_OK; | 1682 | return NETDEV_TX_OK; |
| @@ -1696,7 +1696,7 @@ static netdev_tx_t rhine_start_tx(struct sk_buff *skb, | |||
| 1696 | pci_map_single(rp->pdev, skb->data, skb->len, | 1696 | pci_map_single(rp->pdev, skb->data, skb->len, |
| 1697 | PCI_DMA_TODEVICE); | 1697 | PCI_DMA_TODEVICE); |
| 1698 | if (dma_mapping_error(&rp->pdev->dev, rp->tx_skbuff_dma[entry])) { | 1698 | if (dma_mapping_error(&rp->pdev->dev, rp->tx_skbuff_dma[entry])) { |
| 1699 | dev_kfree_skb(skb); | 1699 | dev_kfree_skb_any(skb); |
| 1700 | rp->tx_skbuff_dma[entry] = 0; | 1700 | rp->tx_skbuff_dma[entry] = 0; |
| 1701 | dev->stats.tx_dropped++; | 1701 | dev->stats.tx_dropped++; |
| 1702 | return NETDEV_TX_OK; | 1702 | return NETDEV_TX_OK; |
| @@ -1834,7 +1834,7 @@ static void rhine_tx(struct net_device *dev) | |||
| 1834 | rp->tx_skbuff[entry]->len, | 1834 | rp->tx_skbuff[entry]->len, |
| 1835 | PCI_DMA_TODEVICE); | 1835 | PCI_DMA_TODEVICE); |
| 1836 | } | 1836 | } |
| 1837 | dev_kfree_skb(rp->tx_skbuff[entry]); | 1837 | dev_consume_skb_any(rp->tx_skbuff[entry]); |
| 1838 | rp->tx_skbuff[entry] = NULL; | 1838 | rp->tx_skbuff[entry] = NULL; |
| 1839 | entry = (++rp->dirty_tx) % TX_RING_SIZE; | 1839 | entry = (++rp->dirty_tx) % TX_RING_SIZE; |
| 1840 | } | 1840 | } |
