diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2010-11-10 18:42:00 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-11-16 14:15:08 -0500 |
commit | 4af429d29b341bb1735f04c2fb960178ed5d52e7 (patch) | |
tree | b5179224883dc56cde57058014480e4bcf22b75b /net/8021q/vlan.h | |
parent | 8ffab51b3dfc54876f145f15b351c41f3f703195 (diff) |
vlan: lockless transmit path
vlan is a stacked device, like tunnels. We should use the lockless
mechanism we are using in tunnels and loopback.
This patch completely removes locking in TX path.
tx stat counters are added into existing percpu stat structure, renamed
from vlan_rx_stats to vlan_pcpu_stats.
Note : this partially reverts commit 2e59af3dcbdf (vlan: multiqueue vlan
device)
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/8021q/vlan.h')
-rw-r--r-- | net/8021q/vlan.h | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h index 4625ba64dfdc..5687c9b95f33 100644 --- a/net/8021q/vlan.h +++ b/net/8021q/vlan.h | |||
@@ -19,19 +19,25 @@ struct vlan_priority_tci_mapping { | |||
19 | 19 | ||
20 | 20 | ||
21 | /** | 21 | /** |
22 | * struct vlan_rx_stats - VLAN percpu rx stats | 22 | * struct vlan_pcpu_stats - VLAN percpu rx/tx stats |
23 | * @rx_packets: number of received packets | 23 | * @rx_packets: number of received packets |
24 | * @rx_bytes: number of received bytes | 24 | * @rx_bytes: number of received bytes |
25 | * @rx_multicast: number of received multicast packets | 25 | * @rx_multicast: number of received multicast packets |
26 | * @tx_packets: number of transmitted packets | ||
27 | * @tx_bytes: number of transmitted bytes | ||
26 | * @syncp: synchronization point for 64bit counters | 28 | * @syncp: synchronization point for 64bit counters |
27 | * @rx_errors: number of errors | 29 | * @rx_errors: number of rx errors |
30 | * @tx_dropped: number of tx drops | ||
28 | */ | 31 | */ |
29 | struct vlan_rx_stats { | 32 | struct vlan_pcpu_stats { |
30 | u64 rx_packets; | 33 | u64 rx_packets; |
31 | u64 rx_bytes; | 34 | u64 rx_bytes; |
32 | u64 rx_multicast; | 35 | u64 rx_multicast; |
36 | u64 tx_packets; | ||
37 | u64 tx_bytes; | ||
33 | struct u64_stats_sync syncp; | 38 | struct u64_stats_sync syncp; |
34 | unsigned long rx_errors; | 39 | u32 rx_errors; |
40 | u32 tx_dropped; | ||
35 | }; | 41 | }; |
36 | 42 | ||
37 | /** | 43 | /** |
@@ -45,7 +51,7 @@ struct vlan_rx_stats { | |||
45 | * @real_dev: underlying netdevice | 51 | * @real_dev: underlying netdevice |
46 | * @real_dev_addr: address of underlying netdevice | 52 | * @real_dev_addr: address of underlying netdevice |
47 | * @dent: proc dir entry | 53 | * @dent: proc dir entry |
48 | * @vlan_rx_stats: ptr to percpu rx stats | 54 | * @vlan_pcpu_stats: ptr to percpu rx stats |
49 | */ | 55 | */ |
50 | struct vlan_dev_info { | 56 | struct vlan_dev_info { |
51 | unsigned int nr_ingress_mappings; | 57 | unsigned int nr_ingress_mappings; |
@@ -60,7 +66,7 @@ struct vlan_dev_info { | |||
60 | unsigned char real_dev_addr[ETH_ALEN]; | 66 | unsigned char real_dev_addr[ETH_ALEN]; |
61 | 67 | ||
62 | struct proc_dir_entry *dent; | 68 | struct proc_dir_entry *dent; |
63 | struct vlan_rx_stats __percpu *vlan_rx_stats; | 69 | struct vlan_pcpu_stats __percpu *vlan_pcpu_stats; |
64 | }; | 70 | }; |
65 | 71 | ||
66 | static inline struct vlan_dev_info *vlan_dev_info(const struct net_device *dev) | 72 | static inline struct vlan_dev_info *vlan_dev_info(const struct net_device *dev) |