Re: [PATCH 4/4] tty: serial: uartlite: Use dynamic array for console port

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

 



On Fri, Aug 03, 2018 at 04:34:28PM +0530, shubhrajyoti.datta@xxxxxxxxx wrote:
> From: Shubhrajyoti Datta <shubhrajyoti.datta@xxxxxxxxxx>
> 
> Driver console functions are using pointer to static array with fixed
> size. There can be only one serial console at the time which is found
> by register_console(). register_console() is filling cons->index to
> port->line value.
> 
> Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xxxxxxxxxx>
> ---
>  drivers/tty/serial/uartlite.c | 26 ++++++++++++++++++++++----
>  1 file changed, 22 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c
> index f8538e2..5b5c8c4 100644
> --- a/drivers/tty/serial/uartlite.c
> +++ b/drivers/tty/serial/uartlite.c
> @@ -55,6 +55,9 @@
>  #define ULITE_CONTROL_RST_RX	0x02
>  #define ULITE_CONTROL_IE	0x10
>  
> +/* Static pointer to console port */
> +static struct uart_port *console_port;
> +
>  struct uartlite_data {
>  	const struct uartlite_reg_ops *reg_ops;
>  	struct clk *clk;
> @@ -472,7 +475,7 @@ static void ulite_console_putchar(struct uart_port *port, int ch)
>  static void ulite_console_write(struct console *co, const char *s,
>  				unsigned int count)
>  {
> -	struct uart_port *port = &ulite_ports[co->index];
> +	struct uart_port *port = console_port;
>  	unsigned long flags;
>  	unsigned int ier;
>  	int locked = 1;
> @@ -506,10 +509,8 @@ static int ulite_console_setup(struct console *co, char *options)
>  	int parity = 'n';
>  	int flow = 'n';
>  
> -	if (co->index < 0 || co->index >= ULITE_NR_UARTS)
> -		return -EINVAL;
>  
> -	port = &ulite_ports[co->index];
> +	port = console_port;
>  
>  	/* Has the device been initialized yet? */
>  	if (!port->mapbase) {
> @@ -652,6 +653,17 @@ static int ulite_assign(struct device *dev, int id, u32 base, int irq,
>  
>  	dev_set_drvdata(dev, port);
>  
> +#ifdef CONFIG_SERIAL_UARTLITE_CONSOLE
> +	/*
> +	 * If console hasn't been found yet try to assign this port
> +	 * because it is required to be assigned for console setup function.
> +	 * If register_console() don't assign value, then console_port pointer
> +	 * is cleanup.
> +	 */
> +	if (ulite_uart_driver.cons->index == -1)
> +		console_port = port;
> +#endif
> +
>  	/* Register the port */
>  	rc = uart_add_one_port(&ulite_uart_driver, port);
>  	if (rc) {
> @@ -661,6 +673,12 @@ static int ulite_assign(struct device *dev, int id, u32 base, int irq,
>  		return rc;
>  	}
>  
> +#ifdef CONFIG_SERIAL_UARTLITE_CONSOLE
> +	/* This is not port which is used for console that's why clean it up */
> +	if (ulite_uart_driver.cons->index == -1)
> +		console_port = NULL;
> +#endif
> +
>  	return 0;
>  }
>  
> -- 
> 2.1.1

This patch adds a build warning to my system, which isn't allowed,
sorry.

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



[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