> -----Original Message-----
> From: Michael Chan [mailto:michael.c...@broadcom.com]
> Sent: Tuesday, December 05, 2017 4:15 AM
> To: Yuval Mintz <yuv...@mellanox.com>
> Cc: da...@davemloft.net; netdev@vger.kernel.org; Elior, Ariel
> <ariel.el...@cavium.com>; Dept-Eng Everest Linux L2 <Dept-
> engeverestlinu...@cavium.com>
> Subject: Re: [PATCH net-next 4/4] qede: Use NETIF_F_GRO_HW.
> 
> On Mon, Dec 4, 2017 at 1:48 PM, Yuval Mintz <yuv...@mellanox.com> wrote:
> >> Advertise NETIF_F_GRO_HW and turn on or off hardware GRO based on
> >> NETIF_F_GRO_FW flag.
> >>
> >> Cc: Ariel Elior <ariel.el...@cavium.com>
> >> Cc: everest-linux...@cavium.com
> >> Signed-off-by: Michael Chan <michael.c...@broadcom.com>
> >> ---
> >>  drivers/net/ethernet/qlogic/qede/qede_filter.c | 9 ++-------
> >>  drivers/net/ethernet/qlogic/qede/qede_main.c   | 4 ++--
> >>  2 files changed, 4 insertions(+), 9 deletions(-)
> >>
> >> diff --git a/drivers/net/ethernet/qlogic/qede/qede_filter.c
> >> b/drivers/net/ethernet/qlogic/qede/qede_filter.c
> >> index c1a0708..7ee49b4 100644
> >> --- a/drivers/net/ethernet/qlogic/qede/qede_filter.c
> >> +++ b/drivers/net/ethernet/qlogic/qede/qede_filter.c
> >> @@ -901,13 +901,8 @@ int qede_set_features(struct net_device *dev,
> >> netdev_features_t features)
> >>       netdev_features_t changes = features ^ dev->features;
> >>       bool need_reload = false;
> >>
> >> -     /* No action needed if hardware GRO is disabled during driver load */
> >> -     if (changes & NETIF_F_GRO) {
> >> -             if (dev->features & NETIF_F_GRO)
> >> -                     need_reload = !edev->gro_disable;
> >> -             else
> >> -                     need_reload = edev->gro_disable;
> >> -     }
> >> +     if (changes & NETIF_F_GRO_HW)
> >> +             need_reload = true;
> >
> > This doesn't look right; edev->gro_disable can change due to other
> > conditions as well - otherwise, it would have been synonymous with
> > (dev->features & NETIF_F_GRO).
> >
> 
> Feel free to modify the patch.  The idea is for the driver to determine in
> ndo_fix_features()/ndo_set_features() if GRO_HW can be enabled.  For things
> like generic XDP, I think we can add code to centrally disable GRO_HW and not
> have to worry about that in the driver.

Since we are now differentiating HW gro with distinct feature bit, I think we 
should consider this feature bit everywhere where driver disables
HW gro internally [not explicitly using ethtool]. This is not just specific to 
XDP but on some other conditions also driver disables HW gro in load flow.
I think with just this change we would end up with showing HW gro feature 
enabled but actually driver has disabled it in XDP or other scenarios 
internally.

I don't know if it's a good thing to do but just a suggestion - 
What if in driver load flow that is in the end of function qede_alloc_mem_rxq() 
we do something like below so that it will actually represent
the actual state of the feature ?

If (edev->gro_disable) {
        ndev->hw_features &= ~ NETIF_F_GRO_HW;
        ndev->features &= ~ NETIF_F_GRO_HW;
}

Reply via email to