lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 08 Jun 2022 16:27:35 +0200 From: Peter Zijlstra <peterz@...radead.org> To: peterz@...radead.org Cc: rth@...ddle.net, ink@...assic.park.msu.ru, mattst88@...il.com, vgupta@...nel.org, linux@...linux.org.uk, ulli.kroll@...glemail.com, linus.walleij@...aro.org, shawnguo@...nel.org, Sascha Hauer <s.hauer@...gutronix.de>, kernel@...gutronix.de, festevam@...il.com, linux-imx@....com, tony@...mide.com, khilman@...nel.org, catalin.marinas@....com, will@...nel.org, guoren@...nel.org, bcain@...cinc.com, chenhuacai@...nel.org, kernel@...0n.name, geert@...ux-m68k.org, sammy@...my.net, monstr@...str.eu, tsbogend@...ha.franken.de, dinguyen@...nel.org, jonas@...thpole.se, stefan.kristiansson@...nalahti.fi, shorne@...il.com, James.Bottomley@...senPartnership.com, deller@....de, mpe@...erman.id.au, benh@...nel.crashing.org, paulus@...ba.org, paul.walmsley@...ive.com, palmer@...belt.com, aou@...s.berkeley.edu, hca@...ux.ibm.com, gor@...ux.ibm.com, agordeev@...ux.ibm.com, borntraeger@...ux.ibm.com, svens@...ux.ibm.com, ysato@...rs.sourceforge.jp, dalias@...c.org, davem@...emloft.net, richard@....at, anton.ivanov@...bridgegreys.com, johannes@...solutions.net, tglx@...utronix.de, mingo@...hat.com, bp@...en8.de, dave.hansen@...ux.intel.com, x86@...nel.org, hpa@...or.com, acme@...nel.org, mark.rutland@....com, alexander.shishkin@...ux.intel.com, jolsa@...nel.org, namhyung@...nel.org, jgross@...e.com, srivatsa@...il.mit.edu, amakhalov@...are.com, pv-drivers@...are.com, boris.ostrovsky@...cle.com, chris@...kel.net, jcmvbkbc@...il.com, rafael@...nel.org, lenb@...nel.org, pavel@....cz, gregkh@...uxfoundation.org, mturquette@...libre.com, sboyd@...nel.org, daniel.lezcano@...aro.org, lpieralisi@...nel.org, sudeep.holla@....com, agross@...nel.org, bjorn.andersson@...aro.org, anup@...infault.org, thierry.reding@...il.com, jonathanh@...dia.com, jacob.jun.pan@...ux.intel.com, Arnd Bergmann <arnd@...db.de>, yury.norov@...il.com, andriy.shevchenko@...ux.intel.com, linux@...musvillemoes.dk, rostedt@...dmis.org, pmladek@...e.com, senozhatsky@...omium.org, john.ogness@...utronix.de, paulmck@...nel.org, frederic@...nel.org, quic_neeraju@...cinc.com, josh@...htriplett.org, mathieu.desnoyers@...icios.com, jiangshanlai@...il.com, joel@...lfernandes.org, juri.lelli@...hat.com, vincent.guittot@...aro.org, dietmar.eggemann@....com, bsegall@...gle.com, mgorman@...e.de, bristot@...hat.com, vschneid@...hat.com, jpoimboe@...nel.org, linux-alpha@...r.kernel.org, linux-kernel@...r.kernel.org, linux-snps-arc@...ts.infradead.org, linux-arm-kernel@...ts.infradead.org, linux-omap@...r.kernel.org, linux-csky@...r.kernel.org, linux-hexagon@...r.kernel.org, linux-ia64@...r.kernel.org, linux-m68k@...ts.linux-m68k.org, linux-mips@...r.kernel.org, openrisc@...ts.librecores.org, linux-parisc@...r.kernel.org, linuxppc-dev@...ts.ozlabs.org, linux-riscv@...ts.infradead.org, linux-s390@...r.kernel.org, linux-sh@...r.kernel.org, sparclinux@...r.kernel.org, linux-um@...ts.infradead.org, linux-perf-users@...r.kernel.org, virtualization@...ts.linux-foundation.org, xen-devel@...ts.xenproject.org, linux-xtensa@...ux-xtensa.org, linux-acpi@...r.kernel.org, linux-pm@...r.kernel.org, linux-clk@...r.kernel.org, linux-arm-msm@...r.kernel.org, linux-tegra@...r.kernel.org, linux-arch@...r.kernel.org, rcu@...r.kernel.org Subject: [PATCH 12/36] cpuidle,omap2: Push RCU-idle into driver Doing RCU-idle outside the driver, only to then temporarily enable it again, some *four* times, before going idle is daft. Signed-off-by: Peter Zijlstra (Intel) <peterz@...radead.org> --- arch/arm/mach-omap2/cpuidle44xx.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) --- a/arch/arm/mach-omap2/cpuidle44xx.c +++ b/arch/arm/mach-omap2/cpuidle44xx.c @@ -105,7 +105,9 @@ static int omap_enter_idle_smp(struct cp } raw_spin_unlock_irqrestore(&mpu_lock, flag); + rcu_idle_enter(); omap4_enter_lowpower(dev->cpu, cx->cpu_state); + rcu_idle_exit(); raw_spin_lock_irqsave(&mpu_lock, flag); if (cx->mpu_state_vote == num_online_cpus()) @@ -151,10 +153,10 @@ static int omap_enter_idle_coupled(struc (cx->mpu_logic_state == PWRDM_POWER_OFF); /* Enter broadcast mode for periodic timers */ - RCU_NONIDLE(tick_broadcast_enable()); + tick_broadcast_enable(); /* Enter broadcast mode for one-shot timers */ - RCU_NONIDLE(tick_broadcast_enter()); + tick_broadcast_enter(); /* * Call idle CPU PM enter notifier chain so that @@ -166,7 +168,7 @@ static int omap_enter_idle_coupled(struc if (dev->cpu == 0) { pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state); - RCU_NONIDLE(omap_set_pwrdm_state(mpu_pd, cx->mpu_state)); + omap_set_pwrdm_state(mpu_pd, cx->mpu_state); /* * Call idle CPU cluster PM enter notifier chain @@ -178,14 +180,16 @@ static int omap_enter_idle_coupled(struc index = 0; cx = state_ptr + index; pwrdm_set_logic_retst(mpu_pd, cx->mpu_logic_state); - RCU_NONIDLE(omap_set_pwrdm_state(mpu_pd, cx->mpu_state)); + omap_set_pwrdm_state(mpu_pd, cx->mpu_state); mpuss_can_lose_context = 0; } } } + rcu_idle_enter(); omap4_enter_lowpower(dev->cpu, cx->cpu_state); cpu_done[dev->cpu] = true; + rcu_idle_exit(); /* Wakeup CPU1 only if it is not offlined */ if (dev->cpu == 0 && cpumask_test_cpu(1, cpu_online_mask)) { @@ -194,9 +198,9 @@ static int omap_enter_idle_coupled(struc mpuss_can_lose_context) gic_dist_disable(); - RCU_NONIDLE(clkdm_deny_idle(cpu_clkdm[1])); - RCU_NONIDLE(omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON)); - RCU_NONIDLE(clkdm_allow_idle(cpu_clkdm[1])); + clkdm_deny_idle(cpu_clkdm[1]); + omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON); + clkdm_allow_idle(cpu_clkdm[1]); if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD) && mpuss_can_lose_context) { @@ -222,7 +226,7 @@ static int omap_enter_idle_coupled(struc cpu_pm_exit(); cpu_pm_out: - RCU_NONIDLE(tick_broadcast_exit()); + tick_broadcast_exit(); fail: cpuidle_coupled_parallel_barrier(dev, &abort_barrier); @@ -247,7 +251,8 @@ static struct cpuidle_driver omap4_idle_ /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */ .exit_latency = 328 + 440, .target_residency = 960, - .flags = CPUIDLE_FLAG_COUPLED, + .flags = CPUIDLE_FLAG_COUPLED | + CPUIDLE_FLAG_RCU_IDLE, .enter = omap_enter_idle_coupled, .name = "C2", .desc = "CPUx OFF, MPUSS CSWR", @@ -256,7 +261,8 @@ static struct cpuidle_driver omap4_idle_ /* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */ .exit_latency = 460 + 518, .target_residency = 1100, - .flags = CPUIDLE_FLAG_COUPLED, + .flags = CPUIDLE_FLAG_COUPLED | + CPUIDLE_FLAG_RCU_IDLE, .enter = omap_enter_idle_coupled, .name = "C3", .desc = "CPUx OFF, MPUSS OSWR", @@ -282,7 +288,8 @@ static struct cpuidle_driver omap5_idle_ /* C2 - CPU0 RET + CPU1 RET + MPU CSWR */ .exit_latency = 48 + 60, .target_residency = 100, - .flags = CPUIDLE_FLAG_TIMER_STOP, + .flags = CPUIDLE_FLAG_TIMER_STOP | + CPUIDLE_FLAG_RCU_IDLE, .enter = omap_enter_idle_smp, .name = "C2", .desc = "CPUx CSWR, MPUSS CSWR",
Powered by blists - more mailing lists