serial: check if backed by a physical serial port at realize time
Right now, s->poll_msl may linger at "0" value for an arbitrarily long time, until serial_update_msl is called for the first time. This is unnecessary, and will lead to the s->poll_msl field being unnecessarily migrated. We can call serial_update_msl immediately at realize time (via serial_reset) and be done with it. The memory-mapped UART was already doing that, but not the ISA and PCI variants. Regarding the delta bits, be consistent with what serial_reset does when the serial port is not backed by a physical serial port, and always clear them at reset time. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									4df7961faa
								
							
						
					
					
						commit
						a30cf8760f
					
				| 
						 | 
					@ -815,6 +815,9 @@ static void serial_reset(void *opaque)
 | 
				
			||||||
    s->thr_ipending = 0;
 | 
					    s->thr_ipending = 0;
 | 
				
			||||||
    s->last_break_enable = 0;
 | 
					    s->last_break_enable = 0;
 | 
				
			||||||
    qemu_irq_lower(s->irq);
 | 
					    qemu_irq_lower(s->irq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    serial_update_msl(s);
 | 
				
			||||||
 | 
					    s->msr &= ~UART_MSR_ANY_DELTA;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void serial_realize_core(SerialState *s, Error **errp)
 | 
					void serial_realize_core(SerialState *s, Error **errp)
 | 
				
			||||||
| 
						 | 
					@ -945,7 +948,5 @@ SerialState *serial_mm_init(MemoryRegion *address_space,
 | 
				
			||||||
    memory_region_init_io(&s->io, NULL, &serial_mm_ops[end], s,
 | 
					    memory_region_init_io(&s->io, NULL, &serial_mm_ops[end], s,
 | 
				
			||||||
                          "serial", 8 << it_shift);
 | 
					                          "serial", 8 << it_shift);
 | 
				
			||||||
    memory_region_add_subregion(address_space, base, &s->io);
 | 
					    memory_region_add_subregion(address_space, base, &s->io);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    serial_update_msl(s);
 | 
					 | 
				
			||||||
    return s;
 | 
					    return s;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue