1. 23 Jul, 2017 1 commit
    • Feras Daoud's avatar
      IB/ipoib: Fix race between light events and interface restart · edf3f301
      Feras Daoud authored
      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: default avatarFeras Daoud <ferasda@mellanox.com>
      Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      edf3f301
  2. 20 Jul, 2017 37 commits
  3. 18 Jul, 2017 2 commits