Skip to contentSkip to conversation

rtlwifi: Assign rx buffer ownership to hardware last

PATCH In review Mike McCormack 2 participants 2 messages May 23, 2011 Networking drivers (wireless)

lore
Share & tools
lore
#0 lore raw

PATCH 6/8 rtlwifi: Assign rx buffer ownership to hardware last

Ownership of an rx buffer should only be given to the hardware after all other changes are written, otherwise there's a potential race.

---
 drivers/net/wireless/rtlwifi/pci.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/net/wireless/rtlwifi/pci.c +3 -2
index fd74396..4fe405a 100644
@@ -782,8 +782,6 @@ done:
 		rtlpriv->cfg->ops->set_desc((u8 *) pdesc, false,
 					    HW_DESC_RXBUFF_ADDR,
 					    (u8 *)&bufferaddress);
-		rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false, HW_DESC_RXOWN,
-					    (u8 *)&tmp_one);
 		rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false,
 					    HW_DESC_RXPKT_LEN,
 					    (u8 *)&rtlpci->rxbuffersize);
@@ -793,6 +791,9 @@ done:
 						    HW_DESC_RXERO,
 						    (u8 *)&tmp_one);
 
+		rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false, HW_DESC_RXOWN,
+					    (u8 *)&tmp_one);
+
 		index = (index + 1) % rtlpci->rxringcount;
 	}
 
Signature · 1 line
1.7.4.1
#1 lore raw
Quoted 23 lines · Mike McCormack

Ownership of an rx buffer should only be given to the hardware after all other changes are written, otherwise there's a potential race.

---
  drivers/net/wireless/rtlwifi/pci.c |    5 +++--
  1 files changed, 3 insertions(+), 2 deletions(-)
drivers/net/wireless/rtlwifi/pci.c +0 -2
index fd74396..4fe405a 100644
@@ -782,8 +782,6 @@ done:
  		rtlpriv->cfg->ops->set_desc((u8 *) pdesc, false,
  					    HW_DESC_RXBUFF_ADDR,
  					    (u8 *)&bufferaddress);
-		rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false, HW_DESC_RXOWN,
-					    (u8 *)&tmp_one);
  		rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false,
  					    HW_DESC_RXPKT_LEN,
  					    (u8 *)&rtlpci->rxbuffersize);

drivers/net/wireless/rtlwifi/pci.c done: · line 799

Quoted 9 lines
drivers/net/wireless/rtlwifi/pci.c +3 -0
@@ -793,6 +791,9 @@ done:
  						    HW_DESC_RXERO,
  						    (u8 *)&tmp_one);
 
+		rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false, HW_DESC_RXOWN,
+					    (u8 *)&tmp_one);
+
  		index = (index + 1) % rtlpci->rxringcount;
  	}
 

---

Larry