Thread (56 messages) 56 messages, 9 authors, 2014-02-19

Re: [PATCH 2/2] serial: pl011: Move uart_register_driver call to device probe

From: Greg KH <gregkh@linuxfoundation.org>
Date: 2014-02-13 23:24:50
Also in: linux-samsung-soc, lkml

On Thu, Feb 13, 2014 at 06:42:49PM +0000, Russell King - ARM Linux wrote:
On Thu, Feb 13, 2014 at 10:27:01AM -0800, Greg KH wrote:
quoted
On Thu, Feb 13, 2014 at 06:15:59PM +0000, Russell King - ARM Linux wrote:
quoted
On Thu, Feb 13, 2014 at 10:12:16AM -0800, Greg KH wrote:
quoted
On Mon, Jan 20, 2014 at 10:04:15AM +0000, Russell King - ARM Linux wrote:
quoted
On Mon, Jan 20, 2014 at 02:32:35PM +0530, Tushar Behera wrote:
quoted
uart_register_driver call binds the driver to a specific device
node through tty_register_driver call. This should typically happen
during device probe call.

In a multiplatform scenario, it is possible that multiple serial
drivers are part of the kernel. Currently the driver registration fails
if multiple serial drivers with same default major/minor numbers are
included in the kernel.

A typical case is observed with amba-pl011 and samsung-uart drivers.
NAK.  There should not be any other driver using amba-pl011's device numbers.
I agree, but there is.  And because of that, moving the registration to
the probe call fixes the issue with building a kernel with all of the
drivers built into them, so I'm going to take both of these patches, as
it does solve that problem, while still allowing the device number
collision to happen.
So what happens when two _devices_ are probed by this driver at the same
time?
The bus that the driver is on will not allow that to happen, I thought
we went through this before...

And yes, devices on different busses could cause problems, but is that
the case here for these devices?  At first glance, I don't think that
can happen for these drivers.
We went through this before, and I stated the paths, and no one disagreed
with that.

It /is/ racy.
Ok, I just went and looked at the uart driver register path, and I don't
see the race (note, if there is one, it's there today, regardless of
this patch).

uart_register_driver() fils in a bunch of fields, and passes control off
to tty_register_driver().  If the minor/major number allocation here
fails, due to collisions, then an error occurs, and things back out
safely.

If the allocation succeeds, then we lock the list of drivers, add them
to the list, then register the tty device with the subsystem for how
ever many tty devices were asked for.  Yes, the locking might be wrong
here, in the tty layer, but again, that's nothing new created by this
patch.

So I fail to see the problem with applying this patch, as it solves a
problem people are having, and should be fine given that no hardware
with both of these devices will ever be present at the same time.

thanks,

greg k-h
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help