aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
diff options
context:
space:
mode:
authorDmitry Kravkov <dmitry@broadcom.com>2013-03-26 21:05:17 -0400
committerDavid S. Miller <davem@davemloft.net>2013-03-27 12:48:32 -0400
commit1d6f3cd8988822c7bdc3c685fac0a99315e83400 (patch)
treea66c7d4931aa49336e07e97d3a44ee674a05f79c /drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
parent21776537b15f72dc9d8c16b00439fbdaa8ce7a34 (diff)
bnx2x: Prevent VF race
The mail box containing the Vf-Pf messages is susceptible to a race - it's possible for 2 flows to try and write commands, causing one to override the other's message. Use a mutex to synchronize the access, preventing said race. Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com> Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com> Signed-off-by: Ariel Elior <ariele@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c')
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
index ad7ad1dae1e7..db63d8655fca 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c
@@ -2388,8 +2388,8 @@ int bnx2x_iov_eq_sp_event(struct bnx2x *bp, union event_ring_elem *elem)
2388 goto get_vf; 2388 goto get_vf;
2389 case EVENT_RING_OPCODE_MALICIOUS_VF: 2389 case EVENT_RING_OPCODE_MALICIOUS_VF:
2390 abs_vfid = elem->message.data.malicious_vf_event.vf_id; 2390 abs_vfid = elem->message.data.malicious_vf_event.vf_id;
2391 DP(BNX2X_MSG_IOV, "Got VF MALICIOUS notification abs_vfid=%d\n", 2391 DP(BNX2X_MSG_IOV, "Got VF MALICIOUS notification abs_vfid=%d err_id=0x%x\n",
2392 abs_vfid); 2392 abs_vfid, elem->message.data.malicious_vf_event.err_id);
2393 goto get_vf; 2393 goto get_vf;
2394 default: 2394 default:
2395 return 1; 2395 return 1;
@@ -2446,8 +2446,8 @@ get_vf:
2446 /* Do nothing for now */ 2446 /* Do nothing for now */
2447 break; 2447 break;
2448 case EVENT_RING_OPCODE_MALICIOUS_VF: 2448 case EVENT_RING_OPCODE_MALICIOUS_VF:
2449 DP(BNX2X_MSG_IOV, "got VF [%d] MALICIOUS notification\n", 2449 DP(BNX2X_MSG_IOV, "Got VF MALICIOUS notification abs_vfid=%d error id %x\n",
2450 vf->abs_vfid); 2450 abs_vfid, elem->message.data.malicious_vf_event.err_id);
2451 /* Do nothing for now */ 2451 /* Do nothing for now */
2452 break; 2452 break;
2453 } 2453 }
@@ -3417,10 +3417,10 @@ enum sample_bulletin_result bnx2x_sample_bulletin(struct bnx2x *bp)
3417 return PFVF_BULLETIN_UPDATED; 3417 return PFVF_BULLETIN_UPDATED;
3418} 3418}
3419 3419
3420void bnx2x_vf_map_doorbells(struct bnx2x *bp) 3420void __iomem *bnx2x_vf_doorbells(struct bnx2x *bp)
3421{ 3421{
3422 /* vf doorbells are embedded within the regview */ 3422 /* vf doorbells are embedded within the regview */
3423 bp->doorbells = bp->regview + PXP_VF_ADDR_DB_START; 3423 return bp->regview + PXP_VF_ADDR_DB_START;
3424} 3424}
3425 3425
3426int bnx2x_vf_pci_alloc(struct bnx2x *bp) 3426int bnx2x_vf_pci_alloc(struct bnx2x *bp)