Message ID | 00a269bc15c4f8c0a73c14958c5d7a5d37ff70ce.1568359707.git.michal.simek@xilinx.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 5e9bd2d70ae7c00a95a22994abf1eef728649e64 |
Headers | show |
Series | serial: uartps: Fix uartps_major handling | expand |
On Fri, Sep 13, 2019 at 09:28:29AM +0200, Michal Simek wrote: > There are two parts which should be fixed. The first one is to assigned > uartps_major at the end of probe() to avoid complicated logic when > something fails. > The second part is initialized uartps_major number to 0 when last device is > removed. This will ensure that on next probe driver will ask for new > dynamic major number. > > Fixes: c9712e333809 ("serial: uartps: Use the same dynamic major number for all ports") This is not a valid sha1 in Linus's tree :( Please fix up and resend. thanks, greg k-h
On 04. 10. 19 14:52, Greg Kroah-Hartman wrote: > On Fri, Sep 13, 2019 at 09:28:29AM +0200, Michal Simek wrote: >> There are two parts which should be fixed. The first one is to assigned >> uartps_major at the end of probe() to avoid complicated logic when >> something fails. >> The second part is initialized uartps_major number to 0 when last device is >> removed. This will ensure that on next probe driver will ask for new >> dynamic major number. >> >> Fixes: c9712e333809 ("serial: uartps: Use the same dynamic major number for all ports") > > This is not a valid sha1 in Linus's tree :( > > Please fix up and resend. grr. It is sha1 from stable tree. Will resend. Thanks, Michal
diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c index f145946f659b..92df0c4f1c7a 100644 --- a/drivers/tty/serial/xilinx_uartps.c +++ b/drivers/tty/serial/xilinx_uartps.c @@ -1550,7 +1550,6 @@ static int cdns_uart_probe(struct platform_device *pdev) goto err_out_id; } - uartps_major = cdns_uart_uart_driver->tty_driver->major; cdns_uart_data->cdns_uart_driver = cdns_uart_uart_driver; /* @@ -1680,6 +1679,7 @@ static int cdns_uart_probe(struct platform_device *pdev) console_port = NULL; #endif + uartps_major = cdns_uart_uart_driver->tty_driver->major; cdns_uart_data->cts_override = of_property_read_bool(pdev->dev.of_node, "cts-override"); return 0; @@ -1741,6 +1741,12 @@ static int cdns_uart_remove(struct platform_device *pdev) console_port = NULL; #endif + /* If this is last instance major number should be initialized */ + mutex_lock(&bitmap_lock); + if (bitmap_empty(bitmap, MAX_UART_INSTANCES)) + uartps_major = 0; + mutex_unlock(&bitmap_lock); + uart_unregister_driver(cdns_uart_data->cdns_uart_driver); return rc; }
There are two parts which should be fixed. The first one is to assigned uartps_major at the end of probe() to avoid complicated logic when something fails. The second part is initialized uartps_major number to 0 when last device is removed. This will ensure that on next probe driver will ask for new dynamic major number. Fixes: c9712e333809 ("serial: uartps: Use the same dynamic major number for all ports") Reported-by: Paul Thomas <pthomas8589@gmail.com> Signed-off-by: Michal Simek <michal.simek@xilinx.com> --- drivers/tty/serial/xilinx_uartps.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)