All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: jiri@resnulli.us
Cc: Jakub Kicinski <kuba@kernel.org>,
	jiri@nvidia.com, andrew+netdev@lunn.ch, tariqt@nvidia.com,
	matttbe@kernel.org, leon@kernel.org, daniel.zahka@gmail.com,
	mhiramat@kernel.org, skhan@linuxfoundation.org,
	pabeni@redhat.com, chuck.lever@oracle.com, mbloch@nvidia.com,
	netdev@vger.kernel.org, przemyslaw.kitszel@intel.com,
	davem@davemloft.net, horms@kernel.org, donald.hunter@gmail.com,
	mschmidt@redhat.com, corbet@lwn.net, saeedm@nvidia.com,
	edumazet@google.com, cjubran@nvidia.com, rostedt@goodmis.org,
	mathieu.desnoyers@efficios.com
Subject: Re: [net-next,07/10] devlink: allow devlink instance allocation without a backing device
Date: Tue, 24 Feb 2026 18:23:34 -0800	[thread overview]
Message-ID: <20260225022334.998075-1-kuba@kernel.org> (raw)
In-Reply-To: <20260223145557.248679-8-jiri@resnulli.us>

This is an AI-generated review of your patch. The human sending this
email says "FYI"

For local reproduction steps see https://netdev-ai.bots.linux.dev/ai-local.html
---
devlink: allow devlink instance allocation without a backing device

Allow devlink_alloc_ns() to be called with dev=NULL to support
device-less devlink instances. When dev is NULL, the instance is
identified over netlink using "devlink_index" as bus_name and
the decimal index value as dev_name.

> diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h
> index 1ba3436db4ae..7de2d8cc862f 100644
> --- a/include/uapi/linux/devlink.h
> +++ b/include/uapi/linux/devlink.h
> @@ -19,6 +19,8 @@
>  #define DEVLINK_GENL_VERSION 0x1
>  #define DEVLINK_GENL_MCGRP_CONFIG_NAME "config"
>
> +#define DEVLINK_INDEX_BUS_NAME "devlink_index"
> +
>  enum devlink_command {
>  	/* don't change the order or add anything between, this is ABI! */
>  	DEVLINK_CMD_UNSPEC,
> diff --git a/net/devlink/core.c b/net/devlink/core.c
> index 85e83a3b082a..9cdda570e584 100644
> --- a/net/devlink/core.c
> +++ b/net/devlink/core.c

[ ... ]

> @@ -445,7 +448,7 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops,
>  	static u32 last_id;
>  	int ret;
>
> -	WARN_ON(!ops || !dev);
> +	WARN_ON(!ops);

The kdoc comment for devlink_alloc_ns() describes @dev as 'parent device'
but doesn't document that dev can now be NULL to create a device-less
devlink instance. Could the kdoc be updated to describe the new behavior
when dev is NULL?

>  	if (!devlink_reload_actions_valid(ops))
>  		return NULL;
>
> @@ -453,14 +456,22 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops,
>  	if (!devlink)
>  		return NULL;
>
> +	if (dev) {
> +		devlink->dev = get_device(dev);
> +		devlink->bus_name = dev->bus->name;
> +		devlink->dev_name = dev_name(dev);
> +	} else {
> +		devlink->bus_name = DEVLINK_INDEX_BUS_NAME;
> +		devlink->dev_name = kasprintf(GFP_KERNEL, "%u", devlink->index);
> +		if (!devlink->dev_name)
> +			goto err_kasprintf;
> +	}
> +
>  	ret = xa_alloc_cyclic(&devlinks, &devlink->index, devlink, xa_limit_31b,
>  			      &last_id, GFP_KERNEL);
>  	if (ret < 0)
>  		goto err_xa_alloc;

Does the kasprintf() call format devlink->index correctly? The devlink
struct is allocated with kvzalloc() which zero-fills it, so devlink->index
is still 0 when kasprintf() reads it. The xa_alloc_cyclic() that assigns
the real index happens afterward.

This means dev_name will always be "0" for device-less devlink instances,
regardless of the actual index assigned by xa_alloc_cyclic(). This breaks
the index-based lookup in devlink_get_from_attrs_lock(), which parses
dev_name back to an index with kstrtoul() and looks it up in the xarray.

The commit message states the instance should be "identified over netlink
using devlink_index as bus_name and the decimal index value as dev_name",
but with dev_name always being "0", all device-less instances would have
the same identifier.

Should the kasprintf() call be moved after xa_alloc_cyclic() succeeds?

>
> -	devlink->dev = get_device(dev);
> -	devlink->bus_name = dev->bus->name;
> -	devlink->dev_name = dev_name(dev);
>  	devlink->ops = ops;

[ ... ]

> @@ -486,6 +497,11 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops,
>  	return devlink;
>
>  err_xa_alloc:
> +	if (devlink->dev)
> +		put_device(devlink->dev);
> +	else
> +		kfree(devlink->dev_name);
> +err_kasprintf:
>  	kvfree(devlink);
>  	return NULL;
>  }

[ ... ]

  reply	other threads:[~2026-02-25  2:23 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-23 14:55 [PATCH net-next 00/10] devlink: introduce shared devlink instance for PFs on same chip Jiri Pirko
2026-02-23 14:55 ` [PATCH net-next 01/10] devlink: expose devlink instance index over netlink Jiri Pirko
2026-02-23 14:55 ` [PATCH net-next 02/10] devlink: store bus_name and dev_name pointers in struct devlink Jiri Pirko
2026-02-23 14:55 ` [PATCH net-next 03/10] devlink: avoid extra iterations when found devlink is not registered Jiri Pirko
2026-02-23 14:55 ` [PATCH net-next 04/10] devlink: allow to use devlink index as a command handle Jiri Pirko
2026-02-23 14:55 ` [PATCH net-next 05/10] devlink: support index-based lookup via bus_name/dev_name handle Jiri Pirko
2026-02-25  2:22   ` Jakub Kicinski
2026-02-25  2:23   ` [net-next,05/10] " Jakub Kicinski
2026-02-23 14:55 ` [PATCH net-next 06/10] devlink: add devlink_dev_driver_name() helper and use it in trace events Jiri Pirko
2026-02-25  2:23   ` [net-next,06/10] " Jakub Kicinski
2026-02-23 14:55 ` [PATCH net-next 07/10] devlink: allow devlink instance allocation without a backing device Jiri Pirko
2026-02-25  2:23   ` Jakub Kicinski [this message]
2026-02-23 14:55 ` [PATCH net-next 08/10] devlink: introduce shared devlink instance for PFs on same chip Jiri Pirko
2026-02-25  2:23   ` [net-next,08/10] " Jakub Kicinski
2026-02-23 14:55 ` [PATCH net-next 09/10] documentation: networking: add shared devlink documentation Jiri Pirko
2026-02-25  2:23   ` [net-next,09/10] " Jakub Kicinski
2026-02-23 14:55 ` [PATCH net-next 10/10] net/mlx5: Add a shared devlink instance for PFs on same chip Jiri Pirko

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=20260225022334.998075-1-kuba@kernel.org \
    --to=kuba@kernel.org \
    --cc=andrew+netdev@lunn.ch \
    --cc=chuck.lever@oracle.com \
    --cc=cjubran@nvidia.com \
    --cc=corbet@lwn.net \
    --cc=daniel.zahka@gmail.com \
    --cc=davem@davemloft.net \
    --cc=donald.hunter@gmail.com \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=jiri@nvidia.com \
    --cc=jiri@resnulli.us \
    --cc=leon@kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=matttbe@kernel.org \
    --cc=mbloch@nvidia.com \
    --cc=mhiramat@kernel.org \
    --cc=mschmidt@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=przemyslaw.kitszel@intel.com \
    --cc=rostedt@goodmis.org \
    --cc=saeedm@nvidia.com \
    --cc=skhan@linuxfoundation.org \
    --cc=tariqt@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.