From: Jakub Kicinski <kuba@kernel.org>
To: Tony Nguyen <anthony.l.nguyen@intel.com>
Cc: davem@davemloft.net, pabeni@redhat.com, edumazet@google.com,
netdev@vger.kernel.org,
Alexander Lobakin <aleksander.lobakin@intel.com>,
przemyslaw.kitszel@intel.com, joshua.a.hay@intel.com,
michal.kubiak@intel.com,
nex.sw.ncis.osdt.itp.upstreaming@intel.com
Subject: Re: [PATCH net-next v2 2/9] libeth: add common queue stats
Date: Tue, 20 Aug 2024 18:17:57 -0700 [thread overview]
Message-ID: <20240820181757.02d83f15@kernel.org> (raw)
In-Reply-To: <20240819223442.48013-3-anthony.l.nguyen@intel.com>
On Mon, 19 Aug 2024 15:34:34 -0700 Tony Nguyen wrote:
> + * Return: new &net_device on success, %NULL on error.
> + */
> +struct net_device *__libeth_netdev_alloc(u32 priv, u32 rqs, u32 sqs,
> + u32 xdpsqs)
The netdev alloc / free / set num queues can be a separate patch
> +MODULE_DESCRIPTION("Common Ethernet library");
BTW for Intel? Or you want this to be part of the core?
I thought Intel, but you should tell us if you have broader plans.
> + const struct libeth_netdev_priv *priv = netdev_priv(dev); \
> + \
> + memset(stats, 0, sizeof(*stats)); \
> + u64_stats_init(&stats->syncp); \
> + \
> + mutex_init(&priv->base_##pfx##s[qid].lock); \
the mutex is only for writes or for reads of base too?
mutex is a bad idea for rtnl stats
> +/* Netlink stats. Exported fields have the same names as in the NL structs */
> +
> +struct libeth_stats_export {
> + u16 li;
> + u16 gi;
> +};
> +
> +#define LIBETH_STATS_EXPORT(lpfx, gpfx, field) { \
> + .li = (offsetof(struct libeth_##lpfx##_stats, field) - \
> + offsetof(struct libeth_##lpfx##_stats, raw)) / \
> + sizeof_field(struct libeth_##lpfx##_stats, field), \
> + .gi = offsetof(struct netdev_queue_stats_##gpfx, field) / \
> + sizeof_field(struct netdev_queue_stats_##gpfx, field) \
> +}
humpf
> +#define LIBETH_STATS_DEFINE_EXPORT(pfx, gpfx) \
> +static void \
> +libeth_get_queue_stats_##gpfx(struct net_device *dev, int idx, \
> + struct netdev_queue_stats_##gpfx *stats) \
> +{ \
> + const struct libeth_netdev_priv *priv = netdev_priv(dev); \
> + const struct libeth_##pfx##_stats *qs; \
> + u64 *raw = (u64 *)stats; \
> + u32 start; \
> + \
> + qs = READ_ONCE(priv->live_##pfx##s[idx]); \
> + if (!qs) \
> + return; \
> + \
> + do { \
> + start = u64_stats_fetch_begin(&qs->syncp); \
> + \
> + libeth_stats_foreach_export(pfx, exp) \
> + raw[exp->gi] = u64_stats_read(&qs->raw[exp->li]); \
> + } while (u64_stats_fetch_retry(&qs->syncp, start)); \
> +} \
ugh. Please no
> + \
> +static void \
> +libeth_get_##pfx##_base_stats(const struct net_device *dev, \
> + struct netdev_queue_stats_##gpfx *stats) \
> +{ \
> + const struct libeth_netdev_priv *priv = netdev_priv(dev); \
> + u64 *raw = (u64 *)stats; \
> + \
> + memset(stats, 0, sizeof(*(stats))); \
Have you read the docs for any of the recent stats APIs?
Nack. Just implement the APIs in the driver, this does not seem like
a sane starting point _at all_. You're going to waste more time coming
up with such abstraction than you'd save implementing it for 10 drivers.
next prev parent reply other threads:[~2024-08-21 1:17 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-19 22:34 [PATCH net-next v2 0/9][pull request] idpf: XDP chapter II: convert Tx completion to libeth Tony Nguyen
2024-08-19 22:34 ` [PATCH net-next v2 1/9] unroll: add generic loop unroll helpers Tony Nguyen
2024-08-21 0:55 ` Jakub Kicinski
2024-08-22 15:15 ` Alexander Lobakin
2024-08-22 22:59 ` Jakub Kicinski
2024-08-22 23:35 ` Tony Nguyen
2024-08-23 12:37 ` Alexander Lobakin
2024-08-19 22:34 ` [PATCH net-next v2 2/9] libeth: add common queue stats Tony Nguyen
2024-08-21 1:17 ` Jakub Kicinski [this message]
2024-08-22 15:13 ` Alexander Lobakin
2024-08-22 23:17 ` Jakub Kicinski
2024-08-23 12:59 ` Alexander Lobakin
2024-08-27 1:09 ` Jakub Kicinski
2024-08-27 15:31 ` Alexander Lobakin
2024-08-27 18:29 ` Jakub Kicinski
2024-08-28 15:06 ` Alexander Lobakin
2024-08-28 20:22 ` Jakub Kicinski
2024-08-29 12:01 ` Alexander Lobakin
2024-08-29 14:39 ` Jakub Kicinski
2024-08-19 22:34 ` [PATCH net-next v2 3/9] libie: add Tx buffer completion helpers Tony Nguyen
2024-08-19 22:34 ` [PATCH net-next v2 4/9] idpf: convert to libie Tx buffer completion Tony Nguyen
2024-08-19 22:34 ` [PATCH net-next v2 5/9] netdevice: add netdev_tx_reset_subqueue() shorthand Tony Nguyen
2024-08-19 22:34 ` [PATCH net-next v2 6/9] idpf: refactor Tx completion routines Tony Nguyen
2024-08-19 22:34 ` [PATCH net-next v2 7/9] idpf: fix netdev Tx queue stop/wake Tony Nguyen
2024-08-19 22:34 ` [PATCH net-next v2 8/9] idpf: enable WB_ON_ITR Tony Nguyen
2024-08-19 22:34 ` [PATCH net-next v2 9/9] idpf: switch to libeth generic statistics Tony Nguyen
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=20240820181757.02d83f15@kernel.org \
--to=kuba@kernel.org \
--cc=aleksander.lobakin@intel.com \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=joshua.a.hay@intel.com \
--cc=michal.kubiak@intel.com \
--cc=netdev@vger.kernel.org \
--cc=nex.sw.ncis.osdt.itp.upstreaming@intel.com \
--cc=pabeni@redhat.com \
--cc=przemyslaw.kitszel@intel.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.