1. 23 Jul, 2017 2 commits
    • Erez Shitrit's avatar
      IB/ipoib: Use cancel_delayed_work_sync when needed · 6bdc8de2
      Erez Shitrit authored
      The work mcast_task can re-queue itself, so instead of doing
      cancel && flush_workqueue, that still can leave a queued task
      on the air, use cancel_delayed_work_sync.
      
      Also, no need to use lock over the cancel, the original lock was
      due to bit assignment setting (IPOIB_MCAST_RUN) that is not in use
      anymore.
      Signed-off-by: default avatarErez Shitrit <erezsh@mellanox.com>
      Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
      6bdc8de2
    • 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 1 commit