Skip to contentSkip to conversation

be2net: memory barrier fixes on IBM p7 platform

PATCH Applied Sathya Perla 2 participants 3 messages Jun 29, 2010 – Jul 1, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 be2net: memory barrier fixes on IBM p7 platform

The ibm p7 architecure seems to reorder memory accesses more aggressively than previous ppc64 architectures. This requires memory barriers to ensure that rx/tx doorbells are pressed only after memory to be DMAed is written.

---
 drivers/net/benet/be_cmds.c |    2 ++
 drivers/net/benet/be_main.c |    9 ++++++++-
 2 files changed, 10 insertions(+), 1 deletions(-)
drivers/net/benet/be_cmds.c +2 -0
index ee1ad96..65e3260 100644
@@ -25,6 +25,8 @@ static void be_mcc_notify(struct be_adapter *adapter)
 
 	val |= mccq->id & DB_MCCQ_RING_ID_MASK;
 	val |= 1 << DB_MCCQ_NUM_POSTED_SHIFT;
+
+	wmb();
 	iowrite32(val, adapter->db + DB_MCCQ_OFFSET);
 }
 
drivers/net/benet/be_main.c +8 -1
index 01eb447..62484b8 100644
@@ -89,6 +89,8 @@ static void be_rxq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
 	u32 val = 0;
 	val |= qid & DB_RQ_RING_ID_MASK;
 	val |= posted << DB_RQ_NUM_POSTED_SHIFT;
+
+	wmb();
 	iowrite32(val, adapter->db + DB_RQ_OFFSET);
 }
 
@@ -97,6 +99,8 @@ static void be_txq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
 	u32 val = 0;
 	val |= qid & DB_TXULP_RING_ID_MASK;
 	val |= (posted & DB_TXULP_NUM_POSTED_MASK) << DB_TXULP_NUM_POSTED_SHIFT;
+
+	wmb();
 	iowrite32(val, adapter->db + DB_TXULP1_OFFSET);
 }
 
@@ -972,7 +976,8 @@ static struct be_eth_rx_compl *be_rx_compl_get(struct be_adapter *adapter)
 
 	if (rxcp->dw[offsetof(struct amap_eth_rx_compl, valid) / 32] == 0)
 		return NULL;
-
+	
+	rmb();
 	be_dws_le_to_cpu(rxcp, sizeof(*rxcp));
 
 	queue_tail_inc(&adapter->rx_obj.cq);
@@ -1066,6 +1071,7 @@ static struct be_eth_tx_compl *be_tx_compl_get(struct be_queue_info *tx_cq)
 	if (txcp->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] == 0)
 		return NULL;
 
+	rmb();
 	be_dws_le_to_cpu(txcp, sizeof(*txcp));
 
 	txcp->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] = 0;
@@ -1113,6 +1119,7 @@ static inline struct be_eq_entry *event_get(struct be_eq_obj *eq_obj)
 	if (!eqe->evt)
 		return NULL;
 
+	rmb();
 	eqe->evt = le32_to_cpu(eqe->evt);
 	queue_tail_inc(&eq_obj->q);
 	return eqe;
Signature · 1 line
1.6.5.2
maintainer Applied
#1 lore raw

From: Sathya Perla <[email protected]>
Date: Tue, 29 Jun 2010 15:41:17 +0530

Quoted 6 lines

The ibm p7 architecure seems to reorder memory accesses more aggressively than previous ppc64 architectures. This requires memory barriers to ensure that rx/tx doorbells are pressed only after memory to be DMAed is written.

Applied, but I had to fix something:

drivers/net/benet/be_main.c static struct be_eth_rx_compl *be_rx_compl_get(struct be_adapter *adapter) · line 980

Quoted 7 lines
drivers/net/benet/be_main.c +2 -1
@@ -972,7 +976,8 @@ static struct be_eth_rx_compl *be_rx_compl_get(struct be_adapter *adapter)
 
 	if (rxcp->dw[offsetof(struct amap_eth_rx_compl, valid) / 32] == 0)
 		return NULL;
-
+	
+	rmb();

That first addition does nothing but add erroneous trailing whitespace.

You can physically see that something must be wrong here just by look at this patch chunk, please review things more thoroughly before submitting in the future.

Thanks.

#2 lore raw
Quoted 11 lines · David Miller

drivers/net/benet/be_main.c static struct be_eth_rx_compl *be_rx_compl_get(struct be_adapter *adapter) · line 980

Quoted 3 lines
drivers/net/benet/be_main.c +2 -1
-
+	
+	rmb();

That first addition does nothing but add erroneous trailing whitespace.

You can physically see that something must be wrong here just by look at this patch chunk, please review things more thoroughly before submitting in the future.

Will do, thanks.

___________________________________________________________________________________
This message, together with any attachment(s), contains confidential and proprietary information of ServerEngines Corporation and is intended only for the designated recipient(s) named above. Any unauthorized review, printing, retention, copying, disclosure or distribution is strictly prohibited. If you are not the intended recipient of this message, please immediately advise the sender by reply email message and delete all copies of this message and any attachment(s). Thank you.