Browse Source

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.

Signed-off-by: Mike McCormack <mikem@ring3k.org>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Mike McCormack 14 years ago
parent
commit
febc9fe538
1 changed files with 3 additions and 2 deletions
  1. 3 2
      drivers/net/wireless/rtlwifi/pci.c

+ 3 - 2
drivers/net/wireless/rtlwifi/pci.c

@@ -784,8 +784,6 @@ done:
 		rtlpriv->cfg->ops->set_desc((u8 *) pdesc, false,
 		rtlpriv->cfg->ops->set_desc((u8 *) pdesc, false,
 					    HW_DESC_RXBUFF_ADDR,
 					    HW_DESC_RXBUFF_ADDR,
 					    (u8 *)&bufferaddress);
 					    (u8 *)&bufferaddress);
-		rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false, HW_DESC_RXOWN,
-					    (u8 *)&tmp_one);
 		rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false,
 		rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false,
 					    HW_DESC_RXPKT_LEN,
 					    HW_DESC_RXPKT_LEN,
 					    (u8 *)&rtlpci->rxbuffersize);
 					    (u8 *)&rtlpci->rxbuffersize);
@@ -795,6 +793,9 @@ done:
 						    HW_DESC_RXERO,
 						    HW_DESC_RXERO,
 						    (u8 *)&tmp_one);
 						    (u8 *)&tmp_one);
 
 
+		rtlpriv->cfg->ops->set_desc((u8 *)pdesc, false, HW_DESC_RXOWN,
+					    (u8 *)&tmp_one);
+
 		index = (index + 1) % rtlpci->rxringcount;
 		index = (index + 1) % rtlpci->rxringcount;
 	}
 	}