diff mbox series

[net-next,05/15] devlink: move port_split/unsplit() ops into devlink_port_ops

Message ID 20230524121836.2070879-6-jiri@resnulli.us (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series devlink: move port ops into separate structure | expand

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Clearly marked for net-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 390 this patch: 390
netdev/cc_maintainers warning 2 maintainers not CCed: oss-drivers@corigine.com intel-wired-lan@lists.osuosl.org
netdev/build_clang success Errors and warnings before: 25 this patch: 25
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 540 this patch: 540
netdev/checkpatch warning WARNING: line length of 84 exceeds 80 columns
netdev/kdoc success Errors and warnings before: 16 this patch: 16
netdev/source_inline success Was 0 now: 0

Commit Message

Jiri Pirko May 24, 2023, 12:18 p.m. UTC
From: Jiri Pirko <jiri@nvidia.com>

Move port_split/unsplit() from devlink_ops into newly introduced
devlink_port_ops.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
---
 drivers/net/ethernet/intel/ice/ice_devlink.c     |  4 ++--
 drivers/net/ethernet/mellanox/mlxsw/core.c       |  4 ++--
 drivers/net/ethernet/netronome/nfp/nfp_devlink.c |  4 ++--
 include/net/devlink.h                            | 11 +++++++----
 net/devlink/leftover.c                           | 10 +++++-----
 5 files changed, 18 insertions(+), 15 deletions(-)

Comments

Jesse Brandeburg May 24, 2023, 5:32 p.m. UTC | #1
On 5/24/2023 5:18 AM, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@nvidia.com>
> 
> Move port_split/unsplit() from devlink_ops into newly introduced
> devlink_port_ops.
> 
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_devlink.c     |  4 ++--
>  drivers/net/ethernet/mellanox/mlxsw/core.c       |  4 ++--
>  drivers/net/ethernet/netronome/nfp/nfp_devlink.c |  4 ++--
>  include/net/devlink.h                            | 11 +++++++----
>  net/devlink/leftover.c                           | 10 +++++-----
>  5 files changed, 18 insertions(+), 15 deletions(-)

For the ice driver changes (and topically reviewed the other drivers in
this patch)

Reviewed-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Jakub Kicinski May 25, 2023, 4:53 a.m. UTC | #2
On Wed, 24 May 2023 14:18:26 +0200 Jiri Pirko wrote:
>  /**
>   * struct devlink_port_ops - Port operations
> + * @port_split: Callback used to split the port into multiple ones.
> + * @port_unsplit: Callback used to unsplit the port group back into
> + *		  a single port.
>   */
>  struct devlink_port_ops {
> +	int (*port_split)(struct devlink *devlink, struct devlink_port *port,
> +			  unsigned int count, struct netlink_ext_ack *extack);
> +	int (*port_unsplit)(struct devlink *devlink, struct devlink_port *port,
> +			    struct netlink_ext_ack *extack);
>  };

Two random take it or leave it comments: (1) since these are port ops
now do they need the port_* prefix? (2) I've become partial to adding
the kdoc inline in op structs:

/**
 * struct x - it is the X struct
 */
struct x {
	/** @an_op: its an op */
	int (*an_op)(int arg);
};

I think it's because every time I look at struct net_device_ops 
a little part of me gives up.
Jiri Pirko May 25, 2023, 6:05 a.m. UTC | #3
Thu, May 25, 2023 at 06:53:01AM CEST, kuba@kernel.org wrote:
>On Wed, 24 May 2023 14:18:26 +0200 Jiri Pirko wrote:
>>  /**
>>   * struct devlink_port_ops - Port operations
>> + * @port_split: Callback used to split the port into multiple ones.
>> + * @port_unsplit: Callback used to unsplit the port group back into
>> + *		  a single port.
>>   */
>>  struct devlink_port_ops {
>> +	int (*port_split)(struct devlink *devlink, struct devlink_port *port,
>> +			  unsigned int count, struct netlink_ext_ack *extack);
>> +	int (*port_unsplit)(struct devlink *devlink, struct devlink_port *port,
>> +			    struct netlink_ext_ack *extack);
>>  };
>
>Two random take it or leave it comments: (1) since these are port ops
>now do they need the port_* prefix? (2) I've become partial to adding

Yeah, I'd like to leave them, for grepability purposes.


>the kdoc inline in op structs:
>
>/**
> * struct x - it is the X struct
> */
>struct x {
>	/** @an_op: its an op */
>	int (*an_op)(int arg);
>};
>
>I think it's because every time I look at struct net_device_ops 
>a little part of me gives up.

Does this work? I checked the existing layout of devlink_ops and the
internal comments are ignored by kdoc. Actually the whole devlink_ops
struct is omitted in kdoc. See:
$ scripts/kernel-doc include/net/devlink.h

I followed the format we have for the other ops structures in devlink.h
which works with kernel-doc script.
Petr Machata May 25, 2023, 12:37 p.m. UTC | #4
Jiri Pirko <jiri@resnulli.us> writes:

> From: Jiri Pirko <jiri@nvidia.com>
>
> Move port_split/unsplit() from devlink_ops into newly introduced
> devlink_port_ops.
>
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>

Reviewed-by: Petr Machata <petrm@nvidia.com> # for mlxsw
Tested-by: Petr Machata <petrm@nvidia.com> # for mlxsw
Jakub Kicinski May 25, 2023, 3:27 p.m. UTC | #5
On Thu, 25 May 2023 08:05:22 +0200 Jiri Pirko wrote:
> >I think it's because every time I look at struct net_device_ops 
> >a little part of me gives up.  
> 
> Does this work? I checked the existing layout of devlink_ops and the
> internal comments are ignored by kdoc. Actually the whole devlink_ops
> struct is omitted in kdoc. See:
> $ scripts/kernel-doc include/net/devlink.h

Hm, it should work, it's documented as a legal way to kdoc:

https://www.kernel.org/doc/html/next/doc-guide/kernel-doc.html#in-line-member-documentation-comments

We should ask Jon if you're sure it's broken.
Jiri Pirko May 25, 2023, 4:53 p.m. UTC | #6
Thu, May 25, 2023 at 05:27:03PM CEST, kuba@kernel.org wrote:
>On Thu, 25 May 2023 08:05:22 +0200 Jiri Pirko wrote:
>> >I think it's because every time I look at struct net_device_ops 
>> >a little part of me gives up.  
>> 
>> Does this work? I checked the existing layout of devlink_ops and the
>> internal comments are ignored by kdoc. Actually the whole devlink_ops
>> struct is omitted in kdoc. See:
>> $ scripts/kernel-doc include/net/devlink.h
>
>Hm, it should work, it's documented as a legal way to kdoc:
>
>https://www.kernel.org/doc/html/next/doc-guide/kernel-doc.html#in-line-member-documentation-comments
>
>We should ask Jon if you're sure it's broken.

IDK, you can try, I don't see it there.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/ice/ice_devlink.c b/drivers/net/ethernet/intel/ice/ice_devlink.c
index 6661d12772a3..80dc5445b50d 100644
--- a/drivers/net/ethernet/intel/ice/ice_devlink.c
+++ b/drivers/net/ethernet/intel/ice/ice_devlink.c
@@ -1256,8 +1256,6 @@  static const struct devlink_ops ice_devlink_ops = {
 			  BIT(DEVLINK_RELOAD_ACTION_FW_ACTIVATE),
 	.reload_down = ice_devlink_reload_down,
 	.reload_up = ice_devlink_reload_up,
-	.port_split = ice_devlink_port_split,
-	.port_unsplit = ice_devlink_port_unsplit,
 	.eswitch_mode_get = ice_eswitch_mode_get,
 	.eswitch_mode_set = ice_eswitch_mode_set,
 	.info_get = ice_devlink_info_get,
@@ -1513,6 +1511,8 @@  ice_devlink_set_port_split_options(struct ice_pf *pf,
 }
 
 static const struct devlink_port_ops ice_devlink_port_ops = {
+	.port_split = ice_devlink_port_split,
+	.port_unsplit = ice_devlink_port_unsplit,
 };
 
 /**
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c
index 605881b17ccc..1ccf3b73ed72 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core.c
@@ -1723,8 +1723,6 @@  static const struct devlink_ops mlxsw_devlink_ops = {
 				  BIT(DEVLINK_RELOAD_ACTION_FW_ACTIVATE),
 	.reload_down		= mlxsw_devlink_core_bus_device_reload_down,
 	.reload_up		= mlxsw_devlink_core_bus_device_reload_up,
-	.port_split			= mlxsw_devlink_port_split,
-	.port_unsplit			= mlxsw_devlink_port_unsplit,
 	.sb_pool_get			= mlxsw_devlink_sb_pool_get,
 	.sb_pool_set			= mlxsw_devlink_sb_pool_set,
 	.sb_port_pool_get		= mlxsw_devlink_sb_port_pool_get,
@@ -3117,6 +3115,8 @@  u64 mlxsw_core_res_get(struct mlxsw_core *mlxsw_core,
 EXPORT_SYMBOL(mlxsw_core_res_get);
 
 static const struct devlink_port_ops mlxsw_devlink_port_ops = {
+	.port_split			= mlxsw_devlink_port_split,
+	.port_unsplit			= mlxsw_devlink_port_unsplit,
 };
 
 static int __mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port,
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
index 4e4296ecae7c..8c6954c58a88 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
@@ -311,8 +311,6 @@  nfp_devlink_flash_update(struct devlink *devlink,
 }
 
 const struct devlink_ops nfp_devlink_ops = {
-	.port_split		= nfp_devlink_port_split,
-	.port_unsplit		= nfp_devlink_port_unsplit,
 	.sb_pool_get		= nfp_devlink_sb_pool_get,
 	.sb_pool_set		= nfp_devlink_sb_pool_set,
 	.eswitch_mode_get	= nfp_devlink_eswitch_mode_get,
@@ -322,6 +320,8 @@  const struct devlink_ops nfp_devlink_ops = {
 };
 
 static const struct devlink_port_ops nfp_devlink_port_ops = {
+	.port_split		= nfp_devlink_port_split,
+	.port_unsplit		= nfp_devlink_port_unsplit,
 };
 
 int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
diff --git a/include/net/devlink.h b/include/net/devlink.h
index 850148b98f70..6ddb1fb905b2 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -1276,10 +1276,6 @@  struct devlink_ops {
 			 struct netlink_ext_ack *extack);
 	int (*port_type_set)(struct devlink_port *devlink_port,
 			     enum devlink_port_type port_type);
-	int (*port_split)(struct devlink *devlink, struct devlink_port *port,
-			  unsigned int count, struct netlink_ext_ack *extack);
-	int (*port_unsplit)(struct devlink *devlink, struct devlink_port *port,
-			    struct netlink_ext_ack *extack);
 	int (*sb_pool_get)(struct devlink *devlink, unsigned int sb_index,
 			   u16 pool_index,
 			   struct devlink_sb_pool_info *pool_info);
@@ -1653,8 +1649,15 @@  void devlink_free(struct devlink *devlink);
 
 /**
  * struct devlink_port_ops - Port operations
+ * @port_split: Callback used to split the port into multiple ones.
+ * @port_unsplit: Callback used to unsplit the port group back into
+ *		  a single port.
  */
 struct devlink_port_ops {
+	int (*port_split)(struct devlink *devlink, struct devlink_port *port,
+			  unsigned int count, struct netlink_ext_ack *extack);
+	int (*port_unsplit)(struct devlink *devlink, struct devlink_port *port,
+			    struct netlink_ext_ack *extack);
 };
 
 void devlink_port_init(struct devlink *devlink,
diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c
index ff1c2ed84aba..8646861127a0 100644
--- a/net/devlink/leftover.c
+++ b/net/devlink/leftover.c
@@ -1320,7 +1320,7 @@  static int devlink_nl_cmd_port_split_doit(struct sk_buff *skb,
 
 	if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_PORT_SPLIT_COUNT))
 		return -EINVAL;
-	if (!devlink->ops->port_split)
+	if (!devlink_port->ops || !devlink_port->ops->port_split)
 		return -EOPNOTSUPP;
 
 	count = nla_get_u32(info->attrs[DEVLINK_ATTR_PORT_SPLIT_COUNT]);
@@ -1339,8 +1339,8 @@  static int devlink_nl_cmd_port_split_doit(struct sk_buff *skb,
 		return -EINVAL;
 	}
 
-	return devlink->ops->port_split(devlink, devlink_port, count,
-					info->extack);
+	return devlink_port->ops->port_split(devlink, devlink_port, count,
+					     info->extack);
 }
 
 static int devlink_nl_cmd_port_unsplit_doit(struct sk_buff *skb,
@@ -1349,9 +1349,9 @@  static int devlink_nl_cmd_port_unsplit_doit(struct sk_buff *skb,
 	struct devlink_port *devlink_port = info->user_ptr[1];
 	struct devlink *devlink = info->user_ptr[0];
 
-	if (!devlink->ops->port_unsplit)
+	if (!devlink_port->ops || !devlink_port->ops->port_unsplit)
 		return -EOPNOTSUPP;
-	return devlink->ops->port_unsplit(devlink, devlink_port, info->extack);
+	return devlink_port->ops->port_unsplit(devlink, devlink_port, info->extack);
 }
 
 static int devlink_nl_cmd_port_new_doit(struct sk_buff *skb,