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 |
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>
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.
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.
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
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.
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 --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,