> -----Original Message-----
> From: Andrew Lunn <and...@lunn.ch>
> Sent: Sunday, April 4, 2021 7:33 PM
> To: Danielle Ratson <daniel...@nvidia.com>
> Cc: netdev@vger.kernel.org; da...@davemloft.net; k...@kernel.org; 
> eric.duma...@gmail.com; mkube...@suse.cz;
> f.faine...@gmail.com; acard...@redhat.com; irussk...@marvell.com; 
> gust...@embeddedor.com; magnus.karls...@intel.com;
> ec...@solarflare.com; Ido Schimmel <ido...@nvidia.com>; Jiri Pirko 
> <j...@nvidia.com>; mlxsw <ml...@nvidia.com>
> Subject: Re: [PATCH net v2 1/2] ethtool: Add link_mode parameter capability 
> bit to ethtool_ops
> 
> > @@ -436,12 +436,16 @@ int __ethtool_get_link_ksettings(struct
> > net_device *dev,
> >
> >     memset(link_ksettings, 0, sizeof(*link_ksettings));
> >
> > -   link_ksettings->link_mode = -1;
> >     err = dev->ethtool_ops->get_link_ksettings(dev, link_ksettings);
> >     if (err)
> >             return err;
> >
> > -   if (link_ksettings->link_mode != -1) {
> > +   if (dev->ethtool_ops->cap_link_mode_supported &&
> > +       link_ksettings->link_mode != -1) {
> 
> Is this -1 behaviour documented anywhere? It seems like you just changed its 
> meaning. It used to mean, this field has not been set,
> ignore it. Adding the cap_link_mode_supported it now means, we have field has 
> been set, but we have no idea what link mode is
> being used.
> So you should probably add something to the documentation of struct 
> ethtool_link_ksettings.
> 
> I wonder if we should actually add ETHTOOL_LINK_MODE_UNKNOWN to enum 
> ethtool_link_mode_bit_indices?
> 
> > +           if (WARN_ON_ONCE(link_ksettings->link_mode >=
> > +                            __ETHTOOL_LINK_MODE_MASK_NBITS))
> > +                   return -EINVAL;
> > +
> >             link_info = &link_mode_params[link_ksettings->link_mode];
> >             link_ksettings->base.speed = link_info->speed;
> >             link_ksettings->lanes = link_info->lanes;
> 
> If dev->ethtool_ops->cap_link_mode_supported && link_ksettings->link_mode == 
> -1 should you be setting speed to
> SPEED_UNKNOWN, and lanes to LANE_UNKNOWN? Or is that already the default?
> 
> But over all, this API between the core and the driver seems messy. Why not 
> just add a helper in common.c which translates link
> mode to speed/duplex/lanes and call it in the driver. Then you don't need 
> this capability flags, which i doubt any other driver will ever
> use. And you don't need to worry about drivers returning random values. As 
> far as i can see, the link_mode returned by the driver is
> not used for anything other than for this translation. So i don't see a need 
> for it outside of the driver. Or maybe i'm missing
> something?
> 
>       Andrew

Hi Andrew,

Please see my patch here: 
https://github.com/daniellerts/linux_mlxsw/commit/72ca614951418843aa87323630c354691d9e50d4
Since a lack of time until the window closes, please see if that is what you 
meant and you are ok with it, before I am sending another version.

Thanks,
Danielle 

Reply via email to