On 08/09/2020 16:25, Greg Kroah-Hartman wrote: > From: Alexander Lobakin <alobakin@dlink.ru> > > commit 6570bc79c0dfff0f228b7afd2de720fb4e84d61d upstream. > > Commit 323ebb61e32b4 ("net: use listified RX for handling GRO_NORMAL > skbs") made use of listified skb processing for the users of > napi_gro_frags(). > The same technique can be used in a way more common napi_gro_receive() > to speed up non-merged (GRO_NORMAL) skbs for a wide range of drivers > including gro_cells and mac80211 users. > This slightly changes the return value in cases where skb is being > dropped by the core stack, but it seems to have no impact on related > drivers' functionality. > gro_normal_batch is left untouched as it's very individual for every > single system configuration and might be tuned in manual order to > achieve an optimal performance. > > Signed-off-by: Alexander Lobakin <alobakin@dlink.ru> > Acked-by: Edward Cree <ecree@solarflare.com> > Signed-off-by: David S. Miller <davem@davemloft.net> > Signed-off-by: Hyunsoon Kim <h10.kim@samsung.com> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> I'm not quite sure why this is stable material(it's a performance enhancement, rather than a fix). But if you do want to take it, make sure you've also got c80794323e82 ("net: Fix packet reordering caused by GRO and listified RX cooperation") b167191e2a85 ("net: wireless: intel: iwlwifi: fix GRO_NORMAL packet stalling") in your tree, particularly the latter as without it this commit triggers a severe regression in iwlwifi. -ed
--- a/net/core/dev.c +++ b/net/core/dev.c @@ -5602,12 +5602,13 @@ static void napi_skb_free_stolen_head(st kmem_cache_free(skbuff_head_cache, skb); } -static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb) +static gro_result_t napi_skb_finish(struct napi_struct *napi, + struct sk_buff *skb, + gro_result_t ret) { switch (ret) { case GRO_NORMAL: - if (netif_receive_skb_internal(skb)) - ret = GRO_DROP; + gro_normal_one(napi, skb); break; case GRO_DROP: @@ -5639,7 +5640,7 @@ gro_result_t napi_gro_receive(struct nap skb_gro_reset_offset(skb); - ret = napi_skb_finish(dev_gro_receive(napi, skb), skb); + ret = napi_skb_finish(napi, skb, dev_gro_receive(napi, skb)); trace_napi_gro_receive_exit(ret); return ret;