[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |