[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] Fix inactive timer list corruption on second S3 resume



On 27/08/2013 10:03, "Tomasz Wroblewski" <tomasz.wroblewski@xxxxxxxxxx>
wrote:

> init_timer cannot be safely called multiple times on same timer since it does
> memset(0)
> on the structure, erasing the auxiliary member used by linked list code. This
> breaks
> inactive timer list in common/timer.c.
> 
> Moved resume_timer initialisation to ns16550_init_postirq, so it's only done
> once.
> 
> Signed-off-by: Tomasz Wroblewski <tomasz.wroblewski@xxxxxxxxxx>

Acked-by: Keir Fraser <keir@xxxxxxx>

> ---
>  xen/drivers/char/ns16550.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c
> index 6082c85..ce35df0 100644
> --- a/xen/drivers/char/ns16550.c
> +++ b/xen/drivers/char/ns16550.c
> @@ -59,6 +59,8 @@ static struct ns16550 {
>      u8 bar_idx;
>  } ns16550_com[2] = { { 0 } };
>  
> +static void ns16550_delayed_resume(void *data);
> +
>  static char ns_read_reg(struct ns16550 *uart, int reg)
>  {
>      if ( uart->remapped_io_base == NULL )
> @@ -256,6 +258,7 @@ static void __init ns16550_init_postirq(struct serial_port
> *port)
>      serial_async_transmit(port);
>  
>      init_timer(&uart->timer, ns16550_poll, port, 0);
> +    init_timer(&uart->resume_timer, ns16550_delayed_resume, port, 0);
>  
>      /* Calculate time to fill RX FIFO and/or empty TX FIFO for polling. */
>      bits = uart->data_bits + uart->stop_bits + !!uart->parity;
> @@ -346,7 +349,6 @@ static void ns16550_resume(struct serial_port *port)
>      if ( ns16550_ioport_invalid(uart) )
>      {
>          delayed_resume_tries = RESUME_RETRIES;
> -        init_timer(&uart->resume_timer, ns16550_delayed_resume, port, 0);
>          set_timer(&uart->resume_timer, NOW() + RESUME_DELAY);
>      }
>      else



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.