netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-2.6 1/2] cnic: Prevent status block race conditions with hardware
@ 2011-03-02 23:00 Michael Chan
  2011-03-02 23:00 ` [PATCH net-2.6 2/2] cnic: Fix lost interrupt on bnx2x Michael Chan
  2011-03-03  0:00 ` [PATCH net-2.6 1/2] cnic: Prevent status block race conditions with hardware David Miller
  0 siblings, 2 replies; 4+ messages in thread
From: Michael Chan @ 2011-03-02 23:00 UTC (permalink / raw)
  To: davem; +Cc: netdev, Michael Chan

The status block index is used to acknowledge interrupt events and must
be read before checking for the interrupt events, so we need to add rmb()
to guarantee that.

Signed-off-by: Michael Chan <mchan@broadcom.com>
---
 drivers/net/cnic.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/net/cnic.c b/drivers/net/cnic.c
index 7ff170c..b0d9e4a 100644
--- a/drivers/net/cnic.c
+++ b/drivers/net/cnic.c
@@ -2760,6 +2760,8 @@ static u32 cnic_service_bnx2_queues(struct cnic_dev *dev)
 	u32 status_idx = (u16) *cp->kcq1.status_idx_ptr;
 	int kcqe_cnt;
 
+	/* status block index must be read before reading other fields */
+	rmb();
 	cp->kwq_con_idx = *cp->kwq_con_idx_ptr;
 
 	while ((kcqe_cnt = cnic_get_kcqes(dev, &cp->kcq1))) {
@@ -2770,6 +2772,8 @@ static u32 cnic_service_bnx2_queues(struct cnic_dev *dev)
 		barrier();
 		if (status_idx != *cp->kcq1.status_idx_ptr) {
 			status_idx = (u16) *cp->kcq1.status_idx_ptr;
+			/* status block index must be read first */
+			rmb();
 			cp->kwq_con_idx = *cp->kwq_con_idx_ptr;
 		} else
 			break;
@@ -2888,6 +2892,8 @@ static u32 cnic_service_bnx2x_kcq(struct cnic_dev *dev, struct kcq_info *info)
 	u32 last_status = *info->status_idx_ptr;
 	int kcqe_cnt;
 
+	/* status block index must be read before reading the KCQ */
+	rmb();
 	while ((kcqe_cnt = cnic_get_kcqes(dev, info))) {
 
 		service_kcqes(dev, kcqe_cnt);
@@ -2898,6 +2904,8 @@ static u32 cnic_service_bnx2x_kcq(struct cnic_dev *dev, struct kcq_info *info)
 			break;
 
 		last_status = *info->status_idx_ptr;
+		/* status block index must be read before reading the KCQ */
+		rmb();
 	}
 	return last_status;
 }
-- 
1.6.4.GIT



^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-03-02 23:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-02 23:00 [PATCH net-2.6 1/2] cnic: Prevent status block race conditions with hardware Michael Chan
2011-03-02 23:00 ` [PATCH net-2.6 2/2] cnic: Fix lost interrupt on bnx2x Michael Chan
2011-03-03  0:00   ` David Miller
2011-03-03  0:00 ` [PATCH net-2.6 1/2] cnic: Prevent status block race conditions with hardware David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).