On Fri, Feb 14, 2020 at 01:43:37PM +0200, Andy Shevchenko wrote: > It would be too tricky and error prone to allow DMA operations on > kernel console. > > One of the concern is when DMA is a separate device, for example on > Intel CherryTrail platforms, and might need special work around to be > functional, see the commit > > eebb3e8d8aaf ("ACPI / LPSS: override power state for LPSS DMA device") > > for more information. > > Another one is that kernel console is used in atomic context, e.g. > when printing crucial information to the user (Oops or crash), > and DMA may not serve due to power management complications > including non-atomic ACPI calls but not limited to it (see above). > > Besides that, other concerns are described in the commit > > 84b40e3b57ee ("serial: 8250: omap: Disable DMA for console UART") > > done for OMAP UART and may be repeated here. > > Disable any kind of DMA operations on kernel console due to above concerns. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > --- > drivers/tty/serial/8250/8250_port.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c > index 6307a04c0cd9..8ed22aa31add 100644 > --- a/drivers/tty/serial/8250/8250_port.c > +++ b/drivers/tty/serial/8250/8250_port.c > @@ -2294,10 +2294,14 @@ int serial8250_do_startup(struct uart_port *port) > * Request DMA channels for both RX and TX. > */ > if (up->dma) { > - retval = serial8250_request_dma(up); > - if (retval) { > - pr_warn_ratelimited("%s - failed to request DMA\n", > - port->name); > + const char *msg = NULL; > + > + if (uart_console(port)) > + msg = "forbid DMA for kernel console"; > + else if (serial8250_request_dma(up)) > + msg = "failed to request DMA"; > + if (msg) { > + pr_warn_ratelimited("%s - %s\n", port->name, msg); dev_warn_ratelimited()? You have a port, you should use it. thanks, greg k-h