On Tue, Oct 11, 2011 at 05:25:44PM -0700, Doug Anderson wrote: > This crash was showing up 100% of the time on Tegra CPUs when an > agetty was running on the serial port and the console was not running > on the serial port. The reason the Tegra saw it so reliably is that > the Tegra CPU internally ties DTR to DCD/DSR. That means when we > dropped DTR during suspend we would get always get an immediate DCD > drop. > > The specific order of operations that were running: > * uart_suspend_port() would be called to put the uart in suspend mode > * we'd drop DTR (ops->set_mctrl(uport, 0)). > * the DTR drop would be looped back in the CPU to be a DCD drop. > * the DCD drop would look to the serial driver as a hangup > * the hangup would call uart_shutdown() > * ... suspend / resume happens ... > * uart_resume_port() would be called and run the code in the > (port->flags & ASYNC_SUSPENDED) block, which would startup the port > (and enable tx again). > * Since the UART would be available for tx, we'd immediately get > an interrupt, eventually calling transmit_chars() > * The transmit_chars() function would crash. The first crash would > be a dereference of a NULL tty member, but since the port has been > shutdown that was just a symptom. > > I have proposed a patch that would fix the Tegra CPUs here (see > https://lkml.org/lkml/2011/10/11/444 - tty/serial: Prevent drop of DCD > on suspend for Tegra UARTs). However, even with that fix it is still > possible for systems that have an externally visible DCD line to see a > crash if the DCD drops at just the right time during suspend: thus > this patch is still useful. > > Signed-off-by: Doug Anderson <dianders@xxxxxxxxxxxx> > Acked-by: Alan Cox <alan@xxxxxxxxxxxxxxx> > --- > v2: Updated change description and comments based on deeper digging. This patch doesn't apply at all to the linux-next tree, can you redo it so that I know it is correct, and resend it? (remember to keep Alan's Ack on it.) thanks, greg k-h -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html