From: Tony Lindgren <tony@atomide.com>
To: Guenter Roeck <linux@roeck-us.net>
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Jiri Slaby" <jirislaby@kernel.org>,
"Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
"Andy Shevchenko" <andriy.shevchenko@intel.com>,
"Dhruva Gole" <d-gole@ti.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"John Ogness" <john.ogness@linutronix.de>,
"Johan Hovold" <johan@kernel.org>,
"Sebastian Andrzej Siewior" <bigeasy@linutronix.de>,
"Vignesh Raghavendra" <vigneshr@ti.com>,
linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
"Guenter Roeck" <groeck7@gmail.com>
Subject: Re: [PATCH] serial: core: Revert port_id use
Date: Wed, 9 Aug 2023 08:26:50 +0300 [thread overview]
Message-ID: <20230809052650.GT14799@atomide.com> (raw)
In-Reply-To: <b8829d4b-d221-49ce-b0cd-e82dc79be719@roeck-us.net>
Hi,
* Guenter Roeck <linux@roeck-us.net> [230806 13:19]:
> On Sun, Aug 06, 2023 at 09:20:50AM +0300, Tony Lindgren wrote:
> > Guenter reports boot issues with duplicate sysfs entries for multiport
> > drivers. Let's go back to using port->line for now to fix the regression.
> >
> > With this change, the serial core port device names are not correct for the
> > hardware specific 8250 single port drivers, but that's a cosmetic issue for
> > now.
> >
> > Fixes: d962de6ae51f ("serial: core: Fix serial core port id to not use port->line")
> > Reported-by: Guenter Roeck <groeck7@gmail.com>
> > Signed-off-by: Tony Lindgren <tony@atomide.com>
>
> Tested-by: Guenter Roeck <linux@roeck-us.net>
Thanks for testing.
Guenter, care to also test the patch below on top of this fix and
see if things still behave for you?
I'll send a proper patch assuming things test fine.
Regagrds,
Tony
8< --------------------
diff --git a/drivers/tty/serial/serial_base.h b/drivers/tty/serial/serial_base.h
--- a/drivers/tty/serial/serial_base.h
+++ b/drivers/tty/serial/serial_base.h
@@ -16,6 +16,7 @@ struct device;
struct serial_ctrl_device {
struct device dev;
+ struct ida ida;
};
struct serial_port_device {
diff --git a/drivers/tty/serial/serial_base_bus.c b/drivers/tty/serial/serial_base_bus.c
--- a/drivers/tty/serial/serial_base_bus.c
+++ b/drivers/tty/serial/serial_base_bus.c
@@ -10,6 +10,7 @@
#include <linux/container_of.h>
#include <linux/device.h>
+#include <linux/idr.h>
#include <linux/module.h>
#include <linux/serial_core.h>
#include <linux/slab.h>
@@ -112,6 +113,8 @@ struct serial_ctrl_device *serial_base_ctrl_add(struct uart_port *port,
if (!ctrl_dev)
return ERR_PTR(-ENOMEM);
+ ida_init(&ctrl_dev->ida);
+
err = serial_base_device_init(port, &ctrl_dev->dev,
parent, &serial_ctrl_type,
serial_base_ctrl_release,
@@ -142,16 +145,31 @@ struct serial_port_device *serial_base_port_add(struct uart_port *port,
struct serial_ctrl_device *ctrl_dev)
{
struct serial_port_device *port_dev;
+ unsigned int min = 0, max = ~0U;
int err;
port_dev = kzalloc(sizeof(*port_dev), GFP_KERNEL);
if (!port_dev)
return ERR_PTR(-ENOMEM);
+ /* Device driver specified port_id vs automatic assignment? */
+ if (port->port_id) {
+ min = port->port_id;
+ max = port->port_id;
+ }
+
+ err = ida_alloc_range(&ctrl_dev->ida, min, max, GFP_KERNEL);
+ if (err < 0) {
+ kfree(port_dev);
+ return ERR_PTR(err);
+ }
+
+ port->port_id = err;
+
err = serial_base_device_init(port, &port_dev->dev,
&ctrl_dev->dev, &serial_port_type,
serial_base_port_release,
- port->ctrl_id, port->line);
+ port->ctrl_id, port->port_id);
if (err)
goto err_put_device;
@@ -165,16 +183,24 @@ struct serial_port_device *serial_base_port_add(struct uart_port *port,
err_put_device:
put_device(&port_dev->dev);
+ ida_free(&ctrl_dev->ida, port->port_id);
return ERR_PTR(err);
}
void serial_base_port_device_remove(struct serial_port_device *port_dev)
{
+ struct serial_ctrl_device *ctrl_dev;
+ struct device *parent;
+
if (!port_dev)
return;
+ parent = port_dev->dev.parent;
+ ctrl_dev = to_serial_base_ctrl_device(parent);
+
device_del(&port_dev->dev);
+ ida_free(&ctrl_dev->ida, port_dev->port->port_id);
put_device(&port_dev->dev);
}
--
2.41.0
next prev parent reply other threads:[~2023-08-09 5:26 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-06 6:20 [PATCH] serial: core: Revert port_id use Tony Lindgren
2023-08-06 13:19 ` Guenter Roeck
2023-08-09 5:26 ` Tony Lindgren [this message]
2023-08-09 5:33 ` Dhruva Gole
2023-08-09 5:41 ` Tony Lindgren
2023-08-09 5:36 ` Guenter Roeck
2023-08-09 5:37 ` Tony Lindgren
2023-08-09 21:16 ` Guenter Roeck
2023-08-10 7:00 ` Tony Lindgren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230809052650.GT14799@atomide.com \
--to=tony@atomide.com \
--cc=andriy.shevchenko@intel.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=bigeasy@linutronix.de \
--cc=d-gole@ti.com \
--cc=gregkh@linuxfoundation.org \
--cc=groeck7@gmail.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jirislaby@kernel.org \
--cc=johan@kernel.org \
--cc=john.ogness@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=vigneshr@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.