Skip to content

Commit feae908

Browse files
ogerlitzdavem330
authored andcommitted
net/mlx5: Add devlink interface
The devlink interface is initially used to set/get the mode of the SRIOV e-switch. Currently, these are only stubs for get/set, down-stream patch will actually fill them out. Signed-off-by: Or Gerlitz <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 08f4b59 commit feae908

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

drivers/net/ethernet/mellanox/mlx5/core/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
config MLX5_CORE
66
tristate "Mellanox Technologies ConnectX-4 and Connect-IB core driver"
7+
depends on MAY_USE_DEVLINK
78
depends on PCI
89
default n
910
---help---

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
#include <linux/if_ether.h>
3737
#include <linux/if_link.h>
38+
#include <net/devlink.h>
3839
#include <linux/mlx5/device.h>
3940

4041
#define MLX5_MAX_UC_PER_VPORT(dev) \
@@ -205,6 +206,9 @@ mlx5_eswitch_add_send_to_vport_rule(struct mlx5_eswitch *esw, int vport, u32 sqn
205206
struct mlx5_flow_rule *
206207
mlx5_eswitch_create_vport_rx_rule(struct mlx5_eswitch *esw, int vport, u32 tirn);
207208

209+
int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode);
210+
int mlx5_devlink_eswitch_mode_get(struct devlink *devlink, u16 *mode);
211+
208212
#define MLX5_DEBUG_ESWITCH_MASK BIT(3)
209213

210214
#define esw_info(dev, format, ...) \

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,3 +328,13 @@ mlx5_eswitch_create_vport_rx_rule(struct mlx5_eswitch *esw, int vport, u32 tirn)
328328
kfree(match_c);
329329
return flow_rule;
330330
}
331+
332+
int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode)
333+
{
334+
return -EOPNOTSUPP;
335+
}
336+
337+
int mlx5_devlink_eswitch_mode_get(struct devlink *devlink, u16 *mode)
338+
{
339+
return -EOPNOTSUPP;
340+
}

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
#ifdef CONFIG_RFS_ACCEL
5252
#include <linux/cpu_rmap.h>
5353
#endif
54+
#include <net/devlink.h>
5455
#include "mlx5_core.h"
5556
#include "fs_core.h"
5657
#ifdef CONFIG_MLX5_CORE_EN
@@ -1315,19 +1316,28 @@ struct mlx5_core_event_handler {
13151316
void *data);
13161317
};
13171318

1319+
static const struct devlink_ops mlx5_devlink_ops = {
1320+
#ifdef CONFIG_MLX5_CORE_EN
1321+
.eswitch_mode_set = mlx5_devlink_eswitch_mode_set,
1322+
.eswitch_mode_get = mlx5_devlink_eswitch_mode_get,
1323+
#endif
1324+
};
13181325

13191326
static int init_one(struct pci_dev *pdev,
13201327
const struct pci_device_id *id)
13211328
{
13221329
struct mlx5_core_dev *dev;
1330+
struct devlink *devlink;
13231331
struct mlx5_priv *priv;
13241332
int err;
13251333

1326-
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1327-
if (!dev) {
1334+
devlink = devlink_alloc(&mlx5_devlink_ops, sizeof(*dev));
1335+
if (!devlink) {
13281336
dev_err(&pdev->dev, "kzalloc failed\n");
13291337
return -ENOMEM;
13301338
}
1339+
1340+
dev = devlink_priv(devlink);
13311341
priv = &dev->priv;
13321342
priv->pci_dev_data = id->driver_data;
13331343

@@ -1364,24 +1374,32 @@ static int init_one(struct pci_dev *pdev,
13641374
goto clean_health;
13651375
}
13661376

1377+
err = devlink_register(devlink, &pdev->dev);
1378+
if (err)
1379+
goto clean_load;
1380+
13671381
return 0;
13681382

1383+
clean_load:
1384+
mlx5_unload_one(dev, priv);
13691385
clean_health:
13701386
mlx5_health_cleanup(dev);
13711387
close_pci:
13721388
mlx5_pci_close(dev, priv);
13731389
clean_dev:
13741390
pci_set_drvdata(pdev, NULL);
1375-
kfree(dev);
1391+
devlink_free(devlink);
13761392

13771393
return err;
13781394
}
13791395

13801396
static void remove_one(struct pci_dev *pdev)
13811397
{
13821398
struct mlx5_core_dev *dev = pci_get_drvdata(pdev);
1399+
struct devlink *devlink = priv_to_devlink(dev);
13831400
struct mlx5_priv *priv = &dev->priv;
13841401

1402+
devlink_unregister(devlink);
13851403
if (mlx5_unload_one(dev, priv)) {
13861404
dev_err(&dev->pdev->dev, "mlx5_unload_one failed\n");
13871405
mlx5_health_cleanup(dev);
@@ -1390,7 +1408,7 @@ static void remove_one(struct pci_dev *pdev)
13901408
mlx5_health_cleanup(dev);
13911409
mlx5_pci_close(dev, priv);
13921410
pci_set_drvdata(pdev, NULL);
1393-
kfree(dev);
1411+
devlink_free(devlink);
13941412
}
13951413

13961414
static pci_ers_result_t mlx5_pci_err_detected(struct pci_dev *pdev,

0 commit comments

Comments
 (0)