diff options
| author | 2022-03-16 12:56:49 -0700 | |
|---|---|---|
| committer | 2022-03-16 12:56:54 -0700 | |
| commit | b1351527f1eeb9624c301ecb7d8adbc4f543e045 (patch) | |
| tree | 765804a5cfb6868ff577cd56e44b1a6c823f3d72 /include | |
| parent | Merge branch 'mediatek-next' (diff) | |
| parent | devlink: pass devlink_port to port_split / port_unsplit callbacks (diff) | |
Merge branch 'devlink-expose-instance-locking-and-simplify-port-splitting'
Jakub Kicinski says:
====================
devlink: expose instance locking and simplify port splitting
This series puts the devlink ports fully under the devlink instance
lock's protection. As discussed in the past it implements my preferred
solution of exposing the instance lock to the drivers. This way drivers
which want to support port splitting can lock the devlink instance
themselves on the probe path, and we can take that lock in the core
on the split/unsplit paths.
nfp and mlxsw are converted, with slightly deeper changes done in
nfp since I'm more familiar with that driver.
Now that the devlink port is protected we can pass a pointer to
the drivers, instead of passing a port index and forcing the drivers
to do their own lookups. Both nfp and mlxsw can container_of() to
their own structures.
====================
Link: https://lore.kernel.org/r/20220315060009.1028519-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/devlink.h | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/include/net/devlink.h b/include/net/devlink.h index 8d5349d2fb68..fd89a17adea1 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -1197,9 +1197,9 @@ 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, unsigned int port_index, + int (*port_split)(struct devlink *devlink, struct devlink_port *port, unsigned int count, struct netlink_ext_ack *extack); - int (*port_unsplit)(struct devlink *devlink, unsigned int port_index, + 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, @@ -1479,6 +1479,17 @@ void *devlink_priv(struct devlink *devlink); struct devlink *priv_to_devlink(void *priv); struct device *devlink_to_dev(const struct devlink *devlink); +/* Devlink instance explicit locking */ +void devl_lock(struct devlink *devlink); +void devl_unlock(struct devlink *devlink); +void devl_assert_locked(struct devlink *devlink); +bool devl_lock_is_held(struct devlink *devlink); + +int devl_port_register(struct devlink *devlink, + struct devlink_port *devlink_port, + unsigned int port_index); +void devl_port_unregister(struct devlink_port *devlink_port); + struct ib_device; struct net *devlink_net(const struct devlink *devlink); |
