mirror_ubuntu-kernels/Documentation/netlink/specs
Ido Schimmel bf6b200bc8 devlink: Acquire device lock during reload command
Device drivers register with devlink from their probe routines (under
the device lock) by acquiring the devlink instance lock and calling
devl_register().

Drivers that support a devlink reload usually implement the
reload_{down, up}() operations in a similar fashion to their remove and
probe routines, respectively.

However, while the remove and probe routines are invoked with the device
lock held, the reload operations are only invoked with the devlink
instance lock held. It is therefore impossible for drivers to acquire
the device lock from their reload operations, as this would result in
lock inversion.

The motivating use case for invoking the reload operations with the
device lock held is in mlxsw which needs to trigger a PCI reset as part
of the reload. The driver cannot call pci_reset_function() as this
function acquires the device lock. Instead, it needs to call
__pci_reset_function_locked which expects the device lock to be held.

To that end, adjust devlink to always acquire the device lock before the
devlink instance lock when performing a reload.

Do that when reload is explicitly triggered by user space by specifying
the 'DEVLINK_NL_FLAG_NEED_DEV_LOCK' flag in the pre_doit and post_doit
operations of the reload command.

A previous patch already handled the case where reload is invoked as
part of netns dismantle.

Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-11-18 17:38:50 +00:00
..
devlink.yaml devlink: Acquire device lock during reload command 2023-11-18 17:38:50 +00:00
dpll.yaml dpll: spec: add support for pin-dpll signal phase offset/adjust 2023-10-15 16:08:24 +01:00
ethtool.yaml netlink: specs: Introduce time stamping set command 2023-11-18 14:52:58 +00:00
fou.yaml netlink: specs: fix indent in fou 2023-08-24 19:04:20 -07:00
handshake.yaml handshake: Fix sign of key_serial_t fields 2023-10-02 12:34:21 -07:00
mptcp.yaml doc/netlink: Update schema to support cmd-cnt-name and cmd-max-name 2023-10-27 14:56:04 -07:00
netdev.yaml ynl: netdev: drop unnecessary enum-as-flags 2023-10-04 17:33:54 -07:00
nfsd.yaml NFSD: introduce netlink stubs 2023-10-16 12:44:09 -04:00
ovs_datapath.yaml netlink: specs: fixup openvswitch specs for code generation 2023-06-17 00:18:00 -07:00
ovs_flow.yaml netlink: specs: add display hints to ovs_flow 2023-06-24 15:45:49 -07:00
ovs_vport.yaml doc/netlink: Add delete operation to ovs_vport spec 2023-08-25 18:58:34 -07:00
rt_addr.yaml doc/netlink: Add spec for rt addr messages 2023-08-27 17:17:10 -07:00
rt_link.yaml doc/netlink: Add spec for rt link messages 2023-08-27 17:17:11 -07:00
rt_route.yaml doc/netlink: Add spec for rt route messages 2023-08-27 17:17:11 -07:00