From: Jakub Kicinski <kuba@kernel.org>
To: Eric Joyner <eric.joyner@amd.com>
Cc: netdev@vger.kernel.org, brett.creeley@amd.com,
andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
pabeni@redhat.com
Subject: Re: [PATCH net-next v3 2/5] ionic: Get "link_down_count" ext link stat from firmware
Date: Tue, 9 Jun 2026 14:26:40 -0700 [thread overview]
Message-ID: <20260609142640.261b7d87@kernel.org> (raw)
In-Reply-To: <f2d17ae9-ec9f-46db-b46a-a2bb680c3460@amd.com>
On Tue, 9 Jun 2026 11:00:03 -0700 Eric Joyner wrote:
> On 5/14/2026 6:27 PM, Jakub Kicinski wrote:
> > Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding.
> >
> >
> > This is an AI-generated review of your patch. The human sending this
> > email has considered the AI review valid, or at least plausible.
>
> Man, it's been forever since I've been able to get back to this.
>
> > ---
> > [Low]
> > Should this NULL check sit inside the is_physfn branch below? The
> > port_info pointer is only dereferenced on the PF path, so a VF calling
> > ethtool on link ext stats will now log a netdev_err even though the VF
> > path never reads port_info.
>
> Sure.
>
> >
> > The message is also unrate-limited and reachable from userspace via
> > ethtool. port_info is freed and set to NULL in ionic_port_reset() and
> > reallocated in ionic_port_init() on FW reset / FLR / PCI error recovery
> > paths (ionic_reset_prepare()/ionic_reset_done() in ionic_bus_pci.c, and
> > ionic_restart_lif() in ionic_lif.c), so any ethtool query during that
> > transient window will emit a kernel log line where the previous code
> > silently did nothing.
> >
> >>
> >> - if (lif->ionic->pdev->is_physfn)
> >> - stats->link_down_events = lif->link_down_count;
> >> + if (ionic->pdev->is_physfn)
> >> + stats->link_down_events =
> >> + le16_to_cpu(ionic->idev.port_info->status.link_down_count);
> >> }
>
> I can use netdev_err_once() here, instead? There's no "netdev_err_ratelimited()"
> like how there is for struct device and "dev_err_ratelimited()", interestingly.
> Would that be more appropriate in the future?
>
> There's also a similar issue in ionic_get_link_ksettings() below (and maybe
> elsewhere?), but that can be fixed in a separate patch.
This is a nit, up to you.
> > [Medium]
> > The firmware-supplied link_down_count is a __le16 in struct
> > ionic_port_status (ionic_if.h), so the value saturates at 65,535. The
> > previous lif->link_down_count was an unsigned int (32-bit), and the
> > ethtool field stats->link_down_events is u64 and treated as monotonic
> > by userspace consumers (per the comment on struct
> > ethtool_link_ext_stats in include/linux/ethtool.h).
> >
> > Without driver-side rollover detection that accumulates the carry into
> > a wider counter, after 65,536 link bounces the reported value will
> > appear to go backward to a small number. Should the driver detect a
> > firmware value smaller than the previously-read value and fold the
> > delta into a 32/64-bit running tally before assigning to
> > stats->link_down_events?
>
> Is this a big enough issue to deal with? Is link really going to go down
> sixty-five thousand times while the driver is loaded? I guess we could have a
> running tally, but that seems like more effort than this is worth.
Seems unlikely indeed, but drivers routinely deal with such wrapping.
It's like 5 lines of code, no?
u16 val = le16_to_cpu(...
if ((u16)stats->link_down_events > val)
stats->link_down_events += BIT(16);
stats->link_down_events &= 0xffff0000;
stats->link_down_events |= val;
> > [Medium]
> > Does this change make link_down_events non-persistent across firmware
> > resets? port_info lives in DMA-coherent memory that
> > ionic_port_reset() frees and clears:
> >
> > drivers/net/ethernet/pensando/ionic/ionic_main.c:ionic_port_reset() {
> > ...
> > dma_free_coherent(...);
> > idev->port_info = NULL;
> > ...
> > }
> >
> > and ionic_port_init() reallocates a fresh zeroed page. These are
> > called from the FLR / PCI error recovery path
> > (ionic_reset_prepare()/ionic_reset_done() in ionic_bus_pci.c) and from
> > ionic_restart_lif() in ionic_lif.c, so FW-reset events that previously
> > left the driver-resident counter untouched will now zero this stat.
> >
> > The commit message does not mention this behavioral change. Should the
> > driver snapshot the firmware value before each reset and accumulate it
> > across reset boundaries to keep the ethtool counter monotonic?
>
> This count doesn't get reset in the firmware when the device the ionic driver
> binds to gets reset; the freshly zeroed page will get the count from the
> firmware again soon after the reset occurs.
This is also not great, operationally. Monitoring systems may expect
counters to start from 0 after boot (IIUC you're saying that unless
the card goes thru a full reset we'll keep the value from previous
boot).
next prev parent reply other threads:[~2026-06-09 21:26 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-12 22:44 [PATCH net-next v3 0/5] Expose more port stats to ethtool Eric Joyner
2026-05-12 22:44 ` [PATCH net-next v3 1/5] ionic: Small improvements in devcmd retry logic Eric Joyner
2026-05-15 1:26 ` Jakub Kicinski
2026-05-19 0:01 ` Eric Joyner
2026-05-19 0:23 ` Jakub Kicinski
2026-05-12 22:44 ` [PATCH net-next v3 2/5] ionic: Get "link_down_count" ext link stat from firmware Eric Joyner
2026-05-15 1:27 ` Jakub Kicinski
2026-06-09 18:00 ` Eric Joyner
2026-06-09 21:26 ` Jakub Kicinski [this message]
2026-06-09 22:18 ` Eric Joyner
2026-06-09 22:26 ` Eric Joyner
2026-05-12 22:44 ` [PATCH net-next v3 3/5] ionic: Update ionic_if.h with new extra port stats structure Eric Joyner
2026-05-12 22:44 ` [PATCH net-next v3 4/5] ionic: Report rx_bits_phy stat to ethtool Eric Joyner
2026-05-12 22:44 ` [PATCH net-next v3 5/5] ionic: Add .get_fec_stats ethtool handler Eric Joyner
2026-05-15 1:32 ` Jakub Kicinski
2026-05-15 19:59 ` Eric Joyner
2026-05-15 23:02 ` Jakub Kicinski
2026-05-19 0:06 ` Eric Joyner
2026-05-19 0:22 ` 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=20260609142640.261b7d87@kernel.org \
--to=kuba@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=brett.creeley@amd.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=eric.joyner@amd.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.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