bnx2: fix locking when netconsole is used
authorIvan Vecera <ivecera@redhat.com>
Tue, 18 Oct 2016 06:16:03 +0000 (08:16 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 18 Oct 2016 14:01:51 +0000 (10:01 -0400)
commit6bc80629eefc3731f5881092bed610d994e05763
tree47a8fc55a1b12951ac92df7f658d5babb6cf31a5
parent3dfcb4f56f35663bdf0629d066bfde665b1ddff9
bnx2: fix locking when netconsole is used

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: Ivan Vecera <ivecera@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnx2.c