From: Jacob Keller <jacob.e.keller@intel.com>
To: MD Danish Anwar <danishanwar@ti.com>, David CARLIER <devnexen@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
Shuah Khan <skhan@linuxfoundation.org>,
Roger Quadros <rogerq@kernel.org>,
Andrew Lunn <andrew+netdev@lunn.ch>,
Meghana Malladi <m-malladi@ti.com>,
Kevin Hao <haokexin@gmail.com>,
Vadim Fedorenko <vadim.fedorenko@linux.dev>,
<netdev@vger.kernel.org>, <linux-doc@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
Vignesh Raghavendra <vigneshr@ti.com>
Subject: Re: [PATCH net-next 1/2] net: ti: icssg: Derive stats array lengths from ARRAY_SIZE
Date: Thu, 14 May 2026 09:38:57 -0700 [thread overview]
Message-ID: <c579daa4-2144-4524-b107-6322281f5209@intel.com> (raw)
In-Reply-To: <e28d2931-004e-4935-a0b5-d554ece76fb2@ti.com>
On 5/13/2026 9:56 PM, MD Danish Anwar wrote:
> Hi Jacob,
>
> On 14/05/26 1:30 am, Jacob Keller wrote:
>> The way we solved this in the Intel drivers is to use a single array
>> which contains both the stat name as well as the offset from the
>> structure where the stat resides.
>>
>> The stat string code just iterates over the stat list for the strings,
>> while the stat value code iterates the array and computes the stat
>> address from the offset and size and base structure pointer. Each object
>> that has stats has its own stat array structure.
>>
>> This is probably overkill, but the advantage is that the strings and
>> their values are stored together and adding a new stat is as simple as
>> adding a new entry to that list.
>>
>> I.e.
>>
>> struct ice_stats {
>> char stat_string[ETH_GSTRING_LEN];
>> int sizeof_stat;
>> int stat_offset;
>> };
>>
>> #define ICE_STAT(_type, _name, _stat) { \
>> .stat_string = _name, \
>> .sizeof_stat = sizeof_field(_type, _stat), \
>> .stat_offset = offsetof(_type, _stat) \
>> }
>>
>> #define ICE_VSI_STAT(_name, _stat) \
>> ICE_STAT(struct ice_vsi, _name, _stat)
>> #define ICE_PF_STAT(_name, _stat) \
>> ICE_STAT(struct ice_pf, _name, _stat)
>>
>>
>> Then the stats for the individial arrays are defined like this:
>>
>> static const struct ice_stats ice_gstrings_vsi_stats[] = {
>> ICE_VSI_STAT(ICE_RX_UNICAST, eth_stats.rx_unicast),
>> ICE_VSI_STAT(ICE_TX_UNICAST, eth_stats.tx_unicast),
>> ICE_VSI_STAT(ICE_RX_MULTICAST, eth_stats.rx_multicast),
>> ICE_VSI_STAT(ICE_TX_MULTICAST, eth_stats.tx_multicast),
>> ICE_VSI_STAT(ICE_RX_BROADCAST, eth_stats.rx_broadcast),
>> ICE_VSI_STAT(ICE_TX_BROADCAST, eth_stats.tx_broadcast),
>> ...
>> };
>>
>> (Note, ICE_RX_UNICAST is a macro that defines the string value.. I don't
>> recall who changed this to macros or why vs just having the strings be
>> directly in the definition...)
>>
>
> Thanks for sharing the ice driver pattern — that's a clean design.
>
>> This is probably a lot bigger refactor to make work, and may not be
>> exactly suitable for your driver. I've considered "upgrading" these data
>
> Yes, I need to see if refactoring is applicable to ICSSG or not. I will
> look into this and send a separate patch / series in future if
> applicable. For this series I will stick with what David Carlier suggested.
>
Makes sense. No need to bloat this by more work immediately. I just
wanted to point it out.
I'd like to uplift this infrastructure into core helpers so that other
drivers can more easily benefit without duplicating the scaffolding, but
its always been a low priority task especially since the private driver
stats are somewhat of a legacy/deprecated interface. (Maintainers don't
generally like driver developers making up their own statistics...)
next prev parent reply other threads:[~2026-05-14 16:39 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-12 6:06 [PATCH net-next 0/2] Add ICSSG firmware stats related to HSR MD Danish Anwar
2026-05-12 6:06 ` [PATCH net-next 1/2] net: ti: icssg: Derive stats array lengths from ARRAY_SIZE MD Danish Anwar
2026-05-12 7:58 ` David CARLIER
2026-05-12 9:40 ` MD Danish Anwar
2026-05-12 10:03 ` David CARLIER
2026-05-13 6:29 ` MD Danish Anwar
2026-05-13 14:07 ` David CARLIER
2026-05-13 20:00 ` Jacob Keller
2026-05-14 4:56 ` MD Danish Anwar
2026-05-14 16:38 ` Jacob Keller [this message]
2026-05-12 6:06 ` [PATCH net-next 2/2] net: ti: icssg: Add HSR and LRE PA statistics MD Danish Anwar
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=c579daa4-2144-4524-b107-6322281f5209@intel.com \
--to=jacob.e.keller@intel.com \
--cc=andrew+netdev@lunn.ch \
--cc=corbet@lwn.net \
--cc=danishanwar@ti.com \
--cc=davem@davemloft.net \
--cc=devnexen@gmail.com \
--cc=edumazet@google.com \
--cc=haokexin@gmail.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=m-malladi@ti.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rogerq@kernel.org \
--cc=skhan@linuxfoundation.org \
--cc=vadim.fedorenko@linux.dev \
--cc=vigneshr@ti.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