All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: Andrew Lunn <andrew@lunn.ch>
Cc: netdev@vger.kernel.org, linux@armlinux.org.uk, olteanv@gmail.com,
	hkallweit1@gmail.com, f.fainelli@gmail.com, saeedm@nvidia.com,
	michael.chan@broadcom.com
Subject: Re: [RFC net-next] net: track locally triggered link loss
Date: Fri, 20 May 2022 11:14:07 -0700	[thread overview]
Message-ID: <20220520111407.2bce7cb3@kernel.org> (raw)
In-Reply-To: <YoeIj2Ew5MPvPcvA@lunn.ch>

On Fri, 20 May 2022 14:24:47 +0200 Andrew Lunn wrote:
> > +/**
> > + * netif_carrier_local_changes_start() - enter local link reconfiguration
> > + * @dev: network device
> > + *
> > + * Mark link as unstable due to local administrative actions. This will
> > + * cause netif_carrier_off() to behave like netif_carrier_admin_off() until
> > + * netif_carrier_local_changes_end() is called.
> > + */
> > +static inline void netif_carrier_local_changes_start(struct net_device *dev)
> > +{
> > +	set_bit(__LINK_STATE_NOCARRIER_LOCAL, &dev->state);
> > +}
> > +
> > +static inline void netif_carrier_local_changes_end(struct net_device *dev)
> > +{
> > +	clear_bit(__LINK_STATE_NOCARRIER_LOCAL, &dev->state);
> > +}
> > +  
> 
> Since these don't perform reference counting, maybe a WARN_ON() if the
> bit is already set/not set.

Good idea.

> >  void netif_carrier_on(struct net_device *dev);
> >  void netif_carrier_off(struct net_device *dev);
> > +void netif_carrier_admin_off(struct net_device *dev);
> >  void netif_carrier_event(struct net_device *dev);  
> 
> I need some examples of how you see this used. I can see two ways:
> 
> At the start of a reconfigure, the driver calls
> netif_carrier_local_changes_start() and once it is all over and ready
> to do work again, it calls netif_carrier_local_changes_end().

I was looking at bnxt because it's relatively standard for DC NICs and
doesn't have 10M lines of code.. then again I could be misinterpreting
the code, I haven't tested this theory:

In bnxt_set_pauseparam() for example the driver will send a request to
the FW which will result in the link coming down and back up with
different settings (e.g. when pause autoneg was changed). Since the
driver doesn't call netif_carrier_off() explicitly as part of sending
the FW message but the link down gets reported thru the usual interrupt
(as if someone yanked the cable out) - we need to wrap the FW call with
the __LINK_STATE_NOCARRIER_LOCAL

> The driver has a few netif_carrier_off() calls changed to
> netif_carrier_admin_off(). It is then unclear looking at the code
> which of the calls to netif_carrier_on() match the off.

Right, for bnxt again the carrier_off in bnxt_tx_disable() would become
an admin_carrier_off, since it's basically part of closing the netdev.

> Please could you pick a few drivers, and convert them? 

Will do -- unless someone has concerns about this approach or a better
idea.

> Maybe include a driver which makes use of phylib, which should be
> doing control of the carrier based on the actual link status.

For phylib I was thinking of modifying phy_stop()... but I can't
grep out where carrier_off gets called. I'll take a closer look.

  reply	other threads:[~2022-05-20 18:14 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-20  0:45 [RFC net-next] net: track locally triggered link loss Jakub Kicinski
2022-05-20 12:24 ` Andrew Lunn
2022-05-20 18:14   ` Jakub Kicinski [this message]
2022-05-20 18:48     ` Andrew Lunn
2022-05-20 22:02       ` Jakub Kicinski
2022-05-21 14:23         ` Andrew Lunn
2022-05-21 18:26           ` Jakub Kicinski
2022-05-20 22:08       ` Saeed Mahameed
2022-05-20 23:03         ` Jakub Kicinski
2022-05-21  5:08           ` Saeed Mahameed
2022-05-21 18:38             ` Jakub Kicinski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220520111407.2bce7cb3@kernel.org \
    --to=kuba@kernel.org \
    --cc=andrew@lunn.ch \
    --cc=f.fainelli@gmail.com \
    --cc=hkallweit1@gmail.com \
    --cc=linux@armlinux.org.uk \
    --cc=michael.chan@broadcom.com \
    --cc=netdev@vger.kernel.org \
    --cc=olteanv@gmail.com \
    --cc=saeedm@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.