linux_dsm_epyc7002/drivers/infiniband/ulp/ipoib
Feras Daoud edf3f301db IB/ipoib: Fix race between light events and interface restart
A potential race between light_event and interface restart
may attach multicast group to an already attached QP.

Scenario:
light_event flow goes through ipoib_mcast_dev_flush function,
if a context switch occurs before calling ipoib_mcast_remove_list,
then we may face a situation where the broadcast of the priv is null
and the corresponding QP is not detached yet.
If an "interface restart" runs during the previous context switch,
the following scenario occurs:
When the device goes up, ipoib_ib_dev_up function will be called,
it will send a new registration request to the broadcast group and then
attach the group to the QP that was not detached before.

     IPOIB_FLUSH_LIGHT                                          INTERFACE RESTART

    __ipoib_ib_dev_flush                                                |
        |                                                               |
        |                                                               |
        |                                                               |
    ipoib_mcast_dev_flush                                               |
    Move mcast list and broadcast to remove_list                        |
        |                                                               |
        |                                                               |
    Context Switch-->                                                   |
        |                                                       ipoib_ib_dev_down
        |                                                               |
        |                                                               |
        |                                                       ipoib_ib_dev_up
        |                                                               |
        |                                                               |
        |                                                       ipoib_mcast_join_task
        |                                                       allocate new broadcast
        |                                                               |
        |                                                               |
        |                                                       Attach QP to multicast group
        |                                                               |
        |                                                               |
        |                                                       <--Context Switch
    ipoib_mcast_leave
    Detach QP from multicast group

Signed-off-by: Feras Daoud <ferasda@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
2017-07-23 09:45:11 +03:00
..
ipoib_cm.c IB/IPoIB: Convert IPoIB to memalloc_noio_* calls 2017-07-17 21:21:23 -04:00
ipoib_ethtool.c RDMA/IPoIB: Replace netdev_priv with ipoib_priv for ipoib_get_link_ksettings 2017-06-01 17:20:09 -04:00
ipoib_fs.c IB/SA: Add OPA path record type 2017-05-01 14:39:02 -04:00
ipoib_ib.c IB: Convert msleep below 20ms to usleep_range 2017-07-17 21:21:22 -04:00
ipoib_main.c IB/ipoib: Fix race between light events and interface restart 2017-07-23 09:45:11 +03:00
ipoib_multicast.c IB/ipoib: Fix race between light events and interface restart 2017-07-23 09:45:11 +03:00
ipoib_netlink.c net: add netlink_ext_ack argument to rtnl_link_ops.changelink 2017-06-26 23:13:22 -04:00
ipoib_verbs.c IB/IPoIB: Support acceleration options callbacks 2017-04-20 15:19:44 -04:00
ipoib_vlan.c IB/ipoib: Fix memory leak in create child syscall 2017-06-14 15:16:23 -04:00
ipoib.h IB/ipoib: Fix race between light events and interface restart 2017-07-23 09:45:11 +03:00
Kconfig kconfig: rename CONFIG_EMBEDDED to CONFIG_EXPERT 2011-01-20 17:02:05 -08:00
Makefile IB/ipoib: Add rtnl_link_ops support 2012-09-20 16:49:17 -04:00