On 12/24/2015 01:14 PM, Devesh Sharma wrote:
> This patch series fixes for critical bugs introduced due to recent
> changes in linux Infiniband stack.
> 
> Patch 0001 fixes a vlan-id assignment issues in presence of PFC.
> This bug was introduced recently got introduced and it fixes
> dbf727de7440 ('IB/core: Use GID table in AH creation and dmac resolution')
> 
> Patches 0002 to 0004 fixes a deadlock condition reported by Dough Ledford
> while testing linux-4.4-rc5. The deadlock happens when any be2net hook 
> (e.g. open/close) is called in parallel to insmod ocrdma.ko.
> 
> A. be2net is sending administrative open/close event to ocrdma holding
>    device_list_mutex. It does this from ndo_open/ndo_stop hooks of be2net.
>    So sequence of locks is rtnl_lock---> device_list lock
> 
> B.  When new ocrdma roce device gets registered, infiniband stack now
>     takes rtnl_lock in ib_register_device() in GID initialization routines.
>     So sequence of locks in this path is device_list lock ---> rtnl_lock.
> 
> This improper locking sequence causes deadlock.
> 
> Patch 0002 removes an unwanted code to force all active-QPs to error state
> using a management command. It is rather simple to let active-QPs to move
> to error on their own due to a completion error after the port error is
> reported.
> 
> Patch 0003 makes IB-dispatch-event mechanism independent of administrative
> open/close events injected from be2net driver. Instead of those events, now
> ocrdma relies on async-events generated from CNA. Thus, solving the problem
> of keeping device_list_mutex busy under rtnl-lock. Moving from administrative
> events to CNA async-events does not change the functionality of ocrdma driver
> in any way.
> 
> Patch 0004 Removes the dead code from be2net driver.
> 
> Devesh Sharma (4):
>   RDMA/ocrdma: Fix vlan-id assignment in qp parameters
>   RDMA/ocrdma: Dispatch only port event when port state changes
>   RDMA/ocrdma: Depend on async link events from CNA
>   RDMA/be2net: Remove open and close entry points
> 
>  drivers/infiniband/hw/ocrdma/ocrdma.h       | 10 +++++
>  drivers/infiniband/hw/ocrdma/ocrdma_hw.c    | 49 ++++++++++++++++++++-----
>  drivers/infiniband/hw/ocrdma/ocrdma_hw.h    |  4 +-
>  drivers/infiniband/hw/ocrdma/ocrdma_main.c  | 57 
> +++++++++++++----------------
>  drivers/infiniband/hw/ocrdma/ocrdma_sli.h   | 49 +++++++++++++++++++++++--
>  drivers/infiniband/hw/ocrdma/ocrdma_verbs.c |  2 +-
>  drivers/net/ethernet/emulex/benet/be.h      |  2 -
>  drivers/net/ethernet/emulex/benet/be_main.c |  4 --
>  drivers/net/ethernet/emulex/benet/be_roce.c | 36 ------------------
>  drivers/net/ethernet/emulex/benet/be_roce.h |  4 +-
>  10 files changed, 124 insertions(+), 93 deletions(-)
> 

Thanks Devesh, I'll review and test this later today.

-- 
Doug Ledford <dledf...@redhat.com>
              GPG KeyID: 0E572FDD


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to