FAILED: patch "[PATCH] net: dsa: tag_mtk: fix 802.1ad VLAN egress" failed to apply to 5.10-stable tree
Subsystems (5)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 9200f515c41f4cbaeffd8fdd1d8b6373a18b1b67 Mon Sep 17 00:00:00 2001
From: DENG Qingfang <[email protected]>
Date: Tue, 2 Mar 2021 00:01:59 +0800
Subject: [PATCH] net: dsa: tag_mtk: fix 802.1ad VLAN egress
A different TPID bit is used for 802.1ad VLAN frames.
Reported-by Ilario Gelmetti <[email protected]>
Fixes f0af34317f4b ("net: dsa: mediatek: combine MediaTek tag with VLAN tag")
Signed-off-by DENG Qingfang <[email protected]>
Signed-off-by David S. Miller <[email protected]>
net/dsa/tag_mtk.c +13 -6
@@ -13,6 +13,7 @@#define MTK_HDR_LEN 4#define MTK_HDR_XMIT_UNTAGGED 0#define MTK_HDR_XMIT_TAGGED_TPID_8100 1 +#define MTK_HDR_XMIT_TAGGED_TPID_88A8 2#define MTK_HDR_RECV_SOURCE_PORT_MASK GENMASK(2, 0)#define MTK_HDR_XMIT_DP_BIT_MASK GENMASK(5, 0)#define MTK_HDR_XMIT_SA_DIS BIT(6)
@@ -21,8 +22,8 @@ static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb, struct net_device *dev) {struct dsa_port *dp =dsa_slave_to_port (dev); +u8 xmit_tpid;u8 *mtk_tag; -bool is_vlan_skb = true;unsigned char *dest =eth_hdr (skb)->h_dest;bool is_multicast_skb =is_multicast_ether_addr (dest) && !is_broadcast_ether_addr (dest);
@@ -33,10 +34,17 @@ static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb,* the both special and VLAN tag at the same time and then look up VLAN * table with VID. */ -if (!skb_vlan_tagged (skb)) { +switch (skb->protocol) { +case htons (ETH_P_8021Q ): + xmit_tpid =MTK_HDR_XMIT_TAGGED_TPID_8100 ; +break ; +case htons (ETH_P_8021AD ): + xmit_tpid =MTK_HDR_XMIT_TAGGED_TPID_88A8 ; +break ; +default : + xmit_tpid =MTK_HDR_XMIT_UNTAGGED ;skb_push (skb,MTK_HDR_LEN );memmove (skb->data, skb->data +MTK_HDR_LEN ,2 *ETH_ALEN ); - is_vlan_skb = false; } mtk_tag = skb->data +2 *ETH_ALEN ;
@@ -44,8 +52,7 @@ static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb,/* Mark tag attribute on special tag insertion to notify hardware * whether that's a combined special tag with 802.1Q header. */ - mtk_tag[0 ] = is_vlan_skb ?MTK_HDR_XMIT_TAGGED_TPID_8100 : -MTK_HDR_XMIT_UNTAGGED ; + mtk_tag[0 ] = xmit_tpid; mtk_tag[1 ] = (1 << dp->index) &MTK_HDR_XMIT_DP_BIT_MASK ;/* Disable SA learning for multicast frames */
@@ -53,7 +60,7 @@ static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb, mtk_tag[1 ] |=MTK_HDR_XMIT_SA_DIS ;/* Tag control information is kept for 802.1Q */ -if (!is_vlan_skb) { +if (xmit_tpid ==MTK_HDR_XMIT_UNTAGGED ) { mtk_tag[2 ] =0 ; mtk_tag[3 ] =0 ; }