diff mbox series

net: dsa: Implement flow_dissect callback for tag_dsa.

Message ID 20190215082253.2682-1-rdong.ge@gmail.com
State Superseded
Delegated to: David Miller
Headers show
Series net: dsa: Implement flow_dissect callback for tag_dsa. | expand

Commit Message

Rundong Ge Feb. 15, 2019, 8:22 a.m. UTC
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.ge@gmail.com>
---
 net/dsa/tag_dsa.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Andrew Lunn Feb. 15, 2019, 2:05 p.m. UTC | #1
On Fri, Feb 15, 2019 at 08:22:53AM +0000, Rundong Ge wrote:
> 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.

Hi Rundong

This looks good. Do you have any sort of numbers to show the
performance improvements?

Could you make a similar change to tag_edsa.c? It uses an 8 byte
header.

Thanks
	Andrew
diff mbox series

Patch

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,
 };