Commit a30cf876 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

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: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 4df7961f
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -815,6 +815,9 @@ static void serial_reset(void *opaque)
    s->thr_ipending = 0;
    s->last_break_enable = 0;
    qemu_irq_lower(s->irq);

    serial_update_msl(s);
    s->msr &= ~UART_MSR_ANY_DELTA;
}

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,
                          "serial", 8 << it_shift);
    memory_region_add_subregion(address_space, base, &s->io);

    serial_update_msl(s);
    return s;
}