Message ID | 20201002024215.660240-4-f.fainelli@gmail.com |
---|---|
State | New |
Headers | show |
Series | net: dsa: Improve dsa_untag_bridge_pvid() | expand |
On Thu, Oct 01, 2020 at 07:42:14PM -0700, Florian Fainelli wrote: > Now that dsa_untag_bridge_pvid() is called after eth_type_trans() we are > guaranteed that skb->protocol will be set to a correct value, thus > allowing us to avoid calling vlan_eth_hdr(). > > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > --- Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> > net/dsa/dsa_priv.h | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h > index 0348dbab4131..d6ce8c2a2590 100644 > --- a/net/dsa/dsa_priv.h > +++ b/net/dsa/dsa_priv.h > @@ -201,7 +201,6 @@ dsa_slave_to_master(const struct net_device *dev) > static inline struct sk_buff *dsa_untag_bridge_pvid(struct sk_buff *skb) > { > struct dsa_port *dp = dsa_slave_to_port(skb->dev); > - struct vlan_ethhdr *hdr = vlan_eth_hdr(skb); > struct net_device *br = dp->bridge_dev; > struct net_device *dev = skb->dev; > struct net_device *upper_dev; > @@ -217,7 +216,7 @@ static inline struct sk_buff *dsa_untag_bridge_pvid(struct sk_buff *skb) > return skb; > > /* Move VLAN tag from data to hwaccel */ > - if (!skb_vlan_tag_present(skb) && hdr->h_vlan_proto == htons(proto)) { > + if (!skb_vlan_tag_present(skb) && skb->protocol == htons(proto)) { > skb = skb_vlan_untag(skb); > if (!skb) > return NULL; > -- > 2.25.1 >
diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h index 0348dbab4131..d6ce8c2a2590 100644 --- a/net/dsa/dsa_priv.h +++ b/net/dsa/dsa_priv.h @@ -201,7 +201,6 @@ dsa_slave_to_master(const struct net_device *dev) static inline struct sk_buff *dsa_untag_bridge_pvid(struct sk_buff *skb) { struct dsa_port *dp = dsa_slave_to_port(skb->dev); - struct vlan_ethhdr *hdr = vlan_eth_hdr(skb); struct net_device *br = dp->bridge_dev; struct net_device *dev = skb->dev; struct net_device *upper_dev; @@ -217,7 +216,7 @@ static inline struct sk_buff *dsa_untag_bridge_pvid(struct sk_buff *skb) return skb; /* Move VLAN tag from data to hwaccel */ - if (!skb_vlan_tag_present(skb) && hdr->h_vlan_proto == htons(proto)) { + if (!skb_vlan_tag_present(skb) && skb->protocol == htons(proto)) { skb = skb_vlan_untag(skb); if (!skb) return NULL;
Now that dsa_untag_bridge_pvid() is called after eth_type_trans() we are guaranteed that skb->protocol will be set to a correct value, thus allowing us to avoid calling vlan_eth_hdr(). Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- net/dsa/dsa_priv.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)