From: Kevin Cernekee <cernekee@gmail.com>
To: gregkh@linuxfoundation.org, jslaby@suse.cz, robh@kernel.org
Cc: tushar.behera@linaro.org, daniel@zonque.org,
haojian.zhuang@gmail.com, robert.jarzmik@free.fr,
grant.likely@linaro.org, f.fainelli@gmail.com, mbizon@freebox.fr,
jogo@openwrt.org, linux-mips@linux-mips.org,
linux-serial@vger.kernel.org, devicetree@vger.kernel.org
Subject: [PATCH/RFC 1/8] tty: Fallback to use dynamic major number
Date: Wed, 12 Nov 2014 00:46:26 -0800 [thread overview]
Message-ID: <1415781993-7755-2-git-send-email-cernekee@gmail.com> (raw)
In-Reply-To: <1415781993-7755-1-git-send-email-cernekee@gmail.com>
From: Tushar Behera <tushar.behera@linaro.org>
In a multi-platform scenario, the hard-coded major/minor numbers in
serial drivers may conflict with each other. A typical scenario is
observed with amba-pl011 and samsung-uart drivers, both of these
drivers use same set of major/minor numbers. If both of these drivers
are enabled, probe of samsung-uart driver fails because the desired
node is busy.
The issue is fixed by adding a fallback in driver core, so that we can
use dynamic major number in case device node allocation fails for
hard-coded major/minor number.
Signed-off-by: Tushar Behera <tushar.behera@linaro.org>
[cernekee: fix checkpatch warnings]
Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
---
drivers/tty/tty_io.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index 0508a1d..a6d4d9a 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -3365,6 +3365,22 @@ int tty_register_driver(struct tty_driver *driver)
dev_t dev;
struct device *d;
+ if (driver->major) {
+ dev = MKDEV(driver->major, driver->minor_start);
+ error = register_chrdev_region(dev, driver->num, driver->name);
+ /* In case of error, fall back to dynamic allocation */
+ if (error < 0) {
+ pr_warn("Default device node (%d:%d) for %s is busy, using dynamic major number\n",
+ driver->major, driver->minor_start,
+ driver->name);
+ driver->major = 0;
+ }
+ }
+
+ /*
+ * Don't replace the following check with an else to above if statement,
+ * as it may also be called as a fallback.
+ */
if (!driver->major) {
error = alloc_chrdev_region(&dev, driver->minor_start,
driver->num, driver->name);
@@ -3372,9 +3388,6 @@ int tty_register_driver(struct tty_driver *driver)
driver->major = MAJOR(dev);
driver->minor_start = MINOR(dev);
}
- } else {
- dev = MKDEV(driver->major, driver->minor_start);
- error = register_chrdev_region(dev, driver->num, driver->name);
}
if (error < 0)
goto err;
--
2.1.1
next prev parent reply other threads:[~2014-11-12 8:47 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-12 8:46 [PATCH/RFC 0/8] UART driver support for BMIPS multiplatform kernels Kevin Cernekee
2014-11-12 8:46 ` Kevin Cernekee [this message]
2014-11-12 8:46 ` [PATCH/RFC 2/8] serial: core: Add big_endian flag Kevin Cernekee
2014-11-12 8:46 ` [PATCH/RFC 3/8] of: Add helper function to check MMIO register endianness Kevin Cernekee
2014-11-12 8:50 ` Jiri Slaby
2014-11-12 9:04 ` Kevin Cernekee
2014-11-12 9:23 ` Jiri Slaby
2014-11-12 8:46 ` [PATCH/RFC 4/8] serial: pxa: Add fifo-size and {big,native}-endian properties Kevin Cernekee
2014-11-12 9:02 ` Arnd Bergmann
2014-11-12 9:03 ` Jiri Slaby
2014-11-12 9:08 ` Arnd Bergmann
2014-11-12 8:46 ` [PATCH/RFC 5/8] serial: pxa: Make the driver buildable for BCM7xxx set-top platforms Kevin Cernekee
2014-11-12 9:04 ` Arnd Bergmann
2014-11-12 9:19 ` Kevin Cernekee
2014-11-13 9:42 ` Arnd Bergmann
2014-11-13 19:08 ` Kevin Cernekee
2014-11-13 22:34 ` Arnd Bergmann
2014-11-14 21:07 ` Robert Jarzmik
2014-11-12 8:46 ` [PATCH/RFC 6/8] serial: pxa: Update DT binding documentation Kevin Cernekee
2014-11-12 8:46 ` [PATCH/RFC 7/8] serial: earlycon: Set uart_port->big_endian based on DT properties Kevin Cernekee
2014-11-12 8:46 ` [PATCH/RFC 8/8] serial: pxa: Add OF_EARLYCON support Kevin Cernekee
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=1415781993-7755-2-git-send-email-cernekee@gmail.com \
--to=cernekee@gmail.com \
--cc=daniel@zonque.org \
--cc=devicetree@vger.kernel.org \
--cc=f.fainelli@gmail.com \
--cc=grant.likely@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=haojian.zhuang@gmail.com \
--cc=jogo@openwrt.org \
--cc=jslaby@suse.cz \
--cc=linux-mips@linux-mips.org \
--cc=linux-serial@vger.kernel.org \
--cc=mbizon@freebox.fr \
--cc=robert.jarzmik@free.fr \
--cc=robh@kernel.org \
--cc=tushar.behera@linaro.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).