All of lore.kernel.org
 help / color / mirror / Atom feed
* [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

* [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

* 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

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.