Thread (15 messages) flat view 15 messages, 5 authors, 2014-02-21

Re: [PATCH v4 0/4] Bugfix for of_match_node ordering

From: Grant Likely <hidden>
Date: 2014-02-20 11:30:21
Also in: linux-samsung-soc, lkml

On Thu, Feb 20, 2014 at 8:39 AM, Sachin Kamat [off-list ref] wrote:
Hi Grant,

I observe the following boot failure with today's (next-20140220) linux-next
tree on Exynos based boards with the default exynos_defconfig.
Ugh, nested locking. that is not good. Kevin's patch looks correct and
I'll merge it in. I'm a little disturbed though that you're the only
one who has reported problems. Looking at what it does I would expect
pretty much every SMP platform for freak out about this, but I've
heard nothing from the powerpc guys.

I'll merge in the fix of course, but I'd like to know what I'm missing.

g.
Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x900
[    0.000000] Linux version 3.14.0-rc3-next-20140220 (sachin@linaro)
(gcc version 4.8.2 20130805 (prerelease) (crosstool-NG linaro-1.
13.1-4.8-2013.08 - Linaro GCC 2013.08) ) #1132 SMP PREEMPT Thu Feb 20
13:49:27 IST 2014
[    0.000000] CPU: ARMv7 Processor [412fc091] revision 1 (ARMv7), cr=10c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing
instruction cache
[    0.000000] Machine model: Insignal Origen evaluation board based
on Exynos4210
[    0.000000] bootconsole [earlycon0] enabled
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] CPU EXYNOS4210 (id 0x43210011)
[    0.000000] On node 0 totalpages: 258048
[    0.000000]   Normal zone: 1520 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 190464 pages, LIFO batch:31
[    0.000000]   HighMem zone: 528 pages used for memmap
[    0.000000]   HighMem zone: 67584 pages, LIFO batch:15
[    0.000000] BUG: spinlock recursion on CPU#0, swapper/0
[    0.000000]  lock: devtree_lock+0x0/0x10, .magic: dead4ead, .owner:
swapper/0, .owner_cpu: 0
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted
3.14.0-rc3-next-20140220 #1132
[    0.000000] [<c0013e9c>] (unwind_backtrace) from [<c0011250>]
(show_stack+0x10/0x14)
[    0.000000] [<c0011250>] (show_stack) from [<c0386740>]
(dump_stack+0x7c/0xbc)
[    0.000000] [<c0386740>] (dump_stack) from [<c005501c>]
(do_raw_spin_lock+0x188/0x18c)
[    0.000000] [<c005501c>] (do_raw_spin_lock) from [<c038b614>]
(_raw_spin_lock_irqsave+0x20/0x28)
[    0.000000] [<c038b614>] (_raw_spin_lock_irqsave) from [<c02de37c>]
(of_find_property+0x20/0x4c)
[    0.000000] [<c02de37c>] (of_find_property) from [<c02df110>]
(__of_device_is_compatible+0xb4/0x110)
[    0.000000] [<c02df110>] (__of_device_is_compatible) from
[<c02df22c>] (of_find_compatible_node+0x4c/0x7c)
[    0.000000] [<c02df22c>] (of_find_compatible_node) from
[<c04cedf4>] (exynos_firmware_init+0x18/0x7c)
[    0.000000] [<c04cedf4>] (exynos_firmware_init) from [<c04caef0>]
(setup_arch+0x860/0x898)
[    0.000000] [<c04caef0>] (setup_arch) from [<c04c7820>]
(start_kernel+0x80/0x3dc)
[    0.000000] [<c04c7820>] (start_kernel) from [<40008074>] (0x40008074)
[    0.000000] BUG: spinlock lockup suspected on CPU#0, swapper/0
[    0.000000]  lock: devtree_lock+0x0/0x10, .magic: dead4ead, .owner:
swapper/0, .owner_cpu: 0
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted
3.14.0-rc3-next-20140220 #1132
[    0.000000] [<c0013e9c>] (unwind_backtrace) from [<c0011250>]
(show_stack+0x10/0x14)
[    0.000000] [<c0011250>] (show_stack) from [<c0386740>]
(dump_stack+0x7c/0xbc)
[    0.000000] [<c0386740>] (dump_stack) from [<c0054fac>]
(do_raw_spin_lock+0x118/0x18c)
[    0.000000] [<c0054fac>] (do_raw_spin_lock) from [<c038b614>]
(_raw_spin_lock_irqsave+0x20/0x28)
[    0.000000] [<c038b614>] (_raw_spin_lock_irqsave) from [<c02de37c>]
(of_find_property+0x20/0x4c)
[    0.000000] [<c02de37c>] (of_find_property) from [<c02df110>]
(__of_device_is_compatible+0xb4/0x110)
[    0.000000] [<c02df110>] (__of_device_is_compatible) from
[<c02df22c>] (of_find_compatible_node+0x4c/0x7c)
[    0.000000] [<c02df22c>] (of_find_compatible_node) from
[<c04cedf4>] (exynos_firmware_init+0x18/0x7c)
[    0.000000] [<c04cedf4>] (exynos_firmware_init) from [<c04caef0>]
(setup_arch+0x860/0x898)
[    0.000000] [<c04caef0>] (setup_arch) from [<c04c7820>]
(start_kernel+0x80/0x3dc)
[    0.000000] [<c04c7820>] (start_kernel) from [<40008074>] (0x40008074)

Regards,
Sachin



On 19 February 2014 19:44, Grant Likely [off-list ref] wrote:
quoted
Hi all,

I've taken Kevin's latest rework and done even more rework on it. :-) I
didn't quite like how it was looking so I rolled his scoring code
directly into __of_device_is_compatible() so that the function always
returns a score in a way that is still compatible with the existing
users (ie. non-zero == successful match). This eliminates the need for a
separate pscore argument and it also let me roll the type and name
checks into the same function. I'm a lot happier with it overall and it
makes for a slightly smaller number of lines of code changed. Please
take a look and give it a spin. This is basically a bug fix so I'll need
to push it out to Linus in the near future.

Acks and Tested-bys would be particularly appreciated.

Thanks,
g.

Kevin Hao (2):
        Revert "of: search the best compatible match first in __of_match_node()"
        of: reimplement the matching method for __of_match_node()

Grant Likely (2):
        of: Move testcase FDT data into drivers/of
        of: Add self test for of_match_node()


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help