2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-05-05 16:16:16 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-09-26 22:10:56 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-10-18 20:51:57 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-04-17 22:03:10 +00:00
|
|
|
|
2006-10-18 20:51:57 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-31 19:50:58 +00:00
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-09-26 22:08:12 -07:00
|
|
|
|
2009-04-17 22:03:10 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-04-17 22:03:10 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-09-27 17:09:39 -07:00
|
|
|
|
2008-07-15 02:58:39 -07:00
|
|
|
|
2009-10-03 19:48:22 +09:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2009-04-17 22:03:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2009-06-23 06:03:08 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2008-11-19 21:46:18 -08:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-09-26 22:08:12 -07:00
|
|
|
|
2007-04-10 13:25:40 -07:00
|
|
|
|
2006-10-18 20:51:57 -07:00
|
|
|
|
|
|
|
|
|
2009-04-17 22:03:10 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2008-07-15 02:58:39 -07:00
|
|
|
|
2006-03-28 01:56:37 -08:00
|
|
|
|
2006-10-18 20:51:57 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-09-26 22:08:12 -07:00
|
|
|
|
2006-10-18 20:51:57 -07:00
|
|
|
|
|
|
|
|
|
2009-04-17 22:03:10 +00:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-10-18 20:51:57 -07:00
|
|
|
|
|
|
|
|
|
2009-04-17 22:03:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-09-27 20:33:34 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-09-13 14:30:00 -04:00
|
|
|
|
2006-09-27 20:33:34 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2006-09-27 20:33:34 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
|
|
|
|
|
2007-09-26 22:08:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-07-15 02:58:39 -07:00
|
|
|
|
2007-09-26 22:08:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-07-15 02:58:39 -07:00
|
|
|
|
2007-09-26 22:08:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-11-19 21:46:18 -08:00
|
|
|
|
|
|
|
|
|
2008-11-20 20:14:53 -08:00
|
|
|
|
2008-11-19 21:46:18 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2006-09-27 20:33:34 -07:00
|
|
|
|
2007-09-27 17:09:39 -07:00
|
|
|
|
|
|
|
|
|
2006-09-27 20:33:34 -07:00
|
|
|
|
2007-09-25 19:18:04 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
net: release dst entry in dev_hard_start_xmit()
One point of contention in high network loads is the dst_release() performed
when a transmited skb is freed. This is because NIC tx completion calls
dev_kree_skb() long after original call to dev_queue_xmit(skb).
CPU cache is cold and the atomic op in dst_release() stalls. On SMP, this is
quite visible if one CPU is 100% handling softirqs for a network device,
since dst_clone() is done by other cpus, involving cache line ping pongs.
It seems right place to release dst is in dev_hard_start_xmit(), for most
devices but ones that are virtual, and some exceptions.
David Miller suggested to define a new device flag, set in alloc_netdev_mq()
(so that most devices set it at init time), and carefuly unset in devices
which dont want a NULL skb->dst in their ndo_start_xmit().
List of devices that must clear this flag is :
- loopback device, because it calls netif_rx() and quoting Patrick :
"ip_route_input() doesn't accept loopback addresses, so loopback packets
already need to have a dst_entry attached."
- appletalk/ipddp.c : needs skb->dst in its xmit function
- And all devices that call again dev_queue_xmit() from their xmit function
(as some classifiers need skb->dst) : bonding, vlan, macvlan, eql, ifb, hdlc_fr
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-05-18 22:19:19 -07:00
|
|
|
|
2007-09-25 19:18:04 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-12-27 08:17:22 -06:00
|
|
|
|
2007-09-25 19:18:04 -07:00
|
|
|
|
2007-10-09 01:40:57 -07:00
|
|
|
|
2008-11-19 21:46:18 -08:00
|
|
|
|
|
|
|
|
|
2007-09-25 19:18:04 -07:00
|
|
|
|
2007-09-25 19:16:28 -07:00
|
|
|
|
2005-08-18 14:05:18 -07:00
|
|
|
|
2007-10-08 20:38:39 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-09-25 19:18:04 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-07-30 16:37:19 -07:00
|
|
|
|
2008-03-25 21:47:49 +09:00
|
|
|
|
2007-09-25 19:18:04 -07:00
|
|
|
|
2007-07-30 16:37:19 -07:00
|
|
|
|
2007-09-25 19:18:04 -07:00
|
|
|
|
2007-07-30 16:37:19 -07:00
|
|
|
|
2007-09-26 22:10:56 -07:00
|
|
|
|
2007-10-15 12:55:33 -07:00
|
|
|
|
2007-09-25 19:18:04 -07:00
|
|
|
|
2005-04-16 15:20:36 -07:00
|
|
|
|
2007-09-25 19:18:04 -07:00
|
|
|
|
|
|
|
|
|
2007-10-15 12:55:33 -07:00
|
|
|
|
2009-11-25 15:14:13 -08:00
|
|
|
|
2007-10-15 12:55:33 -07:00
|
|
|
|
|
|
|
|
|
2007-09-25 19:18:04 -07:00
|
|
|
|
|
|
|
|
|
2008-11-07 22:54:20 -08:00
|
|
|
|
|
|
|
|
|
2007-09-26 22:10:56 -07:00
|
|
|
|
|
|
|
|
|