aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorJiri Pirko <jiri@nvidia.com>2022-09-29 09:28:58 +0200
committerJakub Kicinski <kuba@kernel.org>2022-09-30 18:17:16 -0700
commitae3bbc04d4bfef5d0332cd4edda3ac8f714cea23 (patch)
treee150b9e6fd1d7233eb6c3a05bf53b89cae4d40ea /include/net
parentnet: devlink: introduce a flag to indicate devlink port being registered (diff)
downloadlinux-dev-ae3bbc04d4bfef5d0332cd4edda3ac8f714cea23.tar.xz
linux-dev-ae3bbc04d4bfef5d0332cd4edda3ac8f714cea23.zip
net: devlink: add port_init/fini() helpers to allow pre-register/post-unregister functions
Lifetime of some of the devlink objects, like regions, is currently forced to be different for devlink instance and devlink port instance (per-port regions). The reason is that for devlink ports, the internal structures initialization happens only after devlink_port_register() is called. To resolve this inconsistency, introduce new set of helpers to allow driver to initialize devlink pointer and region list before devlink_register() is called. That allows port regions to be created before devlink port registration and destroyed after devlink port unregistration. Signed-off-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/devlink.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/include/net/devlink.h b/include/net/devlink.h
index bcacd8dab297..ba6b8b094943 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -130,7 +130,8 @@ struct devlink_port {
struct devlink_port_attrs attrs;
u8 attrs_set:1,
switch_port:1,
- registered:1;
+ registered:1,
+ initialized:1;
struct delayed_work type_warn_dw;
struct list_head reporter_list;
struct mutex reporters_lock; /* Protects reporter_list */
@@ -1563,6 +1564,9 @@ void devlink_set_features(struct devlink *devlink, u64 features);
void devlink_register(struct devlink *devlink);
void devlink_unregister(struct devlink *devlink);
void devlink_free(struct devlink *devlink);
+void devlink_port_init(struct devlink *devlink,
+ struct devlink_port *devlink_port);
+void devlink_port_fini(struct devlink_port *devlink_port);
int devl_port_register(struct devlink *devlink,
struct devlink_port *devlink_port,
unsigned int port_index);