diff options
author | David S. Miller <davem@davemloft.net> | 2013-11-11 00:42:07 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-11-11 00:42:07 -0500 |
commit | e267cb960ab790c94a5019272c0e4dac95dc4dba (patch) | |
tree | 483785140f9ad26db0241f2aa22e9cd00b6f6828 /net/8021q/vlan_dev.c | |
parent | 170e85430bcbe4d18e81b5a70bb163c741381092 (diff) |
vlan: Implement vlan_dev_get_egress_qos_mask as an inline.
This is to avoid very silly Kconfig dependencies for modules
using this routine.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/8021q/vlan_dev.c')
-rw-r--r-- | net/8021q/vlan_dev.c | 31 |
1 files changed, 3 insertions, 28 deletions
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 13904a414929..8db1b985dbf1 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
@@ -68,31 +68,6 @@ static int vlan_dev_rebuild_header(struct sk_buff *skb) | |||
68 | return 0; | 68 | return 0; |
69 | } | 69 | } |
70 | 70 | ||
71 | static inline u16 | ||
72 | __vlan_dev_get_egress_qos_mask(struct net_device *dev, u32 skprio) | ||
73 | { | ||
74 | struct vlan_priority_tci_mapping *mp; | ||
75 | |||
76 | smp_rmb(); /* coupled with smp_wmb() in vlan_dev_set_egress_priority() */ | ||
77 | |||
78 | mp = vlan_dev_priv(dev)->egress_priority_map[(skprio & 0xF)]; | ||
79 | while (mp) { | ||
80 | if (mp->priority == skprio) { | ||
81 | return mp->vlan_qos; /* This should already be shifted | ||
82 | * to mask correctly with the | ||
83 | * VLAN's TCI */ | ||
84 | } | ||
85 | mp = mp->next; | ||
86 | } | ||
87 | return 0; | ||
88 | } | ||
89 | |||
90 | u16 vlan_dev_get_egress_qos_mask(struct net_device *dev, u32 skprio) | ||
91 | { | ||
92 | return __vlan_dev_get_egress_qos_mask(dev, skprio); | ||
93 | } | ||
94 | EXPORT_SYMBOL(vlan_dev_get_egress_qos_mask); | ||
95 | |||
96 | /* | 71 | /* |
97 | * Create the VLAN header for an arbitrary protocol layer | 72 | * Create the VLAN header for an arbitrary protocol layer |
98 | * | 73 | * |
@@ -117,7 +92,7 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, | |||
117 | vhdr = (struct vlan_hdr *) skb_push(skb, VLAN_HLEN); | 92 | vhdr = (struct vlan_hdr *) skb_push(skb, VLAN_HLEN); |
118 | 93 | ||
119 | vlan_tci = vlan->vlan_id; | 94 | vlan_tci = vlan->vlan_id; |
120 | vlan_tci |= __vlan_dev_get_egress_qos_mask(dev, skb->priority); | 95 | vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb->priority); |
121 | vhdr->h_vlan_TCI = htons(vlan_tci); | 96 | vhdr->h_vlan_TCI = htons(vlan_tci); |
122 | 97 | ||
123 | /* | 98 | /* |
@@ -174,7 +149,7 @@ static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb, | |||
174 | vlan->flags & VLAN_FLAG_REORDER_HDR) { | 149 | vlan->flags & VLAN_FLAG_REORDER_HDR) { |
175 | u16 vlan_tci; | 150 | u16 vlan_tci; |
176 | vlan_tci = vlan->vlan_id; | 151 | vlan_tci = vlan->vlan_id; |
177 | vlan_tci |= __vlan_dev_get_egress_qos_mask(dev, skb->priority); | 152 | vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb->priority); |
178 | skb = __vlan_hwaccel_put_tag(skb, vlan->vlan_proto, vlan_tci); | 153 | skb = __vlan_hwaccel_put_tag(skb, vlan->vlan_proto, vlan_tci); |
179 | } | 154 | } |
180 | 155 | ||
@@ -259,7 +234,7 @@ int vlan_dev_set_egress_priority(const struct net_device *dev, | |||
259 | np->vlan_qos = vlan_qos; | 234 | np->vlan_qos = vlan_qos; |
260 | /* Before inserting this element in hash table, make sure all its fields | 235 | /* Before inserting this element in hash table, make sure all its fields |
261 | * are committed to memory. | 236 | * are committed to memory. |
262 | * coupled with smp_rmb() in __vlan_dev_get_egress_qos_mask() | 237 | * coupled with smp_rmb() in vlan_dev_get_egress_qos_mask() |
263 | */ | 238 | */ |
264 | smp_wmb(); | 239 | smp_wmb(); |
265 | vlan->egress_priority_map[skb_prio & 0xF] = np; | 240 | vlan->egress_priority_map[skb_prio & 0xF] = np; |