devlink: allow to call devl_param_driverinit_value_get() without holding instance...
authorJiri Pirko <jiri@nvidia.com>
Fri, 10 Feb 2023 10:01:30 +0000 (11:01 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 13 Feb 2023 09:49:14 +0000 (09:49 +0000)
commit280f7b2adca09c8d5f34b99f49e5c570aa81daad
tree3f66d4d8ecf6653b14ef513b5b4ee8045720a625
parenta72e17b4523223015d3b3fd79bac2b065d6d09a9
devlink: allow to call devl_param_driverinit_value_get() without holding instance lock

If the driver maintains following basic sane behavior, the
devl_param_driverinit_value_get() function could be called without
holding instance lock:

1) Driver ensures a call to devl_param_driverinit_value_get() cannot
   race with registering/unregistering the parameter with
   the same parameter ID.
2) Driver ensures a call to devl_param_driverinit_value_get() cannot
   race with devl_param_driverinit_value_set() call with
   the same parameter ID.
3) Driver ensures a call to devl_param_driverinit_value_get() cannot
   race with reload operation.

By the nature of params usage, these requirements should be
trivially achievable. If the driver for some off reason
is not able to comply, it has to take the devlink->lock while
calling devl_param_driverinit_value_get().

Remove the lock assertion and add comment describing
the locking requirements.

This fixes a splat in mlx5 driver introduced by the commit
referenced in the "Fixes" tag.

Lore: https://lore.kernel.org/netdev/719de4f0-76ac-e8b9-38a9-167ae239efc7@amd.com/
Reported-by: Kim Phillips <kim.phillips@amd.com>
Fixes: 075935f0ae0f ("devlink: protect devlink param list by instance lock")
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Kim Phillips <kim.phillips@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/devlink/leftover.c