net: fix infinite loop on exit
1ceef9f27359cbe92ef124bf74de6f792e71f6fb added handling for cleaning up multiple queues in qemu_del_nic() for cases where multiqueue is in use. To determine the number of queues it looks at nic->conf->queues, then iterates through all the queues to cleanup the associated NetClientStates. If no queues are found, no NetClientStates are deleted. However, nic->conf->queues is only set when a peer is created via -netdev or netdev_add, and is otherwise 0. This causes us to spin in net_cleanup() if we attempt to shut down qemu before adding a host device. Since qemu_new_nic() unconditionally creates at least 1 queue/NetClientState at queue idx 0, make qemu_del_nic() always attempt to clean it up. Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									ecd8d4715e
								
							
						
					
					
						commit
						b890492110
					
				@ -351,7 +351,7 @@ void qemu_del_net_client(NetClientState *nc)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void qemu_del_nic(NICState *nic)
 | 
					void qemu_del_nic(NICState *nic)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int i, queues = nic->conf->queues;
 | 
					    int i, queues = MAX(nic->conf->queues, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* If this is a peer NIC and peer has already been deleted, free it now. */
 | 
					    /* If this is a peer NIC and peer has already been deleted, free it now. */
 | 
				
			||||||
    if (nic->peer_deleted) {
 | 
					    if (nic->peer_deleted) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user