[PATCH] mtd: atmel_nand: fix bug driver will in a dead lock if no nand detected
Brian Norris
computersforpeace at gmail.com
Wed Nov 13 03:44:18 EST 2013
Hi Josh,
On Wed, Nov 13, 2013 at 11:26:28AM +0800, Josh Wu wrote:
> On 11/13/2013 8:10 AM, Brian Norris wrote:
> >On Fri, Nov 08, 2013 at 11:46:30AM +0800, Josh Wu wrote:
> >>On 11/8/2013 2:09 AM, Brian Norris wrote:
> >>> if (nand_nfc.is_initialized) {
> >>> ...
> >>Yes, exactly.
> >>And the NAND probe will also load the NFC device before it reach
> >>above check code.
> >No, it loads the *driver*, not the *device*. I'm not familiar with the
> >driver core guarantees, but I don't think you can guarantee that just
> >because a driver was registered before another that the corresponding
> >devices will be probed in that order. Or are you relying on the
> >dependencies captured by device tree? (I don't think even the
> >parent/child dependency between NAND/NFC gives you enough.)
>
> I put more code here to make it clearer:
>
> arch/arm/boot/dts/sama5d3.dtsi:
> nand0: nand at 60000000 {
> compatible = "atmel,at91rm9200-nand";
> ...
> ranges;
> ...
> nfc at 70000000 {
> compatible = "atmel,sama5d3-nfc";
> ...
> };
> };
Ah, so you're focusing purely on the device tree support? It seems this
driver also supports traditional platform devices, but nobody uses NFC
without DT? That explains some things.
> drivers/mtd/nand/atmel_nand.c
> int atmel_of_init_port() {
> ...
> /* load the nfc driver if there is */
> of_platform_populate(np, NULL, NULL, host->dev); # <--- Manually
> populate the sub node (NFC node) to load NFC driver
> ...
> }
Right, that makes sense. So the ordering of the driver registration
stuff is kind of a distraction in this case, then. It's this portion of
the NAND probe that triggers bus_probe_device() to initialize the NFC
device before continuing on.
[snip rest of explanation; thanks!]
So I don't think you have a problem for device tree platforms. But if
someone were to try to instantiate these devices via
platform_device_register(), they will have a problem.
Please, do follow up with the cleanup to the driver registration that
you mentioned.
Brian
More information about the linux-arm-kernel
mailing list