Re: [PATCH v3] serial: uartlite: Move out-of-range port-numbers into ULITE_NR_UARTS range

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

 





On 11/23/21 00:14, Ruediger Willenberg wrote:
Find free uart_port struct in range 0 <= id < ULITE_NR_UARTS when
the device tree port-number property is outside that range. This
happens when there are other UART types in the system because the
Xilinx device tree generator numbers all UARTs consecutively;
as a result, not as many Uartlites as specified by the
SERIAL_UARTLITE_NR_UARTS parameter could be successfully added.

Signed-off-by: Ruediger Willenberg <r.willenberg@xxxxxxxxxxxxxx>
---
Changes in v3:
  - corrected indentation to strict formatting

Changes in v2:
  - give KERN_NOTICE when changing the id,
    with reference to the requested port-number

  drivers/tty/serial/uartlite.c | 15 +++++++++++----
  1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c
index d3d9566e5dbd..51e3f8086d31 100644
--- a/drivers/tty/serial/uartlite.c
+++ b/drivers/tty/serial/uartlite.c
@@ -631,15 +631,17 @@ static int ulite_assign(struct device *dev, int id, u32 base, int irq,
  {
  	struct uart_port *port;
  	int rc;
+	int oor_id = -1;
- /* if id = -1; then scan for a free id and use that */
-	if (id < 0) {
+	/* if id -1 or out of range; then scan for a free id and use that */
+	if (id < 0 || id >= ULITE_NR_UARTS) {
+		oor_id = id;
  		for (id = 0; id < ULITE_NR_UARTS; id++)
  			if (ulite_ports[id].mapbase == 0)
  				break;
  	}
-	if (id < 0 || id >= ULITE_NR_UARTS) {
-		dev_err(dev, "%s%i too large\n", ULITE_NAME, id);
+	if (id == ULITE_NR_UARTS) {
+		dev_err(dev, "maximum number of %s assigned\n", ULITE_NAME);
  		return -EINVAL;
  	}
@@ -677,6 +679,11 @@ static int ulite_assign(struct device *dev, int id, u32 base, int irq,
  		return rc;
  	}
+ if (oor_id >= 0)
+		dev_notice(dev,
+			   "assigned uartlite with device tree port-number=<%i> to %s%i\n",
+			   oor_id, ULITE_NAME, id);
+
  	return 0;
  }

I will wait for Greg to comment it first.
https://lore.kernel.org/all/337b2e18-ddc9-5540-1c5b-b47f0517c240@xxxxxxxxxx/

As I said before this patch can cause issues when you will have mix of serial IPs with and without serial alias that IP without serial alias can take ID to IP which has it. (All ports without optional port-number property).

Thanks,
Michal



[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