aboutsummaryrefslogtreecommitdiffstats
path: root/net/8021q/vlan_dev.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-11-11 00:42:07 -0500
committerDavid S. Miller <davem@davemloft.net>2013-11-11 00:42:07 -0500
commite267cb960ab790c94a5019272c0e4dac95dc4dba (patch)
tree483785140f9ad26db0241f2aa22e9cd00b6f6828 /net/8021q/vlan_dev.c
parent170e85430bcbe4d18e81b5a70bb163c741381092 (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.c31
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
71static 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
90u16 vlan_dev_get_egress_qos_mask(struct net_device *dev, u32 skprio)
91{
92 return __vlan_dev_get_egress_qos_mask(dev, skprio);
93}
94EXPORT_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;