All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: Tariq Toukan <tariqt@nvidia.com>
Cc: Eric Dumazet <edumazet@google.com>,
	Paolo Abeni <pabeni@redhat.com>,
	Andrew Lunn <andrew+netdev@lunn.ch>,
	"David S. Miller" <davem@davemloft.net>,
	Simon Horman <horms@kernel.org>,
	Donald Hunter <donald.hunter@gmail.com>,
	Jiri Pirko <jiri@resnulli.us>, Jonathan Corbet <corbet@lwn.net>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Saeed Mahameed <saeedm@nvidia.com>,
	"Leon Romanovsky" <leon@kernel.org>,
	Mark Bloch <mbloch@nvidia.com>, Shuah Khan <shuah@kernel.org>,
	Chuck Lever <chuck.lever@oracle.com>,
	"Matthieu Baerts (NGI0)" <matttbe@kernel.org>,
	Carolina Jubran <cjubran@nvidia.com>,
	Or Har-Toov <ohartoov@nvidia.com>,
	Moshe Shemesh <moshe@nvidia.com>,
	Dragos Tatulea <dtatulea@nvidia.com>,
	Shahar Shitrit <shshitrit@nvidia.com>,
	Daniel Zahka <daniel.zahka@gmail.com>,
	Jacob Keller <jacob.e.keller@intel.com>,
	Cosmin Ratiu <cratiu@nvidia.com>, Parav Pandit <parav@nvidia.com>,
	Shay Drori <shayd@nvidia.com>,
	"Adithya Jayachandran" <ajayachandra@nvidia.com>,
	Kees Cook <kees@kernel.org>,
	"Daniel Jurgens" <danielj@nvidia.com>, <netdev@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <linux-doc@vger.kernel.org>,
	<linux-rdma@vger.kernel.org>, <linux-kselftest@vger.kernel.org>,
	Gal Pressman <gal@nvidia.com>
Subject: Re: [PATCH net-next V4 10/12] devlink: Add resource scope filtering to resource dump
Date: Thu, 2 Apr 2026 19:02:19 -0700	[thread overview]
Message-ID: <20260402190219.61ea7da1@kernel.org> (raw)
In-Reply-To: <20260401184947.135205-11-tariqt@nvidia.com>

On Wed, 1 Apr 2026 21:49:45 +0300 Tariq Toukan wrote:
> @@ -873,6 +881,16 @@ attribute-sets:
>          doc: Unique devlink instance index.
>          checks:
>            max: u32-max
> +      -
> +        name: resource-scope-mask
> +        type: bitfield32

no need for a bitfield here, this is a simpler selector
bitfield is for cases when we need to update some persistent
state, in that case we want to indicate which bits we intend
to update:

	cfg = (cfg & ~bf.mask) | bf.val

scope is a straight attribute, there's no updating of anything.

u32 or unit would do

> +        enum: resource-scope
> +        enum-as-flags: true
> +        doc: |
> +          Bitmask selecting which resource classes to include in a
> +          resource-dump response. Bit 0 (dev) selects device-level
> +          resources; bit 1 (port) selects port-level resources.
> +          When absent all classes are returned.
>    -
>      name: dl-dev-stats
>      subset-of: devlink
> @@ -1775,7 +1793,11 @@ operations:
>              - resource-list
>        dump:
>          request:
> -          attributes: *dev-id-attrs
> +          attributes:
> +            - bus-name
> +            - dev-name
> +            - index
> +            - resource-scope-mask
>          reply: *resource-dump-reply
>  
>      -
> diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h
> index 7de2d8cc862f..e0a0b523ce5c 100644
> --- a/include/uapi/linux/devlink.h
> +++ b/include/uapi/linux/devlink.h
> @@ -645,6 +645,7 @@ enum devlink_attr {
>  	DEVLINK_ATTR_PARAM_RESET_DEFAULT,	/* flag */
>  
>  	DEVLINK_ATTR_INDEX,			/* uint */
> +	DEVLINK_ATTR_RESOURCE_SCOPE_MASK,	/* bitfield32 */
>  
>  	/* Add new attributes above here, update the spec in
>  	 * Documentation/netlink/specs/devlink.yaml and re-generate
> @@ -704,6 +705,22 @@ enum devlink_resource_unit {
>  	DEVLINK_RESOURCE_UNIT_ENTRY,
>  };
>  
> +enum devlink_resource_scope {
> +	DEVLINK_RESOURCE_SCOPE_DEV_BIT,
> +	DEVLINK_RESOURCE_SCOPE_PORT_BIT,
> +
> +	__DEVLINK_RESOURCE_SCOPE_MAX_BIT,
> +	DEVLINK_RESOURCE_SCOPE_MAX_BIT =

do we need this? it's not an attr enum all we care about here is 
the mask, really so just a trailing value which is max real value + 1
is enough for all users?

> +		__DEVLINK_RESOURCE_SCOPE_MAX_BIT - 1
> +};
> +
> +#define DEVLINK_RESOURCE_SCOPE_DEV \
> +	_BITUL(DEVLINK_RESOURCE_SCOPE_DEV_BIT)
> +#define DEVLINK_RESOURCE_SCOPE_PORT \
> +	_BITUL(DEVLINK_RESOURCE_SCOPE_PORT_BIT)
> +#define DEVLINK_RESOURCE_SCOPE_VALID_MASK \
> +	(_BITUL(__DEVLINK_RESOURCE_SCOPE_MAX_BIT) - 1)
> +
>  enum devlink_port_fn_attr_cap {
>  	DEVLINK_PORT_FN_ATTR_CAP_ROCE_BIT,
>  	DEVLINK_PORT_FN_ATTR_CAP_MIGRATABLE_BIT,

> +static u32 devlink_resource_scope_get(struct nlattr **attrs, int *flags)
> +{
> +	struct nla_bitfield32 scope;
> +	u32 value;
> +
> +	if (!attrs || !attrs[DEVLINK_ATTR_RESOURCE_SCOPE_MASK])
> +		return DEVLINK_RESOURCE_SCOPE_VALID_MASK;
> +
> +	scope = nla_get_bitfield32(attrs[DEVLINK_ATTR_RESOURCE_SCOPE_MASK]);
> +	value = scope.value & scope.selector;
> +	if (value != DEVLINK_RESOURCE_SCOPE_VALID_MASK)
> +		*flags |= NLM_F_DUMP_FILTERED;
> +
> +	return value;
> +}
> +
>  static int
>  devlink_resource_dump_fill_one(struct sk_buff *skb, struct devlink *devlink,
>  			       struct devlink_port *devlink_port,
> @@ -400,16 +416,27 @@ devlink_nl_resource_dump_one(struct sk_buff *skb, struct devlink *devlink,
>  	struct devlink_nl_dump_state *state = devlink_dump_state(cb);
>  	struct devlink_port *devlink_port;
>  	unsigned long port_idx;
> +	u32 scope;
>  	int err;
>  
> -	if (!state->port_number) {
> +	scope = devlink_resource_scope_get(genl_info_dump(cb)->attrs, &flags);
> +	if (!scope) {
> +		NL_SET_ERR_MSG_ATTR(genl_info_dump(cb)->extack,
> +				    genl_info_dump(cb)->attrs[DEVLINK_ATTR_RESOURCE_SCOPE_MASK],

we have genl_info_dump(cb) 3 times here, let's save the pointer 
on the stack to make the lines shorter.

> +				    "empty resource scope selection");
> +		return -EINVAL;
> +	}
> +	if (!state->port_number && (scope & DEVLINK_RESOURCE_SCOPE_DEV)) {
>  		err = devlink_resource_dump_fill_one(skb, devlink, NULL,
> -						     cb, flags, &state->idx);
> +						     cb, flags,
> +						     &state->idx);
>  		if (err)
>  			return err;
>  		state->idx = 0;
>  	}
>  
> +	if (!(scope & DEVLINK_RESOURCE_SCOPE_PORT))
> +		goto out;
>  	xa_for_each_start(&devlink->ports, port_idx, devlink_port,
>  			  state->port_number ? state->port_number - 1 : 0) {
>  		err = devlink_resource_dump_fill_one(skb, devlink, devlink_port,
> @@ -420,6 +447,7 @@ devlink_nl_resource_dump_one(struct sk_buff *skb, struct devlink *devlink,
>  		}
>  		state->idx = 0;
>  	}
> +out:
>  	state->port_number = 0;
>  	return 0;
>  }


  reply	other threads:[~2026-04-03  2:02 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-01 18:49 [PATCH net-next V4 00/12] devlink: add per-port resource support Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 01/12] devlink: Refactor resource functions to be generic Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 02/12] devlink: Add port-level resource registration infrastructure Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 03/12] net/mlx5: Register SF resource on PF port representor Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 04/12] netdevsim: Add devlink port resource registration Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 05/12] devlink: Add dump support for device-level resources Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 06/12] devlink: Include port resources in resource dump dumpit Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 07/12] devlink: Add port-specific option to resource dump doit Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 08/12] selftest: netdevsim: Add devlink port resource doit test Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 09/12] devlink: Document port-level resources and full dump Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 10/12] devlink: Add resource scope filtering to resource dump Tariq Toukan
2026-04-03  2:02   ` Jakub Kicinski [this message]
2026-04-06 16:18     ` Or Har-Toov
2026-04-01 18:49 ` [PATCH net-next V4 11/12] selftest: netdevsim: Add resource dump and scope filter test Tariq Toukan
2026-04-01 18:49 ` [PATCH net-next V4 12/12] devlink: Document resource scope filtering Tariq Toukan

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=20260402190219.61ea7da1@kernel.org \
    --to=kuba@kernel.org \
    --cc=ajayachandra@nvidia.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=chuck.lever@oracle.com \
    --cc=cjubran@nvidia.com \
    --cc=corbet@lwn.net \
    --cc=cratiu@nvidia.com \
    --cc=daniel.zahka@gmail.com \
    --cc=danielj@nvidia.com \
    --cc=davem@davemloft.net \
    --cc=donald.hunter@gmail.com \
    --cc=dtatulea@nvidia.com \
    --cc=edumazet@google.com \
    --cc=gal@nvidia.com \
    --cc=horms@kernel.org \
    --cc=jacob.e.keller@intel.com \
    --cc=jiri@resnulli.us \
    --cc=kees@kernel.org \
    --cc=leon@kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=matttbe@kernel.org \
    --cc=mbloch@nvidia.com \
    --cc=moshe@nvidia.com \
    --cc=netdev@vger.kernel.org \
    --cc=ohartoov@nvidia.com \
    --cc=pabeni@redhat.com \
    --cc=parav@nvidia.com \
    --cc=saeedm@nvidia.com \
    --cc=shayd@nvidia.com \
    --cc=shshitrit@nvidia.com \
    --cc=shuah@kernel.org \
    --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.