* [patch net-next v2 01/15] net: devlink: add couple of missing mutex_destroy() calls
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 02/15] bnxt: add missing net/devlink.h include Jiri Pirko
` (13 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Add missing called to mutex_destroy() for two mutexes used
in devlink code.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
net/core/devlink.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 78e22cea4cc7..3dc51ddf7451 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -4486,6 +4486,7 @@ devlink_health_reporter_destroy(struct devlink_health_reporter *reporter)
{
mutex_lock(&reporter->devlink->lock);
list_del(&reporter->list);
+ mutex_destroy(&reporter->dump_lock);
mutex_unlock(&reporter->devlink->lock);
if (reporter->dump_fmsg)
devlink_fmsg_free(reporter->dump_fmsg);
@@ -5298,6 +5299,7 @@ EXPORT_SYMBOL_GPL(devlink_unregister);
*/
void devlink_free(struct devlink *devlink)
{
+ mutex_destroy(&devlink->lock);
WARN_ON(!list_empty(&devlink->reporter_list));
WARN_ON(!list_empty(&devlink->region_list));
WARN_ON(!list_empty(&devlink->param_list));
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 02/15] bnxt: add missing net/devlink.h include
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 01/15] net: devlink: add couple of missing mutex_destroy() calls Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 03/15] dsa: " Jiri Pirko
` (12 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
devlink functions are in use, so include the related header file.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
index e1feb97bcd81..ecb328ee8f5c 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
@@ -9,6 +9,7 @@
#include <linux/pci.h>
#include <linux/netdevice.h>
+#include <net/devlink.h>
#include "bnxt_hsi.h"
#include "bnxt.h"
#include "bnxt_vfr.h"
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 03/15] dsa: add missing net/devlink.h include
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 01/15] net: devlink: add couple of missing mutex_destroy() calls Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 02/15] bnxt: add missing net/devlink.h include Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 04/15] bnxt: set devlink port attrs properly Jiri Pirko
` (11 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
devlink functions are in use, so include the related header file.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
net/dsa/dsa2.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index c00ee464afc7..4558de672b4f 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -18,6 +18,7 @@
#include <linux/rtnetlink.h>
#include <linux/of.h>
#include <linux/of_net.h>
+#include <net/devlink.h>
#include "dsa_priv.h"
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 04/15] bnxt: set devlink port attrs properly
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (2 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 03/15] dsa: " Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 05/15] bnxt: call devlink_port_type_eth_set() before port register Jiri Pirko
` (10 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Set the attrs properly so delink has enough info to generate physical
port names.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
index ecb328ee8f5c..ab6fd05c462b 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
@@ -229,6 +229,8 @@ int bnxt_dl_register(struct bnxt *bp)
goto err_dl_unreg;
}
+ devlink_port_attrs_set(&bp->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
+ bp->pf.port_id, false, 0);
rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id);
if (rc) {
netdev_err(bp->dev, "devlink_port_register failed");
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 05/15] bnxt: call devlink_port_type_eth_set() before port register
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (3 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 04/15] bnxt: set devlink port attrs properly Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 06/15] net: devlink: don't take devlink_mutex for devlink_compat_* Jiri Pirko
` (9 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Call devlink_port_type_eth_set() before devlink_port_register(). Bnxt
instances won't change type during lifetime. This avoids one extra
userspace devlink notification.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
index ab6fd05c462b..a266bff559dc 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
@@ -229,6 +229,7 @@ int bnxt_dl_register(struct bnxt *bp)
goto err_dl_unreg;
}
+ devlink_port_type_eth_set(&bp->dl_port, bp->dev);
devlink_port_attrs_set(&bp->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
bp->pf.port_id, false, 0);
rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id);
@@ -236,7 +237,6 @@ int bnxt_dl_register(struct bnxt *bp)
netdev_err(bp->dev, "devlink_port_register failed");
goto err_dl_param_unreg;
}
- devlink_port_type_eth_set(&bp->dl_port, bp->dev);
rc = devlink_port_params_register(&bp->dl_port, bnxt_dl_port_params,
ARRAY_SIZE(bnxt_dl_port_params));
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 06/15] net: devlink: don't take devlink_mutex for devlink_compat_*
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (4 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 05/15] bnxt: call devlink_port_type_eth_set() before port register Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 07/15] net: devlink: don't pass return value of __devlink_port_type_set() Jiri Pirko
` (8 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
The netdevice is guaranteed to not disappear so we can rely that
devlink_port and devlink won't disappear as well. No need to take
devlink_mutex so don't take it here.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
net/core/devlink.c | 18 ++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 3dc51ddf7451..1e125c3b890c 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -6444,17 +6444,15 @@ void devlink_compat_running_version(struct net_device *dev,
dev_hold(dev);
rtnl_unlock();
- mutex_lock(&devlink_mutex);
devlink = netdev_to_devlink(dev);
if (!devlink || !devlink->ops->info_get)
- goto unlock_list;
+ goto out;
mutex_lock(&devlink->lock);
__devlink_compat_running_version(devlink, buf, len);
mutex_unlock(&devlink->lock);
-unlock_list:
- mutex_unlock(&devlink_mutex);
+out:
rtnl_lock();
dev_put(dev);
}
@@ -6462,22 +6460,22 @@ void devlink_compat_running_version(struct net_device *dev,
int devlink_compat_flash_update(struct net_device *dev, const char *file_name)
{
struct devlink *devlink;
- int ret = -EOPNOTSUPP;
+ int ret;
dev_hold(dev);
rtnl_unlock();
- mutex_lock(&devlink_mutex);
devlink = netdev_to_devlink(dev);
- if (!devlink || !devlink->ops->flash_update)
- goto unlock_list;
+ if (!devlink || !devlink->ops->flash_update) {
+ ret = -EOPNOTSUPP;
+ goto out;
+ }
mutex_lock(&devlink->lock);
ret = devlink->ops->flash_update(devlink, file_name, NULL, NULL);
mutex_unlock(&devlink->lock);
-unlock_list:
- mutex_unlock(&devlink_mutex);
+out:
rtnl_lock();
dev_put(dev);
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 07/15] net: devlink: don't pass return value of __devlink_port_type_set()
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (5 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 06/15] net: devlink: don't take devlink_mutex for devlink_compat_* Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 08/15] mlxsw: Move devlink_port_attrs_set() call before register Jiri Pirko
` (7 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
__devlink_port_type_set() returns void, it makes no sense to pass it on,
so don't do that.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
net/core/devlink.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 1e125c3b890c..98ca788ffd97 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -5379,8 +5379,7 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port,
void devlink_port_type_eth_set(struct devlink_port *devlink_port,
struct net_device *netdev)
{
- return __devlink_port_type_set(devlink_port,
- DEVLINK_PORT_TYPE_ETH, netdev);
+ __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH, netdev);
}
EXPORT_SYMBOL_GPL(devlink_port_type_eth_set);
@@ -5393,8 +5392,7 @@ EXPORT_SYMBOL_GPL(devlink_port_type_eth_set);
void devlink_port_type_ib_set(struct devlink_port *devlink_port,
struct ib_device *ibdev)
{
- return __devlink_port_type_set(devlink_port,
- DEVLINK_PORT_TYPE_IB, ibdev);
+ __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_IB, ibdev);
}
EXPORT_SYMBOL_GPL(devlink_port_type_ib_set);
@@ -5405,8 +5403,7 @@ EXPORT_SYMBOL_GPL(devlink_port_type_ib_set);
*/
void devlink_port_type_clear(struct devlink_port *devlink_port)
{
- return __devlink_port_type_set(devlink_port,
- DEVLINK_PORT_TYPE_NOTSET, NULL);
+ __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_NOTSET, NULL);
}
EXPORT_SYMBOL_GPL(devlink_port_type_clear);
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 08/15] mlxsw: Move devlink_port_attrs_set() call before register
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (6 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 07/15] net: devlink: don't pass return value of __devlink_port_type_set() Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 09/15] dsa: move " Jiri Pirko
` (6 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Since attrs are static during the existence of devlink port, set the
before registration of the port.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
drivers/net/ethernet/mellanox/mlxsw/core.c | 12 ++++++------
drivers/net/ethernet/mellanox/mlxsw/core.h | 8 ++++----
drivers/net/ethernet/mellanox/mlxsw/minimal.c | 5 +++--
drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 6 +++---
drivers/net/ethernet/mellanox/mlxsw/switchib.c | 3 ++-
drivers/net/ethernet/mellanox/mlxsw/switchx2.c | 5 +++--
6 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c
index d23d53c0e284..e70bb673eeec 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core.c
@@ -1718,7 +1718,9 @@ u64 mlxsw_core_res_get(struct mlxsw_core *mlxsw_core,
}
EXPORT_SYMBOL(mlxsw_core_res_get);
-int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port)
+int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port,
+ u32 port_number, bool split,
+ u32 split_port_subnumber)
{
struct devlink *devlink = priv_to_devlink(mlxsw_core);
struct mlxsw_core_port *mlxsw_core_port =
@@ -1727,6 +1729,8 @@ int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port)
int err;
mlxsw_core_port->local_port = local_port;
+ devlink_port_attrs_set(devlink_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
+ port_number, split, split_port_subnumber);
err = devlink_port_register(devlink, devlink_port, local_port);
if (err)
memset(mlxsw_core_port, 0, sizeof(*mlxsw_core_port));
@@ -1746,17 +1750,13 @@ void mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u8 local_port)
EXPORT_SYMBOL(mlxsw_core_port_fini);
void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u8 local_port,
- void *port_driver_priv, struct net_device *dev,
- u32 port_number, bool split,
- u32 split_port_subnumber)
+ void *port_driver_priv, struct net_device *dev)
{
struct mlxsw_core_port *mlxsw_core_port =
&mlxsw_core->ports[local_port];
struct devlink_port *devlink_port = &mlxsw_core_port->devlink_port;
mlxsw_core_port->port_driver_priv = port_driver_priv;
- devlink_port_attrs_set(devlink_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
- port_number, split, split_port_subnumber);
devlink_port_type_eth_set(devlink_port, dev);
}
EXPORT_SYMBOL(mlxsw_core_port_eth_set);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.h b/drivers/net/ethernet/mellanox/mlxsw/core.h
index 8ec53f027575..74e95e943b24 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/core.h
@@ -164,12 +164,12 @@ void mlxsw_core_lag_mapping_clear(struct mlxsw_core *mlxsw_core,
u16 lag_id, u8 local_port);
void *mlxsw_core_port_driver_priv(struct mlxsw_core_port *mlxsw_core_port);
-int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port);
+int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port,
+ u32 port_number, bool split,
+ u32 split_port_subnumber);
void mlxsw_core_port_fini(struct mlxsw_core *mlxsw_core, u8 local_port);
void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u8 local_port,
- void *port_driver_priv, struct net_device *dev,
- u32 port_number, bool split,
- u32 split_port_subnumber);
+ void *port_driver_priv, struct net_device *dev);
void mlxsw_core_port_ib_set(struct mlxsw_core *mlxsw_core, u8 local_port,
void *port_driver_priv);
void mlxsw_core_port_clear(struct mlxsw_core *mlxsw_core, u8 local_port,
diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c
index 00c390024350..0ee1656609f5 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c
@@ -150,7 +150,8 @@ mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u8 local_port, u8 module)
struct net_device *dev;
int err;
- err = mlxsw_core_port_init(mlxsw_m->core, local_port);
+ err = mlxsw_core_port_init(mlxsw_m->core, local_port,
+ module + 1, false, 0);
if (err) {
dev_err(mlxsw_m->bus_info->dev, "Port %d: Failed to init core port\n",
local_port);
@@ -190,7 +191,7 @@ mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u8 local_port, u8 module)
}
mlxsw_core_port_eth_set(mlxsw_m->core, mlxsw_m_port->local_port,
- mlxsw_m_port, dev, module + 1, false, 0);
+ mlxsw_m_port, dev);
return 0;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index 9eb63300c1d3..eaf86c4c2f6c 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -3391,7 +3391,8 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u8 local_port,
struct net_device *dev;
int err;
- err = mlxsw_core_port_init(mlxsw_sp->core, local_port);
+ err = mlxsw_core_port_init(mlxsw_sp->core, local_port,
+ module + 1, split, lane / width);
if (err) {
dev_err(mlxsw_sp->bus_info->dev, "Port %d: Failed to init core port\n",
local_port);
@@ -3573,8 +3574,7 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u8 local_port,
}
mlxsw_core_port_eth_set(mlxsw_sp->core, mlxsw_sp_port->local_port,
- mlxsw_sp_port, dev, module + 1,
- mlxsw_sp_port->split, lane / width);
+ mlxsw_sp_port, dev);
mlxsw_core_schedule_dw(&mlxsw_sp_port->periodic_hw_stats.update_dw, 0);
return 0;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/switchib.c b/drivers/net/ethernet/mellanox/mlxsw/switchib.c
index bcf2e79a21c8..e1e7e0dd808d 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/switchib.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/switchib.c
@@ -267,7 +267,8 @@ static int mlxsw_sib_port_create(struct mlxsw_sib *mlxsw_sib, u8 local_port,
{
int err;
- err = mlxsw_core_port_init(mlxsw_sib->core, local_port);
+ err = mlxsw_core_port_init(mlxsw_sib->core, local_port,
+ module + 1, false, 0);
if (err) {
dev_err(mlxsw_sib->bus_info->dev, "Port %d: Failed to init core port\n",
local_port);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/switchx2.c b/drivers/net/ethernet/mellanox/mlxsw/switchx2.c
index 533fe6235b7c..568883fc40df 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/switchx2.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/switchx2.c
@@ -1102,7 +1102,7 @@ static int __mlxsw_sx_port_eth_create(struct mlxsw_sx *mlxsw_sx, u8 local_port,
}
mlxsw_core_port_eth_set(mlxsw_sx->core, mlxsw_sx_port->local_port,
- mlxsw_sx_port, dev, module + 1, false, 0);
+ mlxsw_sx_port, dev);
mlxsw_sx->ports[local_port] = mlxsw_sx_port;
return 0;
@@ -1127,7 +1127,8 @@ static int mlxsw_sx_port_eth_create(struct mlxsw_sx *mlxsw_sx, u8 local_port,
{
int err;
- err = mlxsw_core_port_init(mlxsw_sx->core, local_port);
+ err = mlxsw_core_port_init(mlxsw_sx->core, local_port,
+ module + 1, false, 0);
if (err) {
dev_err(mlxsw_sx->bus_info->dev, "Port %d: Failed to init core port\n",
local_port);
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 09/15] dsa: move devlink_port_attrs_set() call before register
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (7 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 08/15] mlxsw: Move devlink_port_attrs_set() call before register Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 20:47 ` Andrew Lunn
2019-03-22 16:56 ` [patch net-next v2 10/15] net: devlink: disallow port_attrs_set() to be called " Jiri Pirko
` (5 subsequent siblings)
14 siblings, 1 reply; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Since attrs are static during the existence of devlink port, set the
before registration of the port.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v1->v2:
- fixed comment for port numbering
---
net/dsa/dsa2.c | 47 ++++++++++++++++++++++++++---------------------
1 file changed, 26 insertions(+), 21 deletions(-)
diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index 4558de672b4f..fe0a6197db9c 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -258,14 +258,36 @@ static void dsa_tree_teardown_default_cpu(struct dsa_switch_tree *dst)
static int dsa_port_setup(struct dsa_port *dp)
{
+ enum devlink_port_flavour flavour;
struct dsa_switch *ds = dp->ds;
- int err = 0;
+ int err;
+
+ if (dp->type == DSA_PORT_TYPE_UNUSED)
+ return 0;
memset(&dp->devlink_port, 0, sizeof(dp->devlink_port));
- if (dp->type != DSA_PORT_TYPE_UNUSED)
- err = devlink_port_register(ds->devlink, &dp->devlink_port,
- dp->index);
+ switch (dp->type) {
+ case DSA_PORT_TYPE_CPU:
+ flavour = DEVLINK_PORT_FLAVOUR_CPU;
+ break;
+ case DSA_PORT_TYPE_DSA:
+ flavour = DEVLINK_PORT_FLAVOUR_DSA;
+ break;
+ case DSA_PORT_TYPE_USER: /* fall-through */
+ default:
+ flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
+ break;
+ }
+
+ /* dp->index is used now as port_number. However
+ * CPU and DSA ports should have separate numbering
+ * independent from front panel port numbers.
+ */
+ devlink_port_attrs_set(&dp->devlink_port, flavour,
+ dp->index, false, 0);
+ err = devlink_port_register(ds->devlink, &dp->devlink_port,
+ dp->index);
if (err)
return err;
@@ -273,13 +295,6 @@ static int dsa_port_setup(struct dsa_port *dp)
case DSA_PORT_TYPE_UNUSED:
break;
case DSA_PORT_TYPE_CPU:
- /* dp->index is used now as port_number. However
- * CPU ports should have separate numbering
- * independent from front panel port numbers.
- */
- devlink_port_attrs_set(&dp->devlink_port,
- DEVLINK_PORT_FLAVOUR_CPU,
- dp->index, false, 0);
err = dsa_port_link_register_of(dp);
if (err) {
dev_err(ds->dev, "failed to setup link for port %d.%d\n",
@@ -288,13 +303,6 @@ static int dsa_port_setup(struct dsa_port *dp)
}
break;
case DSA_PORT_TYPE_DSA:
- /* dp->index is used now as port_number. However
- * DSA ports should have separate numbering
- * independent from front panel port numbers.
- */
- devlink_port_attrs_set(&dp->devlink_port,
- DEVLINK_PORT_FLAVOUR_DSA,
- dp->index, false, 0);
err = dsa_port_link_register_of(dp);
if (err) {
dev_err(ds->dev, "failed to setup link for port %d.%d\n",
@@ -303,9 +311,6 @@ static int dsa_port_setup(struct dsa_port *dp)
}
break;
case DSA_PORT_TYPE_USER:
- devlink_port_attrs_set(&dp->devlink_port,
- DEVLINK_PORT_FLAVOUR_PHYSICAL,
- dp->index, false, 0);
err = dsa_slave_create(dp);
if (err)
dev_err(ds->dev, "failed to create slave for port %d.%d\n",
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [patch net-next v2 09/15] dsa: move devlink_port_attrs_set() call before register
2019-03-22 16:56 ` [patch net-next v2 09/15] dsa: move " Jiri Pirko
@ 2019-03-22 20:47 ` Andrew Lunn
0 siblings, 0 replies; 21+ messages in thread
From: Andrew Lunn @ 2019-03-22 20:47 UTC (permalink / raw)
To: Jiri Pirko
Cc: netdev, davem, mlxsw, idosch, jakub.kicinski, f.fainelli, vivien.didelot
On Fri, Mar 22, 2019 at 05:56:30PM +0100, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@mellanox.com>
>
> Since attrs are static during the existence of devlink port, set the
> before registration of the port.
>
> Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 21+ messages in thread
* [patch net-next v2 10/15] net: devlink: disallow port_attrs_set() to be called before register
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (8 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 09/15] dsa: move " Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 11/15] nfp: move devlink port type set after netdev registration Jiri Pirko
` (4 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Since the port attributes are static and cannot change during the port
lifetime, WARN_ON if some driver calls it after registration. Also, no
need to call notifications as it is noop anyway due to check of
devlink_port->registered there.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
net/core/devlink.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 98ca788ffd97..f77a68f72d14 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -5425,12 +5425,13 @@ void devlink_port_attrs_set(struct devlink_port *devlink_port,
{
struct devlink_port_attrs *attrs = &devlink_port->attrs;
+ if (WARN_ON(devlink_port->registered))
+ return;
attrs->set = true;
attrs->flavour = flavour;
attrs->port_number = port_number;
attrs->split = split;
attrs->split_subport_number = split_subport_number;
- devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
}
EXPORT_SYMBOL_GPL(devlink_port_attrs_set);
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 11/15] nfp: move devlink port type set after netdev registration
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (9 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 10/15] net: devlink: disallow port_attrs_set() to be called " Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-23 20:31 ` Jakub Kicinski
2019-03-22 16:56 ` [patch net-next v2 12/15] bnxt: set devlink port type after registration Jiri Pirko
` (3 subsequent siblings)
14 siblings, 1 reply; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Similar to other driver, move the port type set after netdev registration
is done. Along with that, clear the type before unregistration.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v1->v2:
- new patch
---
drivers/net/ethernet/netronome/nfp/nfp_devlink.c | 11 ++++++++++-
drivers/net/ethernet/netronome/nfp/nfp_net_main.c | 4 ++++
drivers/net/ethernet/netronome/nfp/nfp_port.h | 2 ++
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
index e9eca99cf493..cb59a18ec6a6 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
@@ -362,7 +362,6 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
if (ret)
return ret;
- devlink_port_type_eth_set(&port->dl_port, port->netdev);
devlink_port_attrs_set(&port->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
eth_port.label_port, eth_port.is_split,
eth_port.label_subport);
@@ -377,6 +376,16 @@ void nfp_devlink_port_unregister(struct nfp_port *port)
devlink_port_unregister(&port->dl_port);
}
+void nfp_devlink_port_type_eth_set(struct nfp_port *port)
+{
+ devlink_port_type_eth_set(&port->dl_port, port->netdev);
+}
+
+void nfp_devlink_port_type_clear(struct nfp_port *port)
+{
+ devlink_port_type_clear(&port->dl_port);
+}
+
struct devlink *nfp_devlink_get_devlink(struct net_device *netdev)
{
struct nfp_app *app;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
index 08f5fdbd8e41..e29744f2af02 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
@@ -169,6 +169,8 @@ nfp_net_pf_init_vnic(struct nfp_pf *pf, struct nfp_net *nn, unsigned int id)
if (err)
goto err_devlink_port_clean;
}
+ if (nn->port)
+ nfp_devlink_port_type_eth_set(nn->port);
return 0;
@@ -218,6 +220,8 @@ nfp_net_pf_alloc_vnics(struct nfp_pf *pf, void __iomem *ctrl_bar,
static void nfp_net_pf_clean_vnic(struct nfp_pf *pf, struct nfp_net *nn)
{
+ if (nn->port)
+ nfp_devlink_port_type_clear(nn->port);
if (nfp_net_is_data_vnic(nn))
nfp_app_vnic_clean(pf->app, nn);
if (nn->port)
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_port.h b/drivers/net/ethernet/netronome/nfp/nfp_port.h
index 90ae053f5c07..d7fd203bb180 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_port.h
+++ b/drivers/net/ethernet/netronome/nfp/nfp_port.h
@@ -131,6 +131,8 @@ int nfp_net_refresh_port_table_sync(struct nfp_pf *pf);
int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port);
void nfp_devlink_port_unregister(struct nfp_port *port);
+void nfp_devlink_port_type_eth_set(struct nfp_port *port);
+void nfp_devlink_port_type_clear(struct nfp_port *port);
/**
* Mac stats (0x0000 - 0x0200)
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [patch net-next v2 11/15] nfp: move devlink port type set after netdev registration
2019-03-22 16:56 ` [patch net-next v2 11/15] nfp: move devlink port type set after netdev registration Jiri Pirko
@ 2019-03-23 20:31 ` Jakub Kicinski
2019-03-23 22:47 ` Jiri Pirko
0 siblings, 1 reply; 21+ messages in thread
From: Jakub Kicinski @ 2019-03-23 20:31 UTC (permalink / raw)
To: Jiri Pirko
Cc: netdev, davem, mlxsw, idosch, f.fainelli, andrew, vivien.didelot
On Fri, 22 Mar 2019 17:56:32 +0100, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@mellanox.com>
>
> Similar to other driver, move the port type set after netdev registration
> is done. Along with that, clear the type before unregistration.
>
> Signed-off-by: Jiri Pirko <jiri@mellanox.com>
> diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
> index e9eca99cf493..cb59a18ec6a6 100644
> --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
> +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
> @@ -362,7 +362,6 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
> if (ret)
> return ret;
>
> - devlink_port_type_eth_set(&port->dl_port, port->netdev);
> devlink_port_attrs_set(&port->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
> eth_port.label_port, eth_port.is_split,
> eth_port.label_subport);
> @@ -377,6 +376,16 @@ void nfp_devlink_port_unregister(struct nfp_port *port)
> devlink_port_unregister(&port->dl_port);
> }
>
> +void nfp_devlink_port_type_eth_set(struct nfp_port *port)
> +{
> + devlink_port_type_eth_set(&port->dl_port, port->netdev);
> +}
> +
> +void nfp_devlink_port_type_clear(struct nfp_port *port)
> +{
> + devlink_port_type_clear(&port->dl_port);
> +}
> +
> struct devlink *nfp_devlink_get_devlink(struct net_device *netdev)
> {
> struct nfp_app *app;
> diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
> index 08f5fdbd8e41..e29744f2af02 100644
> --- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
> +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
> @@ -169,6 +169,8 @@ nfp_net_pf_init_vnic(struct nfp_pf *pf, struct nfp_net *nn, unsigned int id)
> if (err)
> goto err_devlink_port_clean;
> }
> + if (nn->port)
> + nfp_devlink_port_type_eth_set(nn->port);
>
> return 0;
>
> @@ -218,6 +220,8 @@ nfp_net_pf_alloc_vnics(struct nfp_pf *pf, void __iomem *ctrl_bar,
>
> static void nfp_net_pf_clean_vnic(struct nfp_pf *pf, struct nfp_net *nn)
> {
> + if (nn->port)
> + nfp_devlink_port_type_clear(nn->port);
> if (nfp_net_is_data_vnic(nn))
> nfp_app_vnic_clean(pf->app, nn);
Sorry for not noticing right away, I thought you just split my patch in
two, but it seems you reordered the app_vnic_init/clean calls with the
type setting. I'd rather those calls happened on fully initialized
netdev (and port), could you perhaps just take this patch into the
series:
https://git.kernel.org/pub/scm/linux/kernel/git/kuba/linux.git/commit/?h=devlink-pci-ports&id=1debfdef5aef369412e72f370d11120d309a6a74
> if (nn->port)
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [patch net-next v2 11/15] nfp: move devlink port type set after netdev registration
2019-03-23 20:31 ` Jakub Kicinski
@ 2019-03-23 22:47 ` Jiri Pirko
2019-03-24 3:04 ` Jakub Kicinski
0 siblings, 1 reply; 21+ messages in thread
From: Jiri Pirko @ 2019-03-23 22:47 UTC (permalink / raw)
To: Jakub Kicinski
Cc: netdev, davem, mlxsw, idosch, f.fainelli, andrew, vivien.didelot
Sat, Mar 23, 2019 at 09:31:02PM CET, jakub.kicinski@netronome.com wrote:
>On Fri, 22 Mar 2019 17:56:32 +0100, Jiri Pirko wrote:
>> From: Jiri Pirko <jiri@mellanox.com>
>>
>> Similar to other driver, move the port type set after netdev registration
>> is done. Along with that, clear the type before unregistration.
>>
>> Signed-off-by: Jiri Pirko <jiri@mellanox.com>
>> diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
>> index e9eca99cf493..cb59a18ec6a6 100644
>> --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
>> +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
>> @@ -362,7 +362,6 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
>> if (ret)
>> return ret;
>>
>> - devlink_port_type_eth_set(&port->dl_port, port->netdev);
>> devlink_port_attrs_set(&port->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
>> eth_port.label_port, eth_port.is_split,
>> eth_port.label_subport);
>> @@ -377,6 +376,16 @@ void nfp_devlink_port_unregister(struct nfp_port *port)
>> devlink_port_unregister(&port->dl_port);
>> }
>>
>> +void nfp_devlink_port_type_eth_set(struct nfp_port *port)
>> +{
>> + devlink_port_type_eth_set(&port->dl_port, port->netdev);
>> +}
>> +
>> +void nfp_devlink_port_type_clear(struct nfp_port *port)
>> +{
>> + devlink_port_type_clear(&port->dl_port);
>> +}
>> +
>> struct devlink *nfp_devlink_get_devlink(struct net_device *netdev)
>> {
>> struct nfp_app *app;
>> diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
>> index 08f5fdbd8e41..e29744f2af02 100644
>> --- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
>> +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
>> @@ -169,6 +169,8 @@ nfp_net_pf_init_vnic(struct nfp_pf *pf, struct nfp_net *nn, unsigned int id)
>> if (err)
>> goto err_devlink_port_clean;
>> }
>> + if (nn->port)
>> + nfp_devlink_port_type_eth_set(nn->port);
>>
>> return 0;
>>
>> @@ -218,6 +220,8 @@ nfp_net_pf_alloc_vnics(struct nfp_pf *pf, void __iomem *ctrl_bar,
>>
>> static void nfp_net_pf_clean_vnic(struct nfp_pf *pf, struct nfp_net *nn)
>> {
>> + if (nn->port)
>> + nfp_devlink_port_type_clear(nn->port);
>> if (nfp_net_is_data_vnic(nn))
>> nfp_app_vnic_clean(pf->app, nn);
>
>Sorry for not noticing right away, I thought you just split my patch in
>two, but it seems you reordered the app_vnic_init/clean calls with the
I did the patch from scratch.
>type setting. I'd rather those calls happened on fully initialized
>netdev (and port), could you perhaps just take this patch into the
I don't get it, you are commenting cleanup part. On init, the type set
happens on fully initialized devlink_port and netdev.
>series:
>
>https://git.kernel.org/pub/scm/linux/kernel/git/kuba/linux.git/commit/?h=devlink-pci-ports&id=1debfdef5aef369412e72f370d11120d309a6a74
>
>> if (nn->port)
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [patch net-next v2 11/15] nfp: move devlink port type set after netdev registration
2019-03-23 22:47 ` Jiri Pirko
@ 2019-03-24 3:04 ` Jakub Kicinski
2019-03-24 8:01 ` Jiri Pirko
0 siblings, 1 reply; 21+ messages in thread
From: Jakub Kicinski @ 2019-03-24 3:04 UTC (permalink / raw)
To: Jiri Pirko
Cc: netdev, davem, mlxsw, idosch, f.fainelli, andrew, vivien.didelot
On Sat, 23 Mar 2019 23:47:50 +0100, Jiri Pirko wrote:
> >type setting. I'd rather those calls happened on fully initialized
> >netdev (and port), could you perhaps just take this patch into the
>
> I don't get it, you are commenting cleanup part. On init, the type set
> happens on fully initialized devlink_port and netdev.
I'm talking about internal nfp API calls, nfp_app_vnic_init() and
nfp_app_vnic_clean() should be called while vNIC is completely
initialized and registered from stack's PoV. netdev, and devlink
port fully initialized and set up. I don't think it matters much,
just an imperfection.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [patch net-next v2 11/15] nfp: move devlink port type set after netdev registration
2019-03-24 3:04 ` Jakub Kicinski
@ 2019-03-24 8:01 ` Jiri Pirko
0 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-24 8:01 UTC (permalink / raw)
To: Jakub Kicinski
Cc: netdev, davem, mlxsw, idosch, f.fainelli, andrew, vivien.didelot
Sun, Mar 24, 2019 at 04:04:05AM CET, jakub.kicinski@netronome.com wrote:
>On Sat, 23 Mar 2019 23:47:50 +0100, Jiri Pirko wrote:
>> >type setting. I'd rather those calls happened on fully initialized
>> >netdev (and port), could you perhaps just take this patch into the
>>
>> I don't get it, you are commenting cleanup part. On init, the type set
>> happens on fully initialized devlink_port and netdev.
>
>I'm talking about internal nfp API calls, nfp_app_vnic_init() and
>nfp_app_vnic_clean() should be called while vNIC is completely
>initialized and registered from stack's PoV. netdev, and devlink
>port fully initialized and set up. I don't think it matters much,
>just an imperfection.
Oh, I get it. Will change the order. Thanks.
^ permalink raw reply [flat|nested] 21+ messages in thread
* [patch net-next v2 12/15] bnxt: set devlink port type after registration
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (10 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 11/15] nfp: move devlink port type set after netdev registration Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 13/15] net: devlink: warn on setting type on unregistered port Jiri Pirko
` (2 subsequent siblings)
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Move the type set of devlink port after it is registered.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v1->v2:
- new patch
---
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
index a266bff559dc..ab6fd05c462b 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
@@ -229,7 +229,6 @@ int bnxt_dl_register(struct bnxt *bp)
goto err_dl_unreg;
}
- devlink_port_type_eth_set(&bp->dl_port, bp->dev);
devlink_port_attrs_set(&bp->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
bp->pf.port_id, false, 0);
rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id);
@@ -237,6 +236,7 @@ int bnxt_dl_register(struct bnxt *bp)
netdev_err(bp->dev, "devlink_port_register failed");
goto err_dl_param_unreg;
}
+ devlink_port_type_eth_set(&bp->dl_port, bp->dev);
rc = devlink_port_params_register(&bp->dl_port, bnxt_dl_port_params,
ARRAY_SIZE(bnxt_dl_port_params));
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 13/15] net: devlink: warn on setting type on unregistered port
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (11 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 12/15] bnxt: set devlink port type after registration Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 14/15] net: devlink: add port type spinlock Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 15/15] net: devlink: select NET_DEVLINK from drivers Jiri Pirko
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Port needs to be registered first before the type is set. Warn and
bail-out in case it is not.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v1->v2:
- new patch
---
net/core/devlink.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/core/devlink.c b/net/core/devlink.c
index f77a68f72d14..ff3e31010954 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -5365,6 +5365,8 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port,
enum devlink_port_type type,
void *type_dev)
{
+ if (WARN_ON(!devlink_port->registered))
+ return;
devlink_port->type = type;
devlink_port->type_dev = type_dev;
devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 14/15] net: devlink: add port type spinlock
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (12 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 13/15] net: devlink: warn on setting type on unregistered port Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
2019-03-22 16:56 ` [patch net-next v2 15/15] net: devlink: select NET_DEVLINK from drivers Jiri Pirko
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Add spinlock to protect port type and type_dev pointer consistency.
Without that, userspace may see inconsistent type and type_dev
combinations.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
v1->v2:
- rebased
---
include/net/devlink.h | 4 ++++
net/core/devlink.c | 17 +++++++++++++----
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/include/net/devlink.h b/include/net/devlink.h
index 63de99e09f04..cb9b060033e1 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -16,6 +16,7 @@
#include <linux/gfp.h>
#include <linux/list.h>
#include <linux/netdevice.h>
+#include <linux/spinlock.h>
#include <net/net_namespace.h>
#include <uapi/linux/devlink.h>
@@ -53,6 +54,9 @@ struct devlink_port {
struct devlink *devlink;
unsigned index;
bool registered;
+ spinlock_t type_lock; /* Protects type and type_dev
+ * pointer consistency.
+ */
enum devlink_port_type type;
enum devlink_port_type desired_type;
void *type_dev;
diff --git a/net/core/devlink.c b/net/core/devlink.c
index ff3e31010954..cf389e26a32d 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -19,6 +19,7 @@
#include <linux/device.h>
#include <linux/list.h>
#include <linux/netdevice.h>
+#include <linux/spinlock.h>
#include <rdma/ib_verbs.h>
#include <net/netlink.h>
#include <net/genetlink.h>
@@ -543,12 +544,14 @@ static int devlink_nl_port_fill(struct sk_buff *msg, struct devlink *devlink,
goto nla_put_failure;
if (nla_put_u32(msg, DEVLINK_ATTR_PORT_INDEX, devlink_port->index))
goto nla_put_failure;
+
+ spin_lock(&devlink_port->type_lock);
if (nla_put_u16(msg, DEVLINK_ATTR_PORT_TYPE, devlink_port->type))
- goto nla_put_failure;
+ goto nla_put_failure_type_locked;
if (devlink_port->desired_type != DEVLINK_PORT_TYPE_NOTSET &&
nla_put_u16(msg, DEVLINK_ATTR_PORT_DESIRED_TYPE,
devlink_port->desired_type))
- goto nla_put_failure;
+ goto nla_put_failure_type_locked;
if (devlink_port->type == DEVLINK_PORT_TYPE_ETH) {
struct net_device *netdev = devlink_port->type_dev;
@@ -557,7 +560,7 @@ static int devlink_nl_port_fill(struct sk_buff *msg, struct devlink *devlink,
netdev->ifindex) ||
nla_put_string(msg, DEVLINK_ATTR_PORT_NETDEV_NAME,
netdev->name)))
- goto nla_put_failure;
+ goto nla_put_failure_type_locked;
}
if (devlink_port->type == DEVLINK_PORT_TYPE_IB) {
struct ib_device *ibdev = devlink_port->type_dev;
@@ -565,14 +568,17 @@ static int devlink_nl_port_fill(struct sk_buff *msg, struct devlink *devlink,
if (ibdev &&
nla_put_string(msg, DEVLINK_ATTR_PORT_IBDEV_NAME,
ibdev->name))
- goto nla_put_failure;
+ goto nla_put_failure_type_locked;
}
+ spin_unlock(&devlink_port->type_lock);
if (devlink_nl_port_attrs_put(msg, devlink_port))
goto nla_put_failure;
genlmsg_end(msg, hdr);
return 0;
+nla_put_failure_type_locked:
+ spin_unlock(&devlink_port->type_lock);
nla_put_failure:
genlmsg_cancel(msg, hdr);
return -EMSGSIZE;
@@ -5337,6 +5343,7 @@ int devlink_port_register(struct devlink *devlink,
devlink_port->devlink = devlink;
devlink_port->index = port_index;
devlink_port->registered = true;
+ spin_lock_init(&devlink_port->type_lock);
list_add_tail(&devlink_port->list, &devlink->port_list);
INIT_LIST_HEAD(&devlink_port->param_list);
mutex_unlock(&devlink->lock);
@@ -5367,8 +5374,10 @@ static void __devlink_port_type_set(struct devlink_port *devlink_port,
{
if (WARN_ON(!devlink_port->registered))
return;
+ spin_lock(&devlink_port->type_lock);
devlink_port->type = type;
devlink_port->type_dev = type_dev;
+ spin_unlock(&devlink_port->type_lock);
devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW);
}
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [patch net-next v2 15/15] net: devlink: select NET_DEVLINK from drivers
2019-03-22 16:56 [patch net-next v2 00/15] devlink: small spring cleanup Jiri Pirko
` (13 preceding siblings ...)
2019-03-22 16:56 ` [patch net-next v2 14/15] net: devlink: add port type spinlock Jiri Pirko
@ 2019-03-22 16:56 ` Jiri Pirko
14 siblings, 0 replies; 21+ messages in thread
From: Jiri Pirko @ 2019-03-22 16:56 UTC (permalink / raw)
To: netdev
Cc: davem, mlxsw, idosch, jakub.kicinski, f.fainelli, andrew, vivien.didelot
From: Jiri Pirko <jiri@mellanox.com>
Some drivers are becoming more dependent on NET_DEVLINK being selected
in configuration. With upcoming compat functions, the behavior would be
wrong in case devlink was not compiled in. So make the drivers select
NET_DEVLINK and rely on the functions being there, not just stubs.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
drivers/net/Kconfig | 1 +
drivers/net/ethernet/broadcom/Kconfig | 1 +
drivers/net/ethernet/cavium/Kconfig | 1 +
drivers/net/ethernet/mellanox/mlx4/Kconfig | 1 +
.../net/ethernet/mellanox/mlx5/core/Kconfig | 1 +
drivers/net/ethernet/mellanox/mlxsw/Kconfig | 1 +
drivers/net/ethernet/netronome/Kconfig | 1 +
include/net/devlink.h | 495 +-----------------
net/Kconfig | 7 +-
net/dsa/Kconfig | 1 +
10 files changed, 13 insertions(+), 497 deletions(-)
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 7a96d168efc4..bc42f131f47c 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -505,6 +505,7 @@ source "drivers/net/hyperv/Kconfig"
config NETDEVSIM
tristate "Simulated networking device"
depends on DEBUG_FS
+ select NET_DEVLINK
help
This driver is a developer testing tool and software model that can
be used to test various control path networking APIs, especially
diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig
index 716bfbba59cf..461b2c0b2ed6 100644
--- a/drivers/net/ethernet/broadcom/Kconfig
+++ b/drivers/net/ethernet/broadcom/Kconfig
@@ -196,6 +196,7 @@ config BNXT
depends on PCI
select FW_LOADER
select LIBCRC32C
+ select NET_DEVLINK
---help---
This driver supports Broadcom NetXtreme-C/E 10/25/40/50 gigabit
Ethernet cards. To compile this driver as a module, choose M here:
diff --git a/drivers/net/ethernet/cavium/Kconfig b/drivers/net/ethernet/cavium/Kconfig
index 6650e2a5f171..7612ab6b286d 100644
--- a/drivers/net/ethernet/cavium/Kconfig
+++ b/drivers/net/ethernet/cavium/Kconfig
@@ -68,6 +68,7 @@ config LIQUIDIO
imply PTP_1588_CLOCK
select FW_LOADER
select LIBCRC32C
+ select NET_DEVLINK
---help---
This driver supports Cavium LiquidIO Intelligent Server Adapters
based on CN66XX, CN68XX and CN23XX chips.
diff --git a/drivers/net/ethernet/mellanox/mlx4/Kconfig b/drivers/net/ethernet/mellanox/mlx4/Kconfig
index ff8057ed97ee..8491db57b0b0 100644
--- a/drivers/net/ethernet/mellanox/mlx4/Kconfig
+++ b/drivers/net/ethernet/mellanox/mlx4/Kconfig
@@ -26,6 +26,7 @@ config MLX4_EN_DCB
config MLX4_CORE
tristate
depends on PCI
+ select NET_DEVLINK
default n
config MLX4_DEBUG
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
index 6debffb8336b..9aca8086ee01 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
+++ b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig
@@ -5,6 +5,7 @@
config MLX5_CORE
tristate "Mellanox 5th generation network adapters (ConnectX series) core driver"
depends on PCI
+ select NET_DEVLINK
imply PTP_1588_CLOCK
imply VXLAN
default n
diff --git a/drivers/net/ethernet/mellanox/mlxsw/Kconfig b/drivers/net/ethernet/mellanox/mlxsw/Kconfig
index 9c195dfed031..b6b3ff0fe17f 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/Kconfig
+++ b/drivers/net/ethernet/mellanox/mlxsw/Kconfig
@@ -4,6 +4,7 @@
config MLXSW_CORE
tristate "Mellanox Technologies Switch ASICs support"
+ select NET_DEVLINK
---help---
This driver supports Mellanox Technologies Switch ASICs family.
diff --git a/drivers/net/ethernet/netronome/Kconfig b/drivers/net/ethernet/netronome/Kconfig
index 549898d5d450..f0d0e09f60e2 100644
--- a/drivers/net/ethernet/netronome/Kconfig
+++ b/drivers/net/ethernet/netronome/Kconfig
@@ -19,6 +19,7 @@ config NFP
tristate "Netronome(R) NFP4000/NFP6000 NIC driver"
depends on PCI && PCI_MSI
depends on VXLAN || VXLAN=n
+ select NET_DEVLINK
---help---
This driver supports the Netronome(R) NFP4000/NFP6000 based
cards working as a advanced Ethernet NIC. It works with both
diff --git a/include/net/devlink.h b/include/net/devlink.h
index cb9b060033e1..03fb16f4fb6c 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -549,17 +549,13 @@ static inline struct devlink *priv_to_devlink(void *priv)
static inline struct devlink *netdev_to_devlink(struct net_device *dev)
{
-#if IS_ENABLED(CONFIG_NET_DEVLINK)
if (dev->netdev_ops->ndo_get_devlink)
return dev->netdev_ops->ndo_get_devlink(dev);
-#endif
return NULL;
}
struct ib_device;
-#if IS_ENABLED(CONFIG_NET_DEVLINK)
-
struct devlink *devlink_alloc(const struct devlink_ops *ops, size_t priv_size);
int devlink_register(struct devlink *devlink, struct device *dev);
void devlink_unregister(struct devlink *devlink);
@@ -728,500 +724,14 @@ void
devlink_health_reporter_state_update(struct devlink_health_reporter *reporter,
enum devlink_health_reporter_state state);
+#if IS_ENABLED(CONFIG_NET_DEVLINK)
+
void devlink_compat_running_version(struct net_device *dev,
char *buf, size_t len);
int devlink_compat_flash_update(struct net_device *dev, const char *file_name);
#else
-static inline struct devlink *devlink_alloc(const struct devlink_ops *ops,
- size_t priv_size)
-{
- return kzalloc(sizeof(struct devlink) + priv_size, GFP_KERNEL);
-}
-
-static inline int devlink_register(struct devlink *devlink, struct device *dev)
-{
- return 0;
-}
-
-static inline void devlink_unregister(struct devlink *devlink)
-{
-}
-
-static inline void devlink_params_publish(struct devlink *devlink)
-{
-}
-
-static inline void devlink_params_unpublish(struct devlink *devlink)
-{
-}
-
-static inline void devlink_free(struct devlink *devlink)
-{
- kfree(devlink);
-}
-
-static inline int devlink_port_register(struct devlink *devlink,
- struct devlink_port *devlink_port,
- unsigned int port_index)
-{
- return 0;
-}
-
-static inline void devlink_port_unregister(struct devlink_port *devlink_port)
-{
-}
-
-static inline void devlink_port_type_eth_set(struct devlink_port *devlink_port,
- struct net_device *netdev)
-{
-}
-
-static inline void devlink_port_type_ib_set(struct devlink_port *devlink_port,
- struct ib_device *ibdev)
-{
-}
-
-static inline void devlink_port_type_clear(struct devlink_port *devlink_port)
-{
-}
-
-static inline void devlink_port_attrs_set(struct devlink_port *devlink_port,
- enum devlink_port_flavour flavour,
- u32 port_number, bool split,
- u32 split_subport_number)
-{
-}
-
-static inline int
-devlink_port_get_phys_port_name(struct devlink_port *devlink_port,
- char *name, size_t len)
-{
- return -EOPNOTSUPP;
-}
-
-static inline int devlink_sb_register(struct devlink *devlink,
- unsigned int sb_index, u32 size,
- u16 ingress_pools_count,
- u16 egress_pools_count,
- u16 ingress_tc_count,
- u16 egress_tc_count)
-{
- return 0;
-}
-
-static inline void devlink_sb_unregister(struct devlink *devlink,
- unsigned int sb_index)
-{
-}
-
-static inline int
-devlink_dpipe_table_register(struct devlink *devlink,
- const char *table_name,
- struct devlink_dpipe_table_ops *table_ops,
- void *priv, bool counter_control_extern)
-{
- return 0;
-}
-
-static inline void devlink_dpipe_table_unregister(struct devlink *devlink,
- const char *table_name)
-{
-}
-
-static inline int devlink_dpipe_headers_register(struct devlink *devlink,
- struct devlink_dpipe_headers *
- dpipe_headers)
-{
- return 0;
-}
-
-static inline void devlink_dpipe_headers_unregister(struct devlink *devlink)
-{
-}
-
-static inline bool devlink_dpipe_table_counter_enabled(struct devlink *devlink,
- const char *table_name)
-{
- return false;
-}
-
-static inline int
-devlink_dpipe_entry_ctx_prepare(struct devlink_dpipe_dump_ctx *dump_ctx)
-{
- return 0;
-}
-
-static inline int
-devlink_dpipe_entry_ctx_append(struct devlink_dpipe_dump_ctx *dump_ctx,
- struct devlink_dpipe_entry *entry)
-{
- return 0;
-}
-
-static inline int
-devlink_dpipe_entry_ctx_close(struct devlink_dpipe_dump_ctx *dump_ctx)
-{
- return 0;
-}
-
-static inline void
-devlink_dpipe_entry_clear(struct devlink_dpipe_entry *entry)
-{
-}
-
-static inline int
-devlink_dpipe_action_put(struct sk_buff *skb,
- struct devlink_dpipe_action *action)
-{
- return 0;
-}
-
-static inline int
-devlink_dpipe_match_put(struct sk_buff *skb,
- struct devlink_dpipe_match *match)
-{
- return 0;
-}
-
-static inline int
-devlink_resource_register(struct devlink *devlink,
- const char *resource_name,
- u64 resource_size,
- u64 resource_id,
- u64 parent_resource_id,
- const struct devlink_resource_size_params *size_params)
-{
- return 0;
-}
-
-static inline void
-devlink_resources_unregister(struct devlink *devlink,
- struct devlink_resource *resource)
-{
-}
-
-static inline int
-devlink_resource_size_get(struct devlink *devlink, u64 resource_id,
- u64 *p_resource_size)
-{
- return -EOPNOTSUPP;
-}
-
-static inline int
-devlink_dpipe_table_resource_set(struct devlink *devlink,
- const char *table_name, u64 resource_id,
- u64 resource_units)
-{
- return -EOPNOTSUPP;
-}
-
-static inline void
-devlink_resource_occ_get_register(struct devlink *devlink,
- u64 resource_id,
- devlink_resource_occ_get_t *occ_get,
- void *occ_get_priv)
-{
-}
-
-static inline void
-devlink_resource_occ_get_unregister(struct devlink *devlink,
- u64 resource_id)
-{
-}
-
-static inline int
-devlink_params_register(struct devlink *devlink,
- const struct devlink_param *params,
- size_t params_count)
-{
- return 0;
-}
-
-static inline void
-devlink_params_unregister(struct devlink *devlink,
- const struct devlink_param *params,
- size_t params_count)
-{
-
-}
-
-static inline int
-devlink_port_params_register(struct devlink_port *devlink_port,
- const struct devlink_param *params,
- size_t params_count)
-{
- return 0;
-}
-
-static inline void
-devlink_port_params_unregister(struct devlink_port *devlink_port,
- const struct devlink_param *params,
- size_t params_count)
-{
-}
-
-static inline int
-devlink_param_driverinit_value_get(struct devlink *devlink, u32 param_id,
- union devlink_param_value *init_val)
-{
- return -EOPNOTSUPP;
-}
-
-static inline int
-devlink_param_driverinit_value_set(struct devlink *devlink, u32 param_id,
- union devlink_param_value init_val)
-{
- return -EOPNOTSUPP;
-}
-
-static inline int
-devlink_port_param_driverinit_value_get(struct devlink_port *devlink_port,
- u32 param_id,
- union devlink_param_value *init_val)
-{
- return -EOPNOTSUPP;
-}
-
-static inline int
-devlink_port_param_driverinit_value_set(struct devlink_port *devlink_port,
- u32 param_id,
- union devlink_param_value init_val)
-{
- return -EOPNOTSUPP;
-}
-
-static inline void
-devlink_param_value_changed(struct devlink *devlink, u32 param_id)
-{
-}
-
-static inline void
-devlink_port_param_value_changed(struct devlink_port *devlink_port,
- u32 param_id)
-{
-}
-
-static inline void
-devlink_param_value_str_fill(union devlink_param_value *dst_val,
- const char *src)
-{
-}
-
-static inline struct devlink_region *
-devlink_region_create(struct devlink *devlink,
- const char *region_name,
- u32 region_max_snapshots,
- u64 region_size)
-{
- return NULL;
-}
-
-static inline void
-devlink_region_destroy(struct devlink_region *region)
-{
-}
-
-static inline u32
-devlink_region_shapshot_id_get(struct devlink *devlink)
-{
- return 0;
-}
-
-static inline int
-devlink_region_snapshot_create(struct devlink_region *region, u64 data_len,
- u8 *data, u32 snapshot_id,
- devlink_snapshot_data_dest_t *data_destructor)
-{
- return 0;
-}
-
-static inline int
-devlink_info_driver_name_put(struct devlink_info_req *req, const char *name)
-{
- return 0;
-}
-
-static inline int
-devlink_info_serial_number_put(struct devlink_info_req *req, const char *sn)
-{
- return 0;
-}
-
-static inline int
-devlink_info_version_fixed_put(struct devlink_info_req *req,
- const char *version_name,
- const char *version_value)
-{
- return 0;
-}
-
-static inline int
-devlink_info_version_stored_put(struct devlink_info_req *req,
- const char *version_name,
- const char *version_value)
-{
- return 0;
-}
-
-static inline int
-devlink_info_version_running_put(struct devlink_info_req *req,
- const char *version_name,
- const char *version_value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_obj_nest_start(struct devlink_fmsg *fmsg)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_obj_nest_end(struct devlink_fmsg *fmsg)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_pair_nest_start(struct devlink_fmsg *fmsg, const char *name)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_pair_nest_end(struct devlink_fmsg *fmsg)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_arr_pair_nest_start(struct devlink_fmsg *fmsg,
- const char *name)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_bool_put(struct devlink_fmsg *fmsg, bool value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_u8_put(struct devlink_fmsg *fmsg, u8 value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_u64_put(struct devlink_fmsg *fmsg, u64 value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value,
- u16 value_len)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name,
- bool value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_u8_pair_put(struct devlink_fmsg *fmsg, const char *name,
- u8 value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_u32_pair_put(struct devlink_fmsg *fmsg, const char *name,
- u32 value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name,
- u64 value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name,
- const char *value)
-{
- return 0;
-}
-
-static inline int
-devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name,
- const void *value, u16 value_len)
-{
- return 0;
-}
-
-static inline struct devlink_health_reporter *
-devlink_health_reporter_create(struct devlink *devlink,
- const struct devlink_health_reporter_ops *ops,
- u64 graceful_period, bool auto_recover,
- void *priv)
-{
- return NULL;
-}
-
-static inline void
-devlink_health_reporter_destroy(struct devlink_health_reporter *reporter)
-{
-}
-
-static inline void *
-devlink_health_reporter_priv(struct devlink_health_reporter *reporter)
-{
- return NULL;
-}
-
-static inline int
-devlink_health_report(struct devlink_health_reporter *reporter,
- const char *msg, void *priv_ctx)
-{
- return 0;
-}
-
-static inline void
-devlink_health_reporter_state_update(struct devlink_health_reporter *reporter,
- enum devlink_health_reporter_state state)
-{
-}
-
static inline void
devlink_compat_running_version(struct net_device *dev, char *buf, size_t len)
{
@@ -1232,6 +742,7 @@ devlink_compat_flash_update(struct net_device *dev, const char *file_name)
{
return -EOPNOTSUPP;
}
+
#endif
#endif /* _NET_DEVLINK_H_ */
diff --git a/net/Kconfig b/net/Kconfig
index 1efe1f9ee492..3e8fdd688329 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -429,11 +429,8 @@ config NET_SOCK_MSG
with the help of BPF programs.
config NET_DEVLINK
- bool "Network physical/parent device Netlink interface"
- help
- Network physical/parent device Netlink interface provides
- infrastructure to support access to physical chip-wide config and
- monitoring.
+ bool
+ default n
config PAGE_POOL
bool
diff --git a/net/dsa/Kconfig b/net/dsa/Kconfig
index fab49132345f..b695170795c2 100644
--- a/net/dsa/Kconfig
+++ b/net/dsa/Kconfig
@@ -10,6 +10,7 @@ config NET_DSA
depends on BRIDGE || BRIDGE=n
select NET_SWITCHDEV
select PHYLINK
+ select NET_DEVLINK
---help---
Say Y if you want to enable support for the hardware switches supported
by the Distributed Switch Architecture.
--
2.17.2
^ permalink raw reply related [flat|nested] 21+ messages in thread