Messages in this thread | | | From | Alexander Lobakin <> | Subject | [PATCH RFC net-next 00/20] net: dsa: add GRO support | Date | Mon, 30 Dec 2019 17:30:08 +0300 |
| |
As of now, napi_gro_receive() in cases where the corresponding device is installed as CPU port of DSA-driven switch is in fact an overheaded version of netif_receive_skb{,_list}() with no advantages over:
- dev_gro_receive() can't find packet_offload for ETH_P_XDSA type; - so it immediately returns GRO_NORMAL; - napi_skb_finish() passes skb to gro_normal_one() -> netstack.
This series adds a basic infrastructure to allow DSA taggers to implement GRO callbacks and adds GRO support for 5 tagger drivers: * tag_ar9331 * tag_gswip * tag_lan9303 * tag_mtk * tag_qca
I didn't make it for the rest because they are in fact way more complicated (e.g. combined DSA + 802.1q tag etc.) and require more familiarity with them and tests on the real hardware, which is inaccesible for me at the moment.
This series also includes a bunch of random fixes in several tagger drivers and some cleanup. I left them all in one place as they depend on each other, but there's no problem for me to split this into different series.
I mark this as RFC, and there are the key questions for maintainers, developers, users etc.: - Do we need GRO support for DSA at all? - Which tagger protocols really need it and which don't? - Are the actual changes correct in every single tagger code? - Does this series bring any performance improvements on the affected systems? - Would anybody mind if we'd add DSA support to napi_gro_frags()? - Any code/other comments/notes.
I also would like to see more taggers with GRO callbacks, such as DSA and EDSA, and the results of their addition.
Alexander Lobakin (20): net: dsa: make .flow_dissect() callback returning void net: dsa: add GRO support infrastructure net: dsa: tag_ar9331: add .flow_dissect() callback net: dsa: tag_ar9331: split out common tag accessors net: dsa: tag_ar9331: add GRO callbacks net: dsa: tag_gswip: fix typo in tag name net: dsa: tag_gswip: switch to bitfield helpers net: dsa: tag_gswip: add .flow_dissect() callback net: dsa: tag_gswip: split out common tag accessors net: dsa: tag_gswip: add GRO callbacks net: dsa: tag_lan9303: add .flow_dissect() callback net: dsa: tag_lan9303: split out common tag accessors net: dsa: tag_lan9303: add GRO callbacks net: dsa: tag_mtk: split out common tag accessors net: dsa: tag_mtk: add GRO callbacks net: dsa: tag_qca: fix doubled Tx statistics net: dsa: tag_qca: switch to bitfield helpers net: dsa: tag_qca: split out common tag accessors net: dsa: tag_qca: add GRO callbacks net: core: add (unlikely) DSA support in napi_gro_frags()
include/net/dsa.h | 10 ++- net/core/dev.c | 11 ++- net/core/flow_dissector.c | 8 +- net/dsa/dsa.c | 43 +++++++++- net/dsa/dsa2.c | 1 + net/dsa/tag_ar9331.c | 139 ++++++++++++++++++++++++++----- net/dsa/tag_dsa.c | 5 +- net/dsa/tag_edsa.c | 5 +- net/dsa/tag_gswip.c | 126 +++++++++++++++++++++++----- net/dsa/tag_lan9303.c | 139 ++++++++++++++++++++++++++----- net/dsa/tag_mtk.c | 115 +++++++++++++++++++++----- net/dsa/tag_qca.c | 167 ++++++++++++++++++++++++++++---------- 12 files changed, 629 insertions(+), 140 deletions(-)
-- 2.24.1
| |