avoid recursive tx
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2050 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									1dce7c3c22
								
							
						
					
					
						commit
						ec607da7c2
					
				
							
								
								
									
										15
									
								
								hw/pcnet.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								hw/pcnet.c
									
									
									
									
									
								
							| @ -57,6 +57,7 @@ struct PCNetState_st { | ||||
|     uint64_t timer; | ||||
|     int xmit_pos, recv_pos; | ||||
|     uint8_t buffer[4096]; | ||||
|     int tx_busy; | ||||
| }; | ||||
| 
 | ||||
| #ifdef __GNUC__ | ||||
| @ -659,6 +660,8 @@ static void pcnet_s_reset(PCNetState *s) | ||||
|     s->csr[114] = 0x0000; | ||||
|     s->csr[122] = 0x0000; | ||||
|     s->csr[124] = 0x0000; | ||||
| 
 | ||||
|     s->tx_busy = 0; | ||||
| } | ||||
| 
 | ||||
| static void pcnet_update_irq(PCNetState *s) | ||||
| @ -1104,7 +1107,9 @@ static void pcnet_transmit(PCNetState *s) | ||||
|         s->csr[0] &= ~0x0008; | ||||
|         return; | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     s->tx_busy = 1; | ||||
| 
 | ||||
|     txagain: | ||||
|     if (pcnet_tdte_poll(s)) { | ||||
|         struct pcnet_TMD tmd; | ||||
| @ -1167,6 +1172,8 @@ static void pcnet_transmit(PCNetState *s) | ||||
|         if (count--) | ||||
|           goto txagain; | ||||
|     } | ||||
| 
 | ||||
|     s->tx_busy = 0; | ||||
| } | ||||
| 
 | ||||
| static void pcnet_poll(PCNetState *s) | ||||
| @ -1177,7 +1184,13 @@ static void pcnet_poll(PCNetState *s) | ||||
| 
 | ||||
|     if (CSR_TDMD(s) ||  | ||||
|         (CSR_TXON(s) && !CSR_DPOLL(s) && pcnet_tdte_poll(s))) | ||||
|     { | ||||
|         /* prevent recursion */ | ||||
|         if (s->tx_busy) | ||||
|             return; | ||||
| 
 | ||||
|         pcnet_transmit(s); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static void pcnet_poll_timer(void *opaque) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 bellard
						bellard