• Ivan Vecera's avatar
    bnx2: fix locking when netconsole is used · 6bc80629
    Ivan Vecera authored
    Functions bnx2_reg_rd_ind(), bnx2_reg_wr_ind() and bnx2_ctx_wr()
    can be called with IRQs disabled when netconsole is enabled. So they
    should use spin_{,un}lock_irq{save,restore} instead of _bh variants.
    
    Example call flow:
    bnx2_poll()
      ->bnx2_poll_link()
        ->bnx2_phy_int()
          ->bnx2_set_remote_link()
            ->bnx2_shmem_rd()
              ->bnx2_reg_rd_ind()
                -> spin_lock_bh(&bp->indirect_lock);
                   spin_unlock_bh(&bp->indirect_lock);
                   ...
                   -> __local_bh_enable_ip
    
    static inline void __local_bh_enable_ip(unsigned long ip)
          WARN_ON_ONCE(in_irq() || irqs_disabled());   <<<<<< WARN
    
    Cc: Sony Chacko <sony.chacko@qlogic.com>
    Cc: Dept-HSGLinuxNICDev@qlogic.com
    Signed-off-by: default avatarIvan Vecera <ivecera@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6bc80629
bnx2.c 216 KB