All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Lunn <andrew@lunn.ch>
To: Jakub Kicinski <kuba@kernel.org>
Cc: Ido Schimmel <idosch@idosch.org>,
	netdev@vger.kernel.org, davem@davemloft.net, mkubecek@suse.cz,
	pali@kernel.org, vadimp@nvidia.com, mlxsw@nvidia.com,
	Ido Schimmel <idosch@nvidia.com>
Subject: Re: [RFC PATCH net-next 2/8] ethtool: Add ability to reset transceiver modules
Date: Tue, 10 Aug 2021 21:28:08 +0200	[thread overview]
Message-ID: <YRLTSC90Lu/3IyJa@lunn.ch> (raw)
In-Reply-To: <20210810120030.5092ec22@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com>

> Hm, flashing is harder than reset. We can't unbind the driver while
> it's in progress. I don't have any ready solution in mind, but I'd 
> like to make sure the locking is clear and hard to get wrong. Maybe 
> we could have a mix of ops, one called for "preparing" the flashing
> called under rtnl and another for "commit" with "unlocked" in the name.
> Drivers which don't want to deal with dropping rtnl lock can just do
> everything in the first stage? Perhaps Andrew has better ideas, I'm
> just spit-balling. Presumably there are already locks at play, locks
> we would have to take in the case where Linux manages the PHY. Maybe
> they dictate an architecture?

I don't think the way linux manages PHYs dictates the
architecture. PHY cable test requires that the link is
administratively up, so the PHY state machine is in play. It
transitions into a testing state when cable test is started, and when
the test is finished, it resets the PHY to put it back into running
state. If you down the interface while the cable test is running, it
aborts the cable test, and then downs the PHY.

Flashing firmware is a bit different. You need to ensure the interface
is down. And i guess that gets interesting with split modules. You
really should not abort an upgrade because the user wants to up the
interface. So -EBUSY to open() seems like the best option, based on
the state of the SFP state machine.

I suspect you are going to need a kernel thread to do the real
work. So your "prepare" netlink op would pass the name of the firmware
file. Some basic validation would be performed, that all the needed
interfaces are down etc, and then the netlink OP would return. The
thread then uses request_firmware() to get access to the firmware, and
program it. Once complete, or on error, it can async notify user space
that it is sorry, your module is toast, or firmware upgrade was
successful.

This is just throwing out ideas...

     Andrew

  reply	other threads:[~2021-08-10 19:28 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-09 10:21 [RFC PATCH net-next 0/8] ethtool: Add ability to control transceiver modules Ido Schimmel
2021-08-09 10:21 ` [RFC PATCH net-next 1/8] ethtool: Add ability to control transceiver modules' low power mode Ido Schimmel
2021-08-09 14:28   ` Andrew Lunn
2021-08-10  7:26     ` Ido Schimmel
2021-08-10 13:52       ` Andrew Lunn
2021-08-10 13:59         ` Jakub Kicinski
2021-08-10 20:46           ` Ido Schimmel
2021-08-10 22:00             ` Keller, Jacob E
2021-08-10 22:06               ` Jakub Kicinski
2021-08-10 22:18                 ` Keller, Jacob E
2021-08-10 22:24                 ` Keller, Jacob E
2021-08-10 22:31                 ` Andrew Lunn
2021-08-11  0:38                   ` Keller, Jacob E
2021-08-10 22:05             ` Jakub Kicinski
2021-08-10 22:51               ` Andrew Lunn
2021-08-11 11:33               ` Ido Schimmel
2021-08-11 13:03                 ` Jakub Kicinski
2021-08-11 14:36                   ` Andrew Lunn
2021-08-11 19:37                     ` Ido Schimmel
2021-08-11 20:30                       ` Jakub Kicinski
2021-08-11 20:57                         ` Andrew Lunn
2021-08-11 21:04                         ` Ido Schimmel
2021-08-11 20:42                       ` Andrew Lunn
2021-08-10 21:38           ` Keller, Jacob E
2021-08-09 10:21 ` [RFC PATCH net-next 2/8] ethtool: Add ability to reset transceiver modules Ido Schimmel
2021-08-09 19:13   ` Andrew Lunn
2021-08-10 13:05     ` Ido Schimmel
2021-08-10 13:54       ` Jakub Kicinski
2021-08-10 18:15         ` Ido Schimmel
2021-08-10 18:58           ` Andrew Lunn
2021-08-10 19:00           ` Jakub Kicinski
2021-08-10 19:28             ` Andrew Lunn [this message]
2021-08-10 20:50               ` Ido Schimmel
2021-08-09 10:21 ` [RFC PATCH net-next 3/8] mlxsw: reg: Add fields to PMAOS register Ido Schimmel
2021-08-09 10:21 ` [RFC PATCH net-next 4/8] mlxsw: Make PMAOS pack function more generic Ido Schimmel
2021-08-09 10:21 ` [RFC PATCH net-next 5/8] mlxsw: reg: Add Port Module Memory Map Properties register Ido Schimmel
2021-08-09 10:21 ` [RFC PATCH net-next 6/8] mlxsw: reg: Add Management Cable IO and Notifications register Ido Schimmel
2021-08-09 10:21 ` [RFC PATCH net-next 7/8] mlxsw: Add ability to control transceiver modules' low power mode Ido Schimmel
2021-08-09 10:21 ` [RFC PATCH net-next 8/8] mlxsw: Add ability to reset transceiver modules Ido Schimmel

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=YRLTSC90Lu/3IyJa@lunn.ch \
    --to=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=idosch@idosch.org \
    --cc=idosch@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=mkubecek@suse.cz \
    --cc=mlxsw@nvidia.com \
    --cc=netdev@vger.kernel.org \
    --cc=pali@kernel.org \
    --cc=vadimp@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.