kernel: mediatek: fix WED offload regression on MT7622
Fix dealing with DSA untagging offload Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
		| @@ -0,0 +1,55 @@ | ||||
| From: Felix Fietkau <nbd@nbd.name> | ||||
| Date: Tue, 27 Dec 2022 15:02:51 +0100 | ||||
| Subject: [PATCH] net: ethernet: mtk_eth_soc: ppe: fix L2 offloading with DSA | ||||
|  untagging offload enabled | ||||
|  | ||||
| Check for skb metadata in order to detect the case where the DSA header is not | ||||
| present. | ||||
|  | ||||
| Fixes: 2d7605a72906 ("net: ethernet: mtk_eth_soc: enable hardware DSA untagging") | ||||
| Signed-off-by: Felix Fietkau <nbd@nbd.name> | ||||
| --- | ||||
|  | ||||
| --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||
| +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c | ||||
| @@ -1992,9 +1992,6 @@ static int mtk_poll_rx(struct napi_struc | ||||
|  			skb_checksum_none_assert(skb); | ||||
|  		skb->protocol = eth_type_trans(skb, netdev); | ||||
|   | ||||
| -		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED) | ||||
| -			mtk_ppe_check_skb(eth->ppe[0], skb, hash); | ||||
| - | ||||
|  		/* When using VLAN untagging in combination with DSA, the | ||||
|  		 * hardware treats the MTK special tag as a VLAN and untags it. | ||||
|  		 */ | ||||
| @@ -2007,6 +2004,9 @@ static int mtk_poll_rx(struct napi_struc | ||||
|  				skb_dst_set_noref(skb, ð->dsa_meta[port]->dst); | ||||
|  		} | ||||
|   | ||||
| +		if (reason == MTK_PPE_CPU_REASON_HIT_UNBIND_RATE_REACHED) | ||||
| +			mtk_ppe_check_skb(eth->ppe[0], skb, hash); | ||||
| + | ||||
|  		skb_record_rx_queue(skb, 0); | ||||
|  		napi_gro_receive(napi, skb); | ||||
|   | ||||
| --- a/drivers/net/ethernet/mediatek/mtk_ppe.c | ||||
| +++ b/drivers/net/ethernet/mediatek/mtk_ppe.c | ||||
| @@ -8,6 +8,7 @@ | ||||
|  #include <linux/platform_device.h> | ||||
|  #include <linux/if_ether.h> | ||||
|  #include <linux/if_vlan.h> | ||||
| +#include <net/dst_metadata.h> | ||||
|  #include <net/dsa.h> | ||||
|  #include "mtk_eth_soc.h" | ||||
|  #include "mtk_ppe.h" | ||||
| @@ -756,7 +757,9 @@ void __mtk_ppe_check_skb(struct mtk_ppe | ||||
|  		    skb->dev->dsa_ptr->tag_ops->proto != DSA_TAG_PROTO_MTK) | ||||
|  			goto out; | ||||
|   | ||||
| -		tag += 4; | ||||
| +		if (!skb_metadata_dst(skb)) | ||||
| +			tag += 4; | ||||
| + | ||||
|  		if (get_unaligned_be16(tag) != ETH_P_8021Q) | ||||
|  			break; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau