diff options
author | Patrick Ohly <patrick.ohly@intel.com> | 2009-02-21 02:42:18 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-02-21 02:42:18 -0800 |
commit | cd4d8fdad1f13205c769266dfa99015e226b6e07 (patch) | |
tree | 23861c718a558e457971cca009c3ac944f90891e /net/core | |
parent | be0c22a46cfb79ab2342bb28fde99afa94ef868e (diff) | |
download | linux-3.10-cd4d8fdad1f13205c769266dfa99015e226b6e07.tar.gz linux-3.10-cd4d8fdad1f13205c769266dfa99015e226b6e07.tar.bz2 linux-3.10-cd4d8fdad1f13205c769266dfa99015e226b6e07.zip |
net: kernel panic in dev_hard_start_xmit: remove faulty software TX time stamping
The current implementation of the TX software time stamping fallback is
faulty because it accesses the skb after ndo_start_xmit() returns
successfully. This patch removes the fallback, which fixes kernel panics
seen during stress tests. Hardware time stamping is not affected by this
removal.
Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 13 |
1 files changed, 0 insertions, 13 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 5493394118f..88dc082b47d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1672,16 +1672,6 @@ static int dev_gso_segment(struct sk_buff *skb) return 0; } -static void tstamp_tx(struct sk_buff *skb) -{ - union skb_shared_tx *shtx = - skb_tx(skb); - if (unlikely(shtx->software && - !shtx->in_progress)) { - skb_tstamp_tx(skb, NULL); - } -} - int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, struct netdev_queue *txq) { @@ -1715,8 +1705,6 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev, * the skb destructor before the call and restoring it * afterwards, then doing the skb_orphan() ourselves? */ - if (likely(!rc)) - tstamp_tx(skb); return rc; } @@ -1732,7 +1720,6 @@ gso: skb->next = nskb; return rc; } - tstamp_tx(skb); if (unlikely(netif_tx_queue_stopped(txq) && skb->next)) return NETDEV_TX_BUSY; } while (skb->next); |