RPS not work for DSA devices since the 'skb_get_hash' will always get the invalid hash for dsa tagged packets.
"[PATCH] tag_mtk: add flow_dissect callback to the ops struct" introduced the flow_dissect callback to get the right hash for MTK tagged packet. And tag_dsa also needs to implement the callback. Signed-off-by: Rundong Ge <rdong...@gmail.com> --- net/dsa/tag_dsa.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/net/dsa/tag_dsa.c b/net/dsa/tag_dsa.c index 8b2f92e..67ff3fa 100644 --- a/net/dsa/tag_dsa.c +++ b/net/dsa/tag_dsa.c @@ -146,8 +146,17 @@ static struct sk_buff *dsa_rcv(struct sk_buff *skb, struct net_device *dev, return skb; } +static int dsa_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, + int *offset) +{ + *offset = 4; + *proto = ((__be16 *)skb->data)[1]; + return 0; +} + const struct dsa_device_ops dsa_netdev_ops = { .xmit = dsa_xmit, .rcv = dsa_rcv, + .flow_dissect = dsa_tag_flow_dissect, .overhead = DSA_HLEN, }; -- 1.8.3.1