|  | @@ -92,19 +92,24 @@ static int vmxnet3_transmit ( struct net_device *netdev,
 | 
		
	
		
			
			| 92 | 92 |  			      struct io_buffer *iobuf ) {
 | 
		
	
		
			
			| 93 | 93 |  	struct vmxnet3_nic *vmxnet = netdev_priv ( netdev );
 | 
		
	
		
			
			| 94 | 94 |  	struct vmxnet3_tx_desc *tx_desc;
 | 
		
	
		
			
			|  | 95 | +	unsigned int fill;
 | 
		
	
		
			
			| 95 | 96 |  	unsigned int desc_idx;
 | 
		
	
		
			
			| 96 | 97 |  	unsigned int generation;
 | 
		
	
		
			
			| 97 | 98 |  
 | 
		
	
		
			
			| 98 | 99 |  	/* Check that we have a free transmit descriptor */
 | 
		
	
		
			
			| 99 |  | -	desc_idx = ( vmxnet->count.tx_prod % VMXNET3_NUM_TX_DESC );
 | 
		
	
		
			
			| 100 |  | -	generation = ( ( vmxnet->count.tx_prod & VMXNET3_NUM_TX_DESC ) ?
 | 
		
	
		
			
			| 101 |  | -		       0 : cpu_to_le32 ( VMXNET3_TXF_GEN ) );
 | 
		
	
		
			
			| 102 |  | -	if ( vmxnet->tx_iobuf[desc_idx] ) {
 | 
		
	
		
			
			|  | 100 | +	fill = ( vmxnet->count.tx_prod - vmxnet->count.tx_cons );
 | 
		
	
		
			
			|  | 101 | +	if ( fill >= VMXNET3_TX_FILL ) {
 | 
		
	
		
			
			| 103 | 102 |  		DBGC ( vmxnet, "VMXNET3 %p out of transmit descriptors\n",
 | 
		
	
		
			
			| 104 | 103 |  		       vmxnet );
 | 
		
	
		
			
			| 105 | 104 |  		return -ENOBUFS;
 | 
		
	
		
			
			| 106 | 105 |  	}
 | 
		
	
		
			
			| 107 | 106 |  
 | 
		
	
		
			
			|  | 107 | +	/* Locate transmit descriptor */
 | 
		
	
		
			
			|  | 108 | +	desc_idx = ( vmxnet->count.tx_prod % VMXNET3_NUM_TX_DESC );
 | 
		
	
		
			
			|  | 109 | +	generation = ( ( vmxnet->count.tx_prod & VMXNET3_NUM_TX_DESC ) ?
 | 
		
	
		
			
			|  | 110 | +		       0 : cpu_to_le32 ( VMXNET3_TXF_GEN ) );
 | 
		
	
		
			
			|  | 111 | +	assert ( vmxnet->tx_iobuf[desc_idx] == NULL );
 | 
		
	
		
			
			|  | 112 | +
 | 
		
	
		
			
			| 108 | 113 |  	/* Increment producer counter */
 | 
		
	
		
			
			| 109 | 114 |  	vmxnet->count.tx_prod++;
 | 
		
	
		
			
			| 110 | 115 |  
 |