* [Qemu-devel] [PATCH 0/2] serial: cleanups for physical serial port passthrough @ 2014-09-19 8:54 Paolo Bonzini 2014-09-19 8:54 ` [Qemu-devel] [PATCH 1/2] serial: reset state at startup Paolo Bonzini 2014-09-19 8:54 ` [Qemu-devel] [PATCH 2/2] serial: check if backed by a physical serial port at realize time Paolo Bonzini 0 siblings, 2 replies; 6+ messages in thread From: Paolo Bonzini @ 2014-09-19 8:54 UTC (permalink / raw) To: qemu-devel; +Cc: armbru, pavel.dovgaluk, batuzovk Patch 1 ensures that the serial port state is the same at VM startup and after reset. Patch 2 ensures that the poll_msl field is computed at reset time (rather than arbitrarily later), so that it becomes -1 for serial ports backed by PTYs, sockets, etc. Please review! Paolo Paolo Bonzini (2): serial: reset state at startup serial: check if backed by a physical serial port at realize time hw/char/serial.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) -- 2.1.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 1/2] serial: reset state at startup 2014-09-19 8:54 [Qemu-devel] [PATCH 0/2] serial: cleanups for physical serial port passthrough Paolo Bonzini @ 2014-09-19 8:54 ` Paolo Bonzini 2014-09-19 9:17 ` Chen, Tiejun 2014-09-19 8:54 ` [Qemu-devel] [PATCH 2/2] serial: check if backed by a physical serial port at realize time Paolo Bonzini 1 sibling, 1 reply; 6+ messages in thread From: Paolo Bonzini @ 2014-09-19 8:54 UTC (permalink / raw) To: qemu-devel; +Cc: armbru, pavel.dovgaluk, batuzovk When a serial port is started, its initial state is all zero. Make it consistent with reset state instead. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- hw/char/serial.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/char/serial.c b/hw/char/serial.c index 764e184..4523ccb 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -668,6 +668,7 @@ void serial_realize_core(SerialState *s, Error **errp) serial_event, s); fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH); fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH); + serial_reset(s); } void serial_exit_core(SerialState *s) -- 2.1.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] serial: reset state at startup 2014-09-19 8:54 ` [Qemu-devel] [PATCH 1/2] serial: reset state at startup Paolo Bonzini @ 2014-09-19 9:17 ` Chen, Tiejun 2014-09-19 12:57 ` Paolo Bonzini 0 siblings, 1 reply; 6+ messages in thread From: Chen, Tiejun @ 2014-09-19 9:17 UTC (permalink / raw) To: Paolo Bonzini, qemu-devel; +Cc: armbru, pavel.dovgaluk, batuzovk On 2014/9/19 16:54, Paolo Bonzini wrote: > When a serial port is started, its initial state is all zero. Make > it consistent with reset state instead. > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > hw/char/serial.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/hw/char/serial.c b/hw/char/serial.c > index 764e184..4523ccb 100644 > --- a/hw/char/serial.c > +++ b/hw/char/serial.c > @@ -668,6 +668,7 @@ void serial_realize_core(SerialState *s, Error **errp) > serial_event, s); It should just follow qemu_register_reset(serial_reset, s). > fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH); > fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH); > + serial_reset(s); Or at least we should push this before this pair of fifo8_create() since static void serial_reset(void *opaque) { ... fifo8_reset(&s->recv_fifo); fifo8_reset(&s->xmit_fifo); Thanks Tiejun > } > > void serial_exit_core(SerialState *s) > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] serial: reset state at startup 2014-09-19 9:17 ` Chen, Tiejun @ 2014-09-19 12:57 ` Paolo Bonzini 2014-09-22 1:19 ` Chen, Tiejun 0 siblings, 1 reply; 6+ messages in thread From: Paolo Bonzini @ 2014-09-19 12:57 UTC (permalink / raw) To: Chen, Tiejun, qemu-devel; +Cc: armbru, pavel.dovgaluk, batuzovk Il 19/09/2014 11:17, Chen, Tiejun ha scritto: > On 2014/9/19 16:54, Paolo Bonzini wrote: >> When a serial port is started, its initial state is all zero. Make >> it consistent with reset state instead. >> >> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> >> --- >> hw/char/serial.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/hw/char/serial.c b/hw/char/serial.c >> index 764e184..4523ccb 100644 >> --- a/hw/char/serial.c >> +++ b/hw/char/serial.c >> @@ -668,6 +668,7 @@ void serial_realize_core(SerialState *s, Error >> **errp) >> serial_event, s); > > It should just follow qemu_register_reset(serial_reset, s). > >> fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH); >> fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH); >> + serial_reset(s); > > Or at least we should push this before this pair of fifo8_create() since No, it should be _after_ the fifo8_create() pair. With the current implementation it doesn't matter, but first you create something and then you initialize it, not the other way round. Paolo > static void serial_reset(void *opaque) > { > ... > fifo8_reset(&s->recv_fifo); > fifo8_reset(&s->xmit_fifo); > > > Thanks > Tiejun > >> } >> >> void serial_exit_core(SerialState *s) >> > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] serial: reset state at startup 2014-09-19 12:57 ` Paolo Bonzini @ 2014-09-22 1:19 ` Chen, Tiejun 0 siblings, 0 replies; 6+ messages in thread From: Chen, Tiejun @ 2014-09-22 1:19 UTC (permalink / raw) To: Paolo Bonzini, qemu-devel; +Cc: armbru, pavel.dovgaluk, batuzovk On 2014/9/19 20:57, Paolo Bonzini wrote: > Il 19/09/2014 11:17, Chen, Tiejun ha scritto: >> On 2014/9/19 16:54, Paolo Bonzini wrote: >>> When a serial port is started, its initial state is all zero. Make >>> it consistent with reset state instead. >>> >>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> >>> --- >>> hw/char/serial.c | 1 + >>> 1 file changed, 1 insertion(+) >>> >>> diff --git a/hw/char/serial.c b/hw/char/serial.c >>> index 764e184..4523ccb 100644 >>> --- a/hw/char/serial.c >>> +++ b/hw/char/serial.c >>> @@ -668,6 +668,7 @@ void serial_realize_core(SerialState *s, Error >>> **errp) >>> serial_event, s); >> >> It should just follow qemu_register_reset(serial_reset, s). >> >>> fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH); >>> fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH); >>> + serial_reset(s); >> >> Or at least we should push this before this pair of fifo8_create() since > > No, it should be _after_ the fifo8_create() pair. With the current > implementation it doesn't matter, but first you create something and Yes, I took a look at this pair, void fifo8_create(Fifo8 *fifo, uint32_t capacity) { fifo->data = g_new(uint8_t, capacity); fifo->capacity = capacity; fifo->head = 0; fifo->num = 0; } and void fifo8_reset(Fifo8 *fifo) { fifo->num = 0; fifo->head = 0; } > then you initialize it, not the other way round. > Thanks for your explanation in this case. Thanks Tiejun > Paolo > >> static void serial_reset(void *opaque) >> { >> ... >> fifo8_reset(&s->recv_fifo); >> fifo8_reset(&s->xmit_fifo); >> >> >> Thanks >> Tiejun >> >>> } >>> >>> void serial_exit_core(SerialState *s) >>> >> >> > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Qemu-devel] [PATCH 2/2] serial: check if backed by a physical serial port at realize time 2014-09-19 8:54 [Qemu-devel] [PATCH 0/2] serial: cleanups for physical serial port passthrough Paolo Bonzini 2014-09-19 8:54 ` [Qemu-devel] [PATCH 1/2] serial: reset state at startup Paolo Bonzini @ 2014-09-19 8:54 ` Paolo Bonzini 1 sibling, 0 replies; 6+ messages in thread From: Paolo Bonzini @ 2014-09-19 8:54 UTC (permalink / raw) To: qemu-devel; +Cc: armbru, pavel.dovgaluk, batuzovk 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> --- hw/char/serial.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hw/char/serial.c b/hw/char/serial.c index 4523ccb..e1dd0c9 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -650,6 +650,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) @@ -780,7 +783,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; } -- 2.1.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-09-22 1:20 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-09-19 8:54 [Qemu-devel] [PATCH 0/2] serial: cleanups for physical serial port passthrough Paolo Bonzini 2014-09-19 8:54 ` [Qemu-devel] [PATCH 1/2] serial: reset state at startup Paolo Bonzini 2014-09-19 9:17 ` Chen, Tiejun 2014-09-19 12:57 ` Paolo Bonzini 2014-09-22 1:19 ` Chen, Tiejun 2014-09-19 8:54 ` [Qemu-devel] [PATCH 2/2] serial: check if backed by a physical serial port at realize time Paolo Bonzini
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.