Commit 4c2bd791 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

net: let lockdep compare instance locks



AFAIU always returning -1 from lockdep's compare function
basically disables checking of dependencies between given
locks. Try to be a little more precise about what guarantees
that instance locks won't deadlock.

Right now we only nest them under protection of rtnl_lock.
Mostly in unregister_netdevice_many() and dev_close_many().

Acked-by: default avatarStanislav Fomichev <sdf@fomichev.me>
Reviewed-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250517200810.466531-1-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 6a7e8b5d
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -99,16 +99,15 @@ static inline void netdev_unlock_ops_compat(struct net_device *dev)
static inline int netdev_lock_cmp_fn(const struct lockdep_map *a,
				     const struct lockdep_map *b)
{
	/* Only lower devices currently grab the instance lock, so no
	 * real ordering issues can occur. In the near future, only
	 * hardware devices will grab instance lock which also does not
	 * involve any ordering. Suppress lockdep ordering warnings
	 * until (if) we start grabbing instance lock on pure SW
	 * devices (bond/team/veth/etc).
	 */
	if (a == b)
		return 0;
	return -1;

	/* Allow locking multiple devices only under rtnl_lock,
	 * the exact order doesn't matter.
	 * Note that upper devices don't lock their ops, so nesting
	 * mostly happens in batched device removal for now.
	 */
	return lockdep_rtnl_is_held() ? -1 : 1;
}

#define netdev_lockdep_set_classes(dev)				\