Re: [PATCH v2 6/8] serial: 8250_port: Disable DMA operations for kernel console

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

 



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



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux