On Tue, Sep 01, 2020 at 02:35:52PM +0200, Ulf Hansson wrote: > On Tue, 1 Sep 2020 at 12:42, <peterz@xxxxxxxxxxxxx> wrote: > > That said; I pushed the rcu_idle_enter() about as deep as it goes into > > generic code in commit 1098582a0f6c ("sched,idle,rcu: Push rcu_idle > > deeper into the idle path") > > Aha, that commit should fix this problem, I think. Looks like that > commit was sent as a fix and included in the recent v5.9-rc3. AFAICT psci_enter_domain_idle_state() is still buggered. All that pm_runtime_*() stuff is using locks. Look at this: psci_enter_domain_idle_state() pm_runtime_put_sync_suspend() __pm_runtime_suspend() spin_lock_irqsave(&dev->power.lock, flags); That's a definite fail after we've done rcu_idle_enter(). > > I suppose the next step is pushing it into individual driver when > > needed, something like the below perhaps. I realize the coupled idle > > state stuff is more complicated that most, but it's also not an area > > I've looked at in detail, so perhaps I've just made a bigger mess, but > > it ought to give you enough to get going I think. > > These aren't coupled states. Instead, in cpuidle-psci, we are using PM > domains through genpd and runtime PM to manage "shared idle states" > between CPUs. Similar problem I'm thinking, 'complicated' stuff.