Messages in this thread | | | Subject | Re: [PATCH v5 0/5] Add coupled regulators mechanism | From | Maciej Purski <> | Date | Mon, 05 Mar 2018 15:40:07 +0100 |
| |
Hi Fabio, thank you for your response. Could you tell me on which board precisely (on which DTS) has this issue occurred? Also, I don't understand, did you boot successfully and you got only a lockdep warning or you encountered an actual deadlock?
Best regards, Maciej Purski
On 03/05/2018 01:34 PM, Fabio Estevam wrote: > Hi Maciej, > > On Fri, Mar 2, 2018 at 5:42 AM, Maciej Purski <m.purski@samsung.com> wrote: >> Hi all, >> >> this patchset adds a new mechanism to the framework - regulators' coupling. >> >> On Odroid XU3/4 and other Exynos5422 based boards there is a case, that >> different devices on the board are supplied by different regulators >> with non-fixed voltages. If one of these devices temporarily requires >> higher voltage, there might occur a situation that the spread between >> devices' voltages is so high, that there is a risk of changing >> 'high' and 'low' states on the interconnection between devices powered >> by those regulators. >> >> Algorithmicaly the problem was solved by: >> Inderpal Singh <inderpal.s@samsung.com> >> Doug Anderson <dianders@chromium.org> >> >> The discussion on that subject can be found here: >> https://lkml.org/lkml/2014/4/29/28 >> >> Therefore this patchset is an attempt to apply the idea to regulators core >> as concluded in the discussion by Mark Brown and Doug Anderson. >> >> This feature is required to enable support for generic CPUfreq >> and devfreq drivers for the mentioned boards. >> >> Note on the locking model: >> When balancing voltage of a group of coupled regulators, we lock all >> of them for the whole operation. When voltage of an individual regulator >> is about to change, its suppliers are additionally locked. >> >> The current assumption is that an uncoupled regulator is a special case >> of a coupled one, so they should share a common voltage setting path. > > This series breaks has reached linux-next 20180305 and it breaks > booting on imx6: > > [ 0.269646] imx-pgc-pd imx-pgc-power-domain.0: Linked as a consumer > to 20dc000.gpc > [ 0.270348] > [ 0.270363] ============================================ > [ 0.270373] WARNING: possible recursive locking detected > [ 0.270385] 4.16.0-rc3-next-20180305 #156 Not tainted > [ 0.270397] -------------------------------------------- > [ 0.270408] swapper/0/1 is trying to acquire lock: > [ 0.270419] (&rdev->mutex){+.+.}, at: [<c04d80c4>] > regulator_lock_supply+0x24/0x44 > [ 0.270460] > [ 0.270460] but task is already holding lock: > [ 0.270471] (&rdev->mutex){+.+.}, at: [<c04dc6e4>] > regulator_enable+0x78/0x298 > [ 0.270502] > [ 0.270502] other info that might help us debug this: > [ 0.270513] Possible unsafe locking scenario: > [ 0.270513] > [ 0.270523] CPU0 > [ 0.270532] ---- > [ 0.270540] lock(&rdev->mutex); > [ 0.270555] lock(&rdev->mutex); > [ 0.270572] > [ 0.270572] *** DEADLOCK *** > [ 0.270572] > [ 0.270585] May be due to missing lock nesting notation > [ 0.270585] > [ 0.270598] 3 locks held by swapper/0/1: > [ 0.270606] #0: (&dev->mutex){....}, at: [<c057f368>] > __driver_attach+0x58/0xcc > [ 0.270642] #1: (&dev->mutex){....}, at: [<c057f378>] > __driver_attach+0x68/0xcc > [ 0.270672] #2: (&rdev->mutex){+.+.}, at: [<c04dc6e4>] > regulator_enable+0x78/0x298 > [ 0.270701] > [ 0.270701] stack backtrace: > [ 0.270719] CPU: 0 PID: 1 Comm: swapper/0 Not tainted > 4.16.0-rc3-next-20180305 #156 > [ 0.270731] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree) > [ 0.270741] Backtrace: > [ 0.270767] [<c010d154>] (dump_backtrace) from [<c010d414>] > (show_stack+0x18/0x1c) > [ 0.270783] r7:00000000 r6:60000093 r5:00000000 r4:c1078360 > [ 0.270805] [<c010d3fc>] (show_stack) from [<c0a4724c>] > (dump_stack+0xb4/0xe8) > [ 0.270830] [<c0a47198>] (dump_stack) from [<c0174f4c>] > (__lock_acquire+0x13a4/0x199c) > [ 0.270848] r9:c17d75fc r8:c11ae35c r7:c17c73b0 r6:ec060000 > r5:ec060570 r4:c11ae35c > [ 0.270867] [<c0173ba8>] (__lock_acquire) from [<c0175d68>] > (lock_acquire+0x70/0x90) > [ 0.270883] r10:00000000 r9:ec195800 r8:00000001 r7:00000001 > r6:60000013 r5:00000000 > [ 0.270893] r4:ffffe000 > [ 0.270914] [<c0175cf8>] (lock_acquire) from [<c0a60760>] > (__mutex_lock+0x64/0x978) > [ 0.270929] r8:00000001 r7:00000001 r6:00000000 r5:00000000 r4:ec00b89c > [ 0.270947] [<c0a606fc>] (__mutex_lock) from [<c0a61098>] > (mutex_lock_nested+0x24/0x2c) > [ 0.270963] r10:00000000 r9:ec195800 r8:00000001 r7:00000001 > r6:ec195800 r5:00000000 > [ 0.270975] r4:ec00b800 > [ 0.270992] [<c0a61074>] (mutex_lock_nested) from [<c04d80c4>] > (regulator_lock_supply+0x24/0x44) > [ 0.271013] [<c04d80a0>] (regulator_lock_supply) from [<c04da9b0>] > (regulator_balance_voltage+0x298/0x584) > [ 0.271024] r5:000b1008 r4:ec195800 > [ 0.271042] [<c04da718>] (regulator_balance_voltage) from > [<c04dc748>] (regulator_enable+0xdc/0x298) > [ 0.271059] r10:00000000 r9:00000000 r8:00000001 r7:00000001 > r6:ec195800 r5:ec195824 > [ 0.271069] r4:00000001 > [ 0.271086] [<c04dc66c>] (regulator_enable) from [<c04d6dd8>] > (imx6_pm_domain_power_on+0x30/0x1b4) > [ 0.271102] r9:00000000 r8:c102d114 r7:c1008908 r6:c102d114 > r5:ec3d7a00 r4:ec3d7a00 > [ 0.271119] [<c04d6da8>] (imx6_pm_domain_power_on) from > [<c04d6d18>] (imx_pgc_power_domain_probe+0x64/0xf4) > [ 0.271135] r8:c102d114 r7:ec49c810 r6:c102d114 r5:ec49c800 r4:ec3d7a00 > [ 0.271153] [<c04d6cb4>] (imx_pgc_power_domain_probe) from > [<c0580ef0>] (platform_drv_probe+0x54/0xb8) > [ 0.271168] r7:fffffdfb r6:c102d114 r5:ec49c810 r4:ec49c810 > [ 0.271189] [<c0580e9c>] (platform_drv_probe) from [<c057f288>] > (driver_probe_device+0x2b0/0x338) > [ 0.271204] r7:c17e234c r6:00000000 r5:c17e2348 r4:ec49c810 > [ 0.271222] [<c057efd8>] (driver_probe_device) from [<c057f3d8>] > (__driver_attach+0xc8/0xcc) > [ 0.271237] r10:c0f00630 r9:00000000 r8:c1008908 r7:c1008908 > r6:ec49c844 r5:c102d114 > [ 0.271248] r4:ec49c810 r3:00000000 > [ 0.271267] [<c057f310>] (__driver_attach) from [<c057d348>] > (bus_for_each_dev+0x6c/0xbc) > [ 0.271280] r7:c1008908 r6:c057f310 r5:c102d114 r4:00000000 > [ 0.271298] [<c057d2dc>] (bus_for_each_dev) from [<c057eb64>] > (driver_attach+0x20/0x28) > [ 0.271314] r7:00000000 r6:c103b0a8 r5:ec479b00 r4:c102d114 > [ 0.271332] [<c057eb44>] (driver_attach) from [<c057e588>] > (bus_add_driver+0x18c/0x214) > [ 0.271351] [<c057e3fc>] (bus_add_driver) from [<c057fdbc>] > (driver_register+0x80/0x100) > [ 0.271366] r7:c0e125e4 r6:c0f63850 r5:c0f41c18 r4:c102d114 > [ 0.271383] [<c057fd3c>] (driver_register) from [<c0580e44>] > (__platform_driver_register+0x38/0x4c) > [ 0.271396] r5:c0f41c18 r4:ffffe000 > [ 0.271418] [<c0580e0c>] (__platform_driver_register) from > [<c0f41c30>] (imx_pgc_power_domain_driver_init+0x18/0x20) > [ 0.271438] [<c0f41c18>] (imx_pgc_power_domain_driver_init) from > [<c0102764>] (do_one_initcall+0x50/0x1a0) > [ 0.271464] [<c0102714>] (do_one_initcall) from [<c0f00f04>] > (kernel_init_freeable+0x118/0x1d0) > [ 0.271481] r9:c0f63858 r8:000000f2 r7:c0e125e4 r6:c0f63850 > r5:c1079f80 r4:c0f77ab4 > [ 0.271508] [<c0f00dec>] (kernel_init_freeable) from [<c0a5c6f0>] > (kernel_init+0x10/0x118) > [ 0.271524] r10:00000000 r9:00000000 r8:00000000 r7:00000000 > r6:00000000 r5:c0a5c6e0 > [ 0.271533] r4:00000000 > [ 0.271552] [<c0a5c6e0>] (kernel_init) from [<c01010b4>] > (ret_from_fork+0x14/0x20) > [ 0.271564] Exception stack(0xec069fb0 to 0xec069ff8) > [ 0.271579] 9fa0: 00000000 > 00000000 00000000 00000000 > [ 0.271594] 9fc0: 00000000 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 > [ 0.271609] 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000 > [ 0.271621] r5:c0a5c6e0 r4:00000000 > [ 0.271723] imx-pgc-pd imx-pgc-power-domain.1: Linked as a consumer > to 20dc000.gpc > [ 0.273566] 2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 26, > base_baud = 5000000) is a IMX > [ 1.660948] console [ttymxc0] enabled > [ 1.666242] 21ec000.serial: ttymxc2 at MMIO 0x21ec000 (irq = 65, > base_baud = 5000000) is a IMX > [ 1.683484] etnaviv etnaviv: bound 130000.gpu (ops gpu_ops) > [ 1.689464] etnaviv etnaviv: bound 134000.gpu (ops gpu_ops) > > If I revert this series I am able to boot again. > > >
| |