mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 14:42:08 +02:00
The commit in the fixes tag added a warning for devices
that are netdev ops locked that they should be converted
to .ndo_set_rx_mode_async. IPoIB for mlx5 is such a
driver which was missed during the conversion because the
flow is more complex:
- mlx5 part of IPoIB device was converted to ops-lock in commit [1].
- ipoib_intf_init() then overrides netdev_ops with
ipoib_netdev_ops_{pf,vf}, which still wired ndo_set_rx_mode to the
legacy sync path -- tripping the new warning on every probe.
So now we have the following splat:
netdevice: ib0 (uninitialized): ops-locked drivers should use ndo_set_rx_mode_async
WARNING: net/core/dev.c:11366 at register_netdevice+0x83c/0x21d0
...
register_netdev+0x1f/0x40
ipoib_add_one+0x35c/0x880 [ib_ipoib]
This patch implements .ndo_set_rx_mode_async but it simply schedules the
multicast restart task like before. This is done to maintain the
assumption that this task and others [2] must run on the same order
workqueue to avoid racing with themselves. The race between
ipoib_mcast_join_task() and ipoib_mcast_restart_task() would be the most
obvious example.
[1]
|
||
|---|---|---|
| .. | ||
| ipoib_cm.c | ||
| ipoib_ethtool.c | ||
| ipoib_fs.c | ||
| ipoib_ib.c | ||
| ipoib_main.c | ||
| ipoib_multicast.c | ||
| ipoib_netlink.c | ||
| ipoib_verbs.c | ||
| ipoib_vlan.c | ||
| ipoib.h | ||
| Kconfig | ||
| Makefile | ||