Re: [Letux-kernel] [REGRESSION] opp: Allow dev_pm_opp_get_opp_table() to return -EPROBE_DEFER

From: Viresh Kumar
Date: Fri Nov 06 2020 - 03:58:18 EST


On 06-11-20, 09:44, H. Nikolaus Schaller wrote:
>
> > Am 06.11.2020 um 05:14 schrieb Viresh Kumar <viresh.kumar@xxxxxxxxxx>:
> >
> > On 06-11-20, 00:10, Andreas Kemnade wrote:
> >> Hi,
> >>
> >> On the GTA04 (DM3730, devicetree omap3-gta04*) I get my console flooded
> >> up with the following:
> >> [ 24.517211] cpu cpu0: multiple regulators are not supported
> >> [ 24.523040] cpufreq: __target_index: Failed to change cpu frequency: -22
> >> [ 24.537231] ------------[ cut here ]------------
> >> [ 24.542083] WARNING: CPU: 0 PID: 5 at drivers/opp/core.c:678 dev_pm_opp_set_rate+0x23c/0x494
> >> [ 24.551086] Modules linked in: usb_f_ecm g_ether usb_f_rndis u_ether libcomposite configfs phy_twl4030_usb omap2430 musb_hdrc overlay
> >> [ 24.563842] CPU: 0 PID: 5 Comm: kworker/0:0 Tainted: G W 5.9.0-rc1-00008-g629238068eb9 #14
> >> [ 24.573852] Hardware name: Generic OMAP36xx (Flattened Device Tree)
> >> [ 24.580413] Workqueue: events dbs_work_handler
> >> [ 24.585083] [<c010e6b4>] (unwind_backtrace) from [<c010a194>] (show_stack+0x10/0x14)
> >> [ 24.593200] [<c010a194>] (show_stack) from [<c0464ad0>] (dump_stack+0x8c/0xac)
> >> [ 24.600769] [<c0464ad0>] (dump_stack) from [<c01276a8>] (__warn+0xcc/0xe4)
> >> [ 24.608001] [<c01276a8>] (__warn) from [<c0127a3c>] (warn_slowpath_fmt+0x74/0xa0)
> >> [ 24.615844] [<c0127a3c>] (warn_slowpath_fmt) from [<c06364ac>] (dev_pm_opp_set_rate+0x23c/0x494)
> >> [ 24.625061] [<c06364ac>] (dev_pm_opp_set_rate) from [<c063ec08>] (set_target+0x2c/0x4c)
> >> [ 24.633453] [<c063ec08>] (set_target) from [<c063a950>] (__cpufreq_driver_target+0x190/0x22c)
> >> [ 24.642395] [<c063a950>] (__cpufreq_driver_target) from [<c063d4e0>] (od_dbs_update+0xcc/0x158)
> >> [ 24.651489] [<c063d4e0>] (od_dbs_update) from [<c063e090>] (dbs_work_handler+0x2c/0x54)
> >> [ 24.659881] [<c063e090>] (dbs_work_handler) from [<c013f71c>] (process_one_work+0x210/0x358)
> >> [ 24.668731] [<c013f71c>] (process_one_work) from [<c0140014>] (worker_thread+0x22c/0x2d0)
> >> [ 24.677307] [<c0140014>] (worker_thread) from [<c0144eac>] (kthread+0x140/0x14c)
> >> [ 24.685058] [<c0144eac>] (kthread) from [<c0100148>] (ret_from_fork+0x14/0x2c)
> >> [ 24.692626] Exception stack(0xde4b7fb0 to 0xde4b7ff8)
> >> [ 24.697906] 7fa0: 00000000 00000000 00000000 00000000
> >> [ 24.706481] 7fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> >> [ 24.715057] 7fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> >> [ 24.722198] ---[ end trace 038b3f231fae6f81 ]---
> >>
> >> endlessly after the $subject commit. Any hints?
> >
> > The fix for this has been in linux-next for a couple of days and it
> > made it to linus/master yesterday.
> >
> > 47efcbcb340ic opp: Fix early exit from dev_pm_opp_register_set_opp_helper()

I think I may have accidentally pasted the wrong commit here. This is
the one which must have fixed it for you.

commit 1f6620f87006 ("opp: Don't always remove static OPPs in _of_add_opp_table_v1()")


> Seems to fix our problems on gta04 (OMAP3).
> Otherwise we would have found that v5.10-rc3 magically solves it :)

I assume you just ran linus's/master, otherwise the patch I shared
earlier won't have fixed the issue :)

> Interestingly it did not affect OMAP5.

Based on the DT I saw for omap5, it does use OPPv1 and so it shouldn't
have worked as well. It may be worth checking why it didn't get
affected earlier.

You can see the populated OPPs for a platform with this:

ls /sys/kernel/debug/opp/cpu*/*

You shall see some difference with and without this patch. Or it may
be the case that you are adding dynamic OPPs with dev_pm_opp_add() and
so even after removing the static ones, it worked (though I wasn't
able to find that in the code).

--
viresh