Skip to content

Commit 2e246bc

Browse files
committed
Merge branch 'devlink-move-port-ops-into-separate-structure'
Jiri Pirko says: ==================== devlink: move port ops into separate structure In devlink, some of the objects have separate ops registered alongside with the object itself. Port however have ops in devlink_ops structure. For drivers what register multiple kinds of ports with different ops this is not convenient. This patchset changes does following changes: 1) Introduces devlink_port_ops with functions that allow devlink port to be registered passing a pointer to driver port ops. (patch #1) 2) Converts drivers to define port_ops and register ports passing the ops pointer. (patches #2, #3, #4, #6, #8, and #9) 3) Moves ops from devlink_ops struct to devlink_port_ops. (patches #5, #7, #10-15) No functional changes. ==================== Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents bc638ea + 4b5ed2b commit 2e246bc

File tree

11 files changed

+298
-279
lines changed

11 files changed

+298
-279
lines changed

drivers/net/ethernet/intel/ice/ice_devlink.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,8 +1256,6 @@ static const struct devlink_ops ice_devlink_ops = {
12561256
BIT(DEVLINK_RELOAD_ACTION_FW_ACTIVATE),
12571257
.reload_down = ice_devlink_reload_down,
12581258
.reload_up = ice_devlink_reload_up,
1259-
.port_split = ice_devlink_port_split,
1260-
.port_unsplit = ice_devlink_port_unsplit,
12611259
.eswitch_mode_get = ice_eswitch_mode_get,
12621260
.eswitch_mode_set = ice_eswitch_mode_set,
12631261
.info_get = ice_devlink_info_get,
@@ -1512,6 +1510,11 @@ ice_devlink_set_port_split_options(struct ice_pf *pf,
15121510
ice_active_port_option = active_idx;
15131511
}
15141512

1513+
static const struct devlink_port_ops ice_devlink_port_ops = {
1514+
.port_split = ice_devlink_port_split,
1515+
.port_unsplit = ice_devlink_port_unsplit,
1516+
};
1517+
15151518
/**
15161519
* ice_devlink_create_pf_port - Create a devlink port for this PF
15171520
* @pf: the PF to create a devlink port for
@@ -1551,7 +1554,8 @@ int ice_devlink_create_pf_port(struct ice_pf *pf)
15511554
devlink_port_attrs_set(devlink_port, &attrs);
15521555
devlink = priv_to_devlink(pf);
15531556

1554-
err = devlink_port_register(devlink, devlink_port, vsi->idx);
1557+
err = devlink_port_register_with_ops(devlink, devlink_port, vsi->idx,
1558+
&ice_devlink_port_ops);
15551559
if (err) {
15561560
dev_err(dev, "Failed to create devlink port for PF %d, error %d\n",
15571561
pf->hw.pf_id, err);

drivers/net/ethernet/mellanox/mlx4/main.c

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3024,13 +3024,43 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
30243024
}
30253025
}
30263026

3027+
static int mlx4_devlink_port_type_set(struct devlink_port *devlink_port,
3028+
enum devlink_port_type port_type)
3029+
{
3030+
struct mlx4_port_info *info = container_of(devlink_port,
3031+
struct mlx4_port_info,
3032+
devlink_port);
3033+
enum mlx4_port_type mlx4_port_type;
3034+
3035+
switch (port_type) {
3036+
case DEVLINK_PORT_TYPE_AUTO:
3037+
mlx4_port_type = MLX4_PORT_TYPE_AUTO;
3038+
break;
3039+
case DEVLINK_PORT_TYPE_ETH:
3040+
mlx4_port_type = MLX4_PORT_TYPE_ETH;
3041+
break;
3042+
case DEVLINK_PORT_TYPE_IB:
3043+
mlx4_port_type = MLX4_PORT_TYPE_IB;
3044+
break;
3045+
default:
3046+
return -EOPNOTSUPP;
3047+
}
3048+
3049+
return __set_port_type(info, mlx4_port_type);
3050+
}
3051+
3052+
static const struct devlink_port_ops mlx4_devlink_port_ops = {
3053+
.port_type_set = mlx4_devlink_port_type_set,
3054+
};
3055+
30273056
static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
30283057
{
30293058
struct devlink *devlink = priv_to_devlink(mlx4_priv(dev));
30303059
struct mlx4_port_info *info = &mlx4_priv(dev)->port[port];
30313060
int err;
30323061

3033-
err = devl_port_register(devlink, &info->devlink_port, port);
3062+
err = devl_port_register_with_ops(devlink, &info->devlink_port, port,
3063+
&mlx4_devlink_port_ops);
30343064
if (err)
30353065
return err;
30363066

@@ -3874,31 +3904,6 @@ static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data,
38743904
return err;
38753905
}
38763906

3877-
static int mlx4_devlink_port_type_set(struct devlink_port *devlink_port,
3878-
enum devlink_port_type port_type)
3879-
{
3880-
struct mlx4_port_info *info = container_of(devlink_port,
3881-
struct mlx4_port_info,
3882-
devlink_port);
3883-
enum mlx4_port_type mlx4_port_type;
3884-
3885-
switch (port_type) {
3886-
case DEVLINK_PORT_TYPE_AUTO:
3887-
mlx4_port_type = MLX4_PORT_TYPE_AUTO;
3888-
break;
3889-
case DEVLINK_PORT_TYPE_ETH:
3890-
mlx4_port_type = MLX4_PORT_TYPE_ETH;
3891-
break;
3892-
case DEVLINK_PORT_TYPE_IB:
3893-
mlx4_port_type = MLX4_PORT_TYPE_IB;
3894-
break;
3895-
default:
3896-
return -EOPNOTSUPP;
3897-
}
3898-
3899-
return __set_port_type(info, mlx4_port_type);
3900-
}
3901-
39023907
static void mlx4_devlink_param_load_driverinit_values(struct devlink *devlink)
39033908
{
39043909
struct mlx4_priv *priv = devlink_priv(devlink);
@@ -3983,7 +3988,6 @@ static int mlx4_devlink_reload_up(struct devlink *devlink, enum devlink_reload_a
39833988
}
39843989

39853990
static const struct devlink_ops mlx4_devlink_ops = {
3986-
.port_type_set = mlx4_devlink_port_type_set,
39873991
.reload_actions = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT),
39883992
.reload_down = mlx4_devlink_reload_down,
39893993
.reload_up = mlx4_devlink_reload_up,

drivers/net/ethernet/mellanox/mlx5/core/devlink.c

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -310,25 +310,16 @@ static const struct devlink_ops mlx5_devlink_ops = {
310310
.eswitch_inline_mode_get = mlx5_devlink_eswitch_inline_mode_get,
311311
.eswitch_encap_mode_set = mlx5_devlink_eswitch_encap_mode_set,
312312
.eswitch_encap_mode_get = mlx5_devlink_eswitch_encap_mode_get,
313-
.port_function_hw_addr_get = mlx5_devlink_port_function_hw_addr_get,
314-
.port_function_hw_addr_set = mlx5_devlink_port_function_hw_addr_set,
315313
.rate_leaf_tx_share_set = mlx5_esw_devlink_rate_leaf_tx_share_set,
316314
.rate_leaf_tx_max_set = mlx5_esw_devlink_rate_leaf_tx_max_set,
317315
.rate_node_tx_share_set = mlx5_esw_devlink_rate_node_tx_share_set,
318316
.rate_node_tx_max_set = mlx5_esw_devlink_rate_node_tx_max_set,
319317
.rate_node_new = mlx5_esw_devlink_rate_node_new,
320318
.rate_node_del = mlx5_esw_devlink_rate_node_del,
321319
.rate_leaf_parent_set = mlx5_esw_devlink_rate_parent_set,
322-
.port_fn_roce_get = mlx5_devlink_port_fn_roce_get,
323-
.port_fn_roce_set = mlx5_devlink_port_fn_roce_set,
324-
.port_fn_migratable_get = mlx5_devlink_port_fn_migratable_get,
325-
.port_fn_migratable_set = mlx5_devlink_port_fn_migratable_set,
326320
#endif
327321
#ifdef CONFIG_MLX5_SF_MANAGER
328322
.port_new = mlx5_devlink_sf_port_new,
329-
.port_del = mlx5_devlink_sf_port_del,
330-
.port_fn_state_get = mlx5_devlink_sf_port_fn_state_get,
331-
.port_fn_state_set = mlx5_devlink_sf_port_fn_state_set,
332323
#endif
333324
.flash_update = mlx5_devlink_flash_update,
334325
.info_get = mlx5_devlink_info_get,

drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ static void mlx5_esw_dl_port_free(struct devlink_port *dl_port)
6565
kfree(dl_port);
6666
}
6767

68+
static const struct devlink_port_ops mlx5_esw_dl_port_ops = {
69+
.port_fn_hw_addr_get = mlx5_devlink_port_fn_hw_addr_get,
70+
.port_fn_hw_addr_set = mlx5_devlink_port_fn_hw_addr_set,
71+
.port_fn_roce_get = mlx5_devlink_port_fn_roce_get,
72+
.port_fn_roce_set = mlx5_devlink_port_fn_roce_set,
73+
.port_fn_migratable_get = mlx5_devlink_port_fn_migratable_get,
74+
.port_fn_migratable_set = mlx5_devlink_port_fn_migratable_set,
75+
};
76+
6877
int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, u16 vport_num)
6978
{
7079
struct mlx5_core_dev *dev = esw->dev;
@@ -87,7 +96,8 @@ int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, u16 vport_
8796

8897
devlink = priv_to_devlink(dev);
8998
dl_port_index = mlx5_esw_vport_to_devlink_port_index(dev, vport_num);
90-
err = devl_port_register(devlink, dl_port, dl_port_index);
99+
err = devl_port_register_with_ops(devlink, dl_port, dl_port_index,
100+
&mlx5_esw_dl_port_ops);
91101
if (err)
92102
goto reg_err;
93103

@@ -134,6 +144,20 @@ struct devlink_port *mlx5_esw_offloads_devlink_port(struct mlx5_eswitch *esw, u1
134144
return IS_ERR(vport) ? ERR_CAST(vport) : vport->dl_port;
135145
}
136146

147+
static const struct devlink_port_ops mlx5_esw_dl_sf_port_ops = {
148+
#ifdef CONFIG_MLX5_SF_MANAGER
149+
.port_del = mlx5_devlink_sf_port_del,
150+
#endif
151+
.port_fn_hw_addr_get = mlx5_devlink_port_fn_hw_addr_get,
152+
.port_fn_hw_addr_set = mlx5_devlink_port_fn_hw_addr_set,
153+
.port_fn_roce_get = mlx5_devlink_port_fn_roce_get,
154+
.port_fn_roce_set = mlx5_devlink_port_fn_roce_set,
155+
#ifdef CONFIG_MLX5_SF_MANAGER
156+
.port_fn_state_get = mlx5_devlink_sf_port_fn_state_get,
157+
.port_fn_state_set = mlx5_devlink_sf_port_fn_state_set,
158+
#endif
159+
};
160+
137161
int mlx5_esw_devlink_sf_port_register(struct mlx5_eswitch *esw, struct devlink_port *dl_port,
138162
u16 vport_num, u32 controller, u32 sfnum)
139163
{
@@ -156,7 +180,8 @@ int mlx5_esw_devlink_sf_port_register(struct mlx5_eswitch *esw, struct devlink_p
156180
devlink_port_attrs_pci_sf_set(dl_port, controller, pfnum, sfnum, !!controller);
157181
devlink = priv_to_devlink(dev);
158182
dl_port_index = mlx5_esw_vport_to_devlink_port_index(dev, vport_num);
159-
err = devl_port_register(devlink, dl_port, dl_port_index);
183+
err = devl_port_register_with_ops(devlink, dl_port, dl_port_index,
184+
&mlx5_esw_dl_sf_port_ops);
160185
if (err)
161186
return err;
162187

drivers/net/ethernet/mellanox/mlx5/core/eswitch.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -506,12 +506,12 @@ int mlx5_devlink_eswitch_encap_mode_set(struct devlink *devlink,
506506
struct netlink_ext_ack *extack);
507507
int mlx5_devlink_eswitch_encap_mode_get(struct devlink *devlink,
508508
enum devlink_eswitch_encap_mode *encap);
509-
int mlx5_devlink_port_function_hw_addr_get(struct devlink_port *port,
510-
u8 *hw_addr, int *hw_addr_len,
511-
struct netlink_ext_ack *extack);
512-
int mlx5_devlink_port_function_hw_addr_set(struct devlink_port *port,
513-
const u8 *hw_addr, int hw_addr_len,
514-
struct netlink_ext_ack *extack);
509+
int mlx5_devlink_port_fn_hw_addr_get(struct devlink_port *port,
510+
u8 *hw_addr, int *hw_addr_len,
511+
struct netlink_ext_ack *extack);
512+
int mlx5_devlink_port_fn_hw_addr_set(struct devlink_port *port,
513+
const u8 *hw_addr, int hw_addr_len,
514+
struct netlink_ext_ack *extack);
515515
int mlx5_devlink_port_fn_roce_get(struct devlink_port *port, bool *is_enabled,
516516
struct netlink_ext_ack *extack);
517517
int mlx5_devlink_port_fn_roce_set(struct devlink_port *port, bool enable,

drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3957,9 +3957,9 @@ is_port_function_supported(struct mlx5_eswitch *esw, u16 vport_num)
39573957
mlx5_esw_is_sf_vport(esw, vport_num);
39583958
}
39593959

3960-
int mlx5_devlink_port_function_hw_addr_get(struct devlink_port *port,
3961-
u8 *hw_addr, int *hw_addr_len,
3962-
struct netlink_ext_ack *extack)
3960+
int mlx5_devlink_port_fn_hw_addr_get(struct devlink_port *port,
3961+
u8 *hw_addr, int *hw_addr_len,
3962+
struct netlink_ext_ack *extack)
39633963
{
39643964
struct mlx5_eswitch *esw;
39653965
struct mlx5_vport *vport;
@@ -3986,9 +3986,9 @@ int mlx5_devlink_port_function_hw_addr_get(struct devlink_port *port,
39863986
return 0;
39873987
}
39883988

3989-
int mlx5_devlink_port_function_hw_addr_set(struct devlink_port *port,
3990-
const u8 *hw_addr, int hw_addr_len,
3991-
struct netlink_ext_ack *extack)
3989+
int mlx5_devlink_port_fn_hw_addr_set(struct devlink_port *port,
3990+
const u8 *hw_addr, int hw_addr_len,
3991+
struct netlink_ext_ack *extack)
39923992
{
39933993
struct mlx5_eswitch *esw;
39943994
u16 vport_num;

drivers/net/ethernet/mellanox/mlxsw/core.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1723,8 +1723,6 @@ static const struct devlink_ops mlxsw_devlink_ops = {
17231723
BIT(DEVLINK_RELOAD_ACTION_FW_ACTIVATE),
17241724
.reload_down = mlxsw_devlink_core_bus_device_reload_down,
17251725
.reload_up = mlxsw_devlink_core_bus_device_reload_up,
1726-
.port_split = mlxsw_devlink_port_split,
1727-
.port_unsplit = mlxsw_devlink_port_unsplit,
17281726
.sb_pool_get = mlxsw_devlink_sb_pool_get,
17291727
.sb_pool_set = mlxsw_devlink_sb_pool_set,
17301728
.sb_port_pool_get = mlxsw_devlink_sb_port_pool_get,
@@ -3116,6 +3114,11 @@ u64 mlxsw_core_res_get(struct mlxsw_core *mlxsw_core,
31163114
}
31173115
EXPORT_SYMBOL(mlxsw_core_res_get);
31183116

3117+
static const struct devlink_port_ops mlxsw_devlink_port_ops = {
3118+
.port_split = mlxsw_devlink_port_split,
3119+
.port_unsplit = mlxsw_devlink_port_unsplit,
3120+
};
3121+
31193122
static int __mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port,
31203123
enum devlink_port_flavour flavour,
31213124
u8 slot_index, u32 port_number, bool split,
@@ -3150,7 +3153,8 @@ static int __mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u16 local_port,
31503153
devlink_port_linecard_set(devlink_port,
31513154
linecard->devlink_linecard);
31523155
}
3153-
err = devl_port_register(devlink, devlink_port, local_port);
3156+
err = devl_port_register_with_ops(devlink, devlink_port, local_port,
3157+
&mlxsw_devlink_port_ops);
31543158
if (err)
31553159
memset(mlxsw_core_port, 0, sizeof(*mlxsw_core_port));
31563160
return err;

drivers/net/ethernet/netronome/nfp/nfp_devlink.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,6 @@ nfp_devlink_flash_update(struct devlink *devlink,
311311
}
312312

313313
const struct devlink_ops nfp_devlink_ops = {
314-
.port_split = nfp_devlink_port_split,
315-
.port_unsplit = nfp_devlink_port_unsplit,
316314
.sb_pool_get = nfp_devlink_sb_pool_get,
317315
.sb_pool_set = nfp_devlink_sb_pool_set,
318316
.eswitch_mode_get = nfp_devlink_eswitch_mode_get,
@@ -321,6 +319,11 @@ const struct devlink_ops nfp_devlink_ops = {
321319
.flash_update = nfp_devlink_flash_update,
322320
};
323321

322+
static const struct devlink_port_ops nfp_devlink_port_ops = {
323+
.port_split = nfp_devlink_port_split,
324+
.port_unsplit = nfp_devlink_port_unsplit,
325+
};
326+
324327
int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
325328
{
326329
struct devlink_port_attrs attrs = {};
@@ -351,7 +354,8 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
351354

352355
devlink = priv_to_devlink(app->pf);
353356

354-
return devl_port_register(devlink, &port->dl_port, port->eth_id);
357+
return devl_port_register_with_ops(devlink, &port->dl_port,
358+
port->eth_id, &nfp_devlink_port_ops);
355359
}
356360

357361
void nfp_devlink_port_unregister(struct nfp_port *port)

0 commit comments

Comments
 (0)