mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	net: ftgmac100: Ensure tx descriptor updates are visible
The driver must ensure TX descriptor updates are visible before updating TX pointer and TX clear pointer. This resolves TX hangs observed on AST2600 when running iperf3. Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									8af174ea86
								
							
						
					
					
						commit
						4186c8d9e6
					
				
					 1 changed files with 18 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -656,6 +656,11 @@ static bool ftgmac100_tx_complete_packet(struct ftgmac100 *priv)
 | 
			
		|||
	ftgmac100_free_tx_packet(priv, pointer, skb, txdes, ctl_stat);
 | 
			
		||||
	txdes->txdes0 = cpu_to_le32(ctl_stat & priv->txdes0_edotr_mask);
 | 
			
		||||
 | 
			
		||||
	/* Ensure the descriptor config is visible before setting the tx
 | 
			
		||||
	 * pointer.
 | 
			
		||||
	 */
 | 
			
		||||
	smp_wmb();
 | 
			
		||||
 | 
			
		||||
	priv->tx_clean_pointer = ftgmac100_next_tx_pointer(priv, pointer);
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
| 
						 | 
				
			
			@ -809,6 +814,11 @@ static netdev_tx_t ftgmac100_hard_start_xmit(struct sk_buff *skb,
 | 
			
		|||
	dma_wmb();
 | 
			
		||||
	first->txdes0 = cpu_to_le32(f_ctl_stat);
 | 
			
		||||
 | 
			
		||||
	/* Ensure the descriptor config is visible before setting the tx
 | 
			
		||||
	 * pointer.
 | 
			
		||||
	 */
 | 
			
		||||
	smp_wmb();
 | 
			
		||||
 | 
			
		||||
	/* Update next TX pointer */
 | 
			
		||||
	priv->tx_pointer = pointer;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue