From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: Re: [net RFC] net/mlx4_en: Use frag stride in crossing page boundary condition Date: Wed, 20 Jun 2018 17:28:00 -0700 Message-ID: References: <20180614005309.17357-1-saeedm@mellanox.com> <82f89ebc-713c-1b97-0d0a-e455094e2638@gmail.com> <9a8f7e1b2b51320178f671c2ae57d7d54be5af5a.camel@mellanox.com> <1889d389-a741-aa7b-c2b1-14530fb44ba8@gmail.com> <59c3b776cc0c683fff8090195fd71d7f22305744.camel@mellanox.com> <9146b0a3d34388006d456135c9fe4f618260e63b.camel@mellanox.com> <77a87572d82deef1e035ec3b36027e8f6e0c1ea2.camel@mellanox.com> <1ddecaaa-9613-03ba-d761-a4d3410c4f7d@gmail.com> <1bd6da9b-fa46-25e7-8921-cb56eb91e71b@gmail.com> <65f1a941a3013250e2a768a31f5e521dc21f73e8.camel@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: "netdev@vger.kernel.org" , "edumazet@google.com" To: Saeed Mahameed , "eric.dumazet@gmail.com" , "kafai@fb.com" , Tariq Toukan Return-path: Received: from mail-pf0-f194.google.com ([209.85.192.194]:43493 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753938AbeFUA2D (ORCPT ); Wed, 20 Jun 2018 20:28:03 -0400 Received: by mail-pf0-f194.google.com with SMTP id y8-v6so589050pfm.10 for ; Wed, 20 Jun 2018 17:28:02 -0700 (PDT) In-Reply-To: <65f1a941a3013250e2a768a31f5e521dc21f73e8.camel@mellanox.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 06/20/2018 04:41 PM, Saeed Mahameed wrote: > > I see, I wanted to use _stride_ as grantee for how much a page frag can > grow, for example in mlx5 we need the whole stride to build_skb around > the frag, since we always need the trailer, but it is different in here > and we can avoid resource waste. > > so how a bout this: (As suggested by Martin). > currently as mlx4_en_complete_rx_desc assumes that priv->rx_headroom > is always 0 in non-XDP setup, hence: > > frags->page_offset += sz_align; > > where it really should be: > frags->page_offset += sz_align + priv->rx_headroom; > > we can use it as a hint to not reuse as below: > what do you think ? > > > diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c > b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > index 9f54ccbddea7..f14c7a574cc8 100644 > --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c > +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > @@ -474,10 +474,10 @@ static int mlx4_en_complete_rx_desc(struct > mlx4_en_priv *priv, > { > const struct mlx4_en_frag_info *frag_info = priv->frag_info; > unsigned int truesize = 0; > + bool release = true; > int nr, frag_size; > struct page *page; > dma_addr_t dma; > - bool release; > index 9f54ccbddea7..f14c7a574cc8 100644 > --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c > +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c > > /* Collect used fragments while replacing them in the HW > descriptors */ > for (nr = 0;; frags++) { > @@ -500,7 +500,7 @@ static int mlx4_en_complete_rx_desc(struct > mlx4_en_priv *priv, > release = page_count(page) != 1 || > page_is_pfmemalloc(page) || > page_to_nid(page) != numa_mem_id(); > - } else { > + } elseif(!priv->rx_headroom) { > u32 sz_align = ALIGN(frag_size, > SMP_CACHE_BYTES); > > frags->page_offset += sz_align; > I guess that would work, please double check priv->rx_headroom wont need another cache line, thanks !