Skip to content

Commit 527a07e

Browse files
idoschdavem330
authored andcommitted
devlink: Add device lock assert in reload operation
Add an assert to verify that the device lock is always held throughout reload operations. Tested the following flows with netdevsim and mlxsw while lockdep is enabled: netdevsim: # echo "10 1" > /sys/bus/netdevsim/new_device # devlink dev reload netdevsim/netdevsim10 # ip netns add bla # devlink dev reload netdevsim/netdevsim10 netns bla # ip netns del bla # echo 10 > /sys/bus/netdevsim/del_device mlxsw: # devlink dev reload pci/0000:01:00.0 # ip netns add bla # devlink dev reload pci/0000:01:00.0 netns bla # ip netns del bla # echo 1 > /sys/bus/pci/devices/0000\:01\:00.0/remove # echo 1 > /sys/bus/pci/rescan Signed-off-by: Ido Schimmel <[email protected]> Reviewed-by: Jiri Pirko <[email protected]> Signed-off-by: Petr Machata <[email protected]> Reviewed-by: Simon Horman <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent bf6b200 commit 527a07e

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

net/devlink/dev.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Copyright (c) 2016 Jiri Pirko <[email protected]>
55
*/
66

7+
#include <linux/device.h>
78
#include <net/genetlink.h>
89
#include <net/sock.h>
910
#include "devl_internal.h"
@@ -433,6 +434,13 @@ int devlink_reload(struct devlink *devlink, struct net *dest_net,
433434
struct net *curr_net;
434435
int err;
435436

437+
/* Make sure the reload operations are invoked with the device lock
438+
* held to allow drivers to trigger functionality that expects it
439+
* (e.g., PCI reset) and to close possible races between these
440+
* operations and probe/remove.
441+
*/
442+
device_lock_assert(devlink->dev);
443+
436444
memcpy(remote_reload_stats, devlink->stats.remote_reload_stats,
437445
sizeof(remote_reload_stats));
438446

0 commit comments

Comments
 (0)