diff options
| author | Eilon Greenstein <eilong@broadcom.com> | 2009-01-14 21:26:01 -0800 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-01-15 08:28:12 -0800 | 
| commit | a5e9a7cfad5fd301ce2b7869bbf386b70aa39e7c (patch) | |
| tree | c9df5d842741db2beae2c515df9214aabd8ab4cb | |
| parent | 3c96c68b0c67d11b8519bc38233aec586f0211f4 (diff) | |
bnx2x: Protecting the link change indication
Without this lock, in some race conditions the driver missed link
change indication
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/bnx2x_main.c | 8 | 
1 files changed, 5 insertions, 3 deletions
| diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c index 4f1ee1f2968c..701bcc1260c2 100644 --- a/drivers/net/bnx2x_main.c +++ b/drivers/net/bnx2x_main.c @@ -2234,9 +2234,7 @@ static void bnx2x_link_attn(struct bnx2x *bp)  	/* Make sure that we are synced with the current statistics */  	bnx2x_stats_handle(bp, STATS_EVENT_STOP); -	bnx2x_acquire_phy_lock(bp);  	bnx2x_link_update(&bp->link_params, &bp->link_vars); -	bnx2x_release_phy_lock(bp);  	if (bp->link_vars.link_up) { @@ -2485,6 +2483,8 @@ static void bnx2x_attn_int_asserted(struct bnx2x *bp, u32 asserted)  	if (asserted & ATTN_HARD_WIRED_MASK) {  		if (asserted & ATTN_NIG_FOR_FUNC) { +			bnx2x_acquire_phy_lock(bp); +  			/* save nig interrupt mask */  			bp->nig_mask = REG_RD(bp, nig_int_mask_addr);  			REG_WR(bp, nig_int_mask_addr, 0); @@ -2540,8 +2540,10 @@ static void bnx2x_attn_int_asserted(struct bnx2x *bp, u32 asserted)  	REG_WR(bp, hc_addr, asserted);  	/* now set back the mask */ -	if (asserted & ATTN_NIG_FOR_FUNC) +	if (asserted & ATTN_NIG_FOR_FUNC) {  		REG_WR(bp, nig_int_mask_addr, bp->nig_mask); +		bnx2x_release_phy_lock(bp); +	}  }  static inline void bnx2x_attn_int_deasserted0(struct bnx2x *bp, u32 attn) | 
