From: Jakub Kicinski <kuba@kernel.org>
To: Jiri Pirko <jiri@resnulli.us>
Cc: Ido Schimmel <idosch@idosch.org>,
Ido Schimmel <idosch@nvidia.com>,
netdev@vger.kernel.org, davem@davemloft.net, pabeni@redhat.com,
jiri@nvidia.com, petrm@nvidia.com, dsahern@gmail.com,
andrew@lunn.ch, mlxsw@nvidia.com
Subject: Re: [PATCH net-next 00/11] mlxsw: extend line card model by devices and info
Date: Fri, 29 Apr 2022 11:45:35 -0700 [thread overview]
Message-ID: <20220429114535.64794e94@kernel.org> (raw)
In-Reply-To: <YmvRRSFeRqufKbO/@nanopsycho>
On Fri, 29 Apr 2022 13:51:33 +0200 Jiri Pirko wrote:
> >Of the three API levels (SDK, automation, human) I think automation
> >is the only one that's interesting to us in Linux. SDK interfaces are
> >necessarily too low level as they expose too much of internal details
> >to standardize. Humans are good with dealing with uncertainty and
> >diverse so there's no a good benchmark.
> >
> >The benchmark for automation is - can a machine use this API across
> >different vendors to reliably achieve its goals. For FW info/flashing
> >the goal is keeping the FW versions up to date. This is documented:
> >
> >https://www.kernel.org/doc/html/latest/networking/devlink/devlink-flash.html#firmware-version-management
> >
> >What would the pseudo code look like with "line cards" in the picture?
> >Apply RFC1925 truth 12.
>
> Something like this:
>
> $lc_count = array_size(devlink-lc-info[$handle])
>
> for ($lcnum = 0; $lcnum < $lc_count; lcnum++):
> $dev_count = array_size(devlink-lc-info[$handle][$lcnum])
>
> for ($devnum = 0; $devnum < $dev_count; $devnum++):
Here goes the iteration I complained about in my previous message.
Tracking FW versions makes most sense at the level of a product (as
in the unit of HW one can purchase from the system vendor). That
integrates well with system tracking HW in the fleet. Product in your
case will be a line card or populated chassis, I believe.
> # Get unique HW design identifier (gearbox id)
> $hw_id = devlink-lc-info[$handle][$lcnum][$devnum]['fw.psid']
1) you can't use 'fw.psid' in generic logic, it's a Melvidia's invention
2) looking at your cover letter there's no fw.psid for the device
reported, the automation will not work, Q.E.D.
> # Find out which FW flash we want to use for this device
> $want_flash_vers = some-db-backed.lookup($hw_id, 'flash')
>
> # Update flash if necessary
> if $want_flash_vers != devlink-lc-info[$handle][$lcnum][$devnum]['fw']:
> $file = some-db-backed.download($hw_id, 'flash')
> $component = devlink-lc[$handle][$lcnum][$devnum]['component']
> devlink-dev-flash($handle, $component, $file)
>
> devlink-reload()
>
> Clear indexes, not squashed somewhere in middle of string.
>
> >I thought you said your gearboxes all the the same FW?
> >Theoretically, yes. Theoretically, I can also have nested "line cards".
>
> Well, yeah. I was under impresion that possibility of having multiple
> devices on the same LC is not close to 0. But I get your point.
>
> Let's try to figure out he iface as you want it:
> We will have devlink dev info extended to be able to provide info
> about the LC/gearbox. Let's work with same prefix "lcX." for all
> info related to line card X.
>
> First problem is, who is going to enforce this prefix. It is driver's
> responsibility to provide the string which is put out. The solution
> would be to have a helper similar to devlink_info_version_*_put()
> called devlink_info_lc_version_*_put() that would accept lc pointer and
> add the prefix. Does it make sense to you?
>
> We need 3 things:
> 1) current version of gearbox FW
> That is easy, we have it - "versions"
> (DEVLINK_ATTR_INFO_VERSION_* nested attrs). We can have multiple
> nests that would carry the versions for individiual line cards.
> Example:
> versions:
> fixed:
> hw.revision 0
> lc2.hw.revision a
> lc8.hw.revision b
> running:
> ini.version 4
> lc2.gearbox.fw.version 1.1.3
> lc8.gearbox.fw.version 1.2.3
> 2) HW id (as you have it in your pseudocode), it is PSID in case of
> mlxsw. We already have PSID for ASIC:
> ....
> This should be also easy, as this is exposed as "fixed version" in a
> same way as previous example.
> Example:
> versions:
> fixed:
> lc2.gearbox.fw.psid XXX
> lc8.gearbox.fw.psid YYY
> 3) Component name
> This one is a bit tricky. It is not a version, so put it under
> "versions" does not make much sense.
> Also, there are more than one. Looking at how versions are done,
> multiple nests of attr type DEVLINK_ATTR_INFO_VERSION_* are put to
> the message. So we can introduce new attr DEVLINK_ATTR_INFO_FLASH_COMPONENT
> and put one per linecard/gearbox.
> Here arain we need some kind of helper to driver to call to put this
> into msg: devlink_info_lc_flash_component_put()
> Example:
> pci/0000:01:00.0:
> driver mlxsw_spectrum3
> flash_components:
> lc2.gearbox.fw
> lc8.gearbox.fw
>
> Then the flashing of the gearbox will be done by:
> # devlink dev flash pci/0000:01:00.0 file mellanox/fw-AGB-rel-19_2010_1312-022-EVB.mfa2 component lc2.gearbox.fw
The main question to me is whether users will want to flash the entire
device, or update line cards individually.
What's inside mellanox/fw-AGB-rel-19_2010_1312-022-EVB.mfa2? Doesn't
sound like it's FW just for a single gearbox?
> >Really? So we're going to be designing kernel APIs so that each message
> >contains complete information and can't contain references now?
>
> Can you give me an exapmple of devlink or any other iproute2 app cmd
> that actually does something similar to this?
Off the top of my head - doesn't ip has some caches for name resolution
etc.? Either way current code in iproute2.git is hardly written on the
stone tablets.
next prev parent reply other threads:[~2022-04-29 18:45 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-25 3:44 [PATCH net-next 00/11] mlxsw: extend line card model by devices and info Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 01/11] devlink: introduce line card devices support Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 02/11] devlink: introduce line card info get message Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 03/11] devlink: introduce line card device info infrastructure Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 04/11] mlxsw: reg: Extend MDDQ by device_info Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 05/11] mlxsw: core_linecards: Probe provisioned line cards for devices and attach them Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 06/11] selftests: mlxsw: Check devices on provisioned line card Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 07/11] mlxsw: core_linecards: Expose HW revision and INI version Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 08/11] selftests: mlxsw: Check line card info on provisioned line card Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 09/11] mlxsw: reg: Extend MDDQ device_info by FW version fields Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 10/11] mlxsw: core_linecards: Expose device FW version over device info Ido Schimmel
2022-04-25 3:44 ` [PATCH net-next 11/11] selftests: mlxsw: Check device info on activated line card Ido Schimmel
2022-04-25 9:50 ` [PATCH net-next 00/11] mlxsw: extend line card model by devices and info patchwork-bot+netdevbpf
2022-04-25 16:00 ` Jakub Kicinski
2022-04-25 19:39 ` Ido Schimmel
2022-04-25 19:52 ` Jakub Kicinski
2022-04-26 6:57 ` Jiri Pirko
2022-04-26 12:11 ` Andrew Lunn
2022-04-26 12:36 ` Jiri Pirko
2022-04-26 12:41 ` Jakub Kicinski
2022-04-26 14:00 ` Jiri Pirko
2022-04-26 14:51 ` Jakub Kicinski
2022-04-27 7:35 ` Jiri Pirko
2022-04-27 14:14 ` Jakub Kicinski
2022-04-29 11:51 ` Jiri Pirko
2022-04-29 18:45 ` Jakub Kicinski [this message]
2022-04-29 19:29 ` Jiri Pirko
2022-04-29 22:38 ` Jakub Kicinski
2022-04-30 6:27 ` Jiri Pirko
2022-05-02 14:39 ` Jakub Kicinski
2022-05-23 9:42 ` Jiri Pirko
2022-05-23 17:56 ` Jakub Kicinski
2022-05-24 6:46 ` Jiri Pirko
2022-05-24 14:31 ` Jiri Pirko
2022-05-24 18:00 ` Jakub Kicinski
2022-05-25 6:20 ` Jiri Pirko
2022-05-25 15:50 ` Jakub Kicinski
2022-05-26 9:05 ` Jiri Pirko
2022-05-26 10:47 ` Jiri Pirko
2022-05-26 11:45 ` Jiri Pirko
2022-05-26 17:35 ` Jakub Kicinski
2022-05-27 7:27 ` Jiri Pirko
2022-05-28 0:10 ` Jakub Kicinski
2022-05-28 9:09 ` Jiri Pirko
2022-05-28 19:02 ` Jakub Kicinski
2022-05-29 9:23 ` Jiri Pirko
2022-05-30 19:54 ` Jakub Kicinski
2022-05-31 7:11 ` Jiri Pirko
2022-05-31 15:05 ` Jakub Kicinski
2022-05-31 15:51 ` Jiri Pirko
2022-05-31 16:08 ` Jakub Kicinski
2022-05-31 19:34 ` Jiri Pirko
2022-05-31 22:41 ` Jakub Kicinski
2022-06-01 7:35 ` Jiri Pirko
2022-05-28 15:58 ` David Ahern
2022-05-29 9:24 ` Jiri Pirko
2022-05-31 2:11 ` David Ahern
2022-05-31 7:05 ` Jiri Pirko
2022-04-26 15:24 ` Andrew Lunn
2022-04-27 7:37 ` Jiri Pirko
2022-04-26 6:47 ` Jiri Pirko
2022-04-26 12:27 ` Andrew Lunn
2022-04-26 12:41 ` Jiri Pirko
2022-04-26 13:45 ` Andrew Lunn
2022-04-26 14:05 ` Jiri Pirko
2022-04-26 15:36 ` Andrew Lunn
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=20220429114535.64794e94@kernel.org \
--to=kuba@kernel.org \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=dsahern@gmail.com \
--cc=idosch@idosch.org \
--cc=idosch@nvidia.com \
--cc=jiri@nvidia.com \
--cc=jiri@resnulli.us \
--cc=mlxsw@nvidia.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=petrm@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).