Message ID | 1391696188-14540-1-git-send-email-nicolas.pitre@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
An Thu, 6 Feb 2014, Nicolas Pitre wrote: > The core idle loop now takes care of it. > > Signed-off-by: Nicolas Pitre <nico@linaro.org> Acked-by: Thomas Gleixner <tglx@linutronix.de>
On 02/06/2014 07:46 PM, Nicolas Pitre wrote: > The core idle loop now takes care of it. > > Signed-off-by: Nicolas Pitre <nico@linaro.org> > --- > arch/powerpc/platforms/powernv/setup.c | 13 +------------ > 1 file changed, 1 insertion(+), 12 deletions(-) > > diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c > index 21166f65c9..a932feb290 100644 > --- a/arch/powerpc/platforms/powernv/setup.c > +++ b/arch/powerpc/platforms/powernv/setup.c > @@ -26,7 +26,6 @@ > #include <linux/of_fdt.h> > #include <linux/interrupt.h> > #include <linux/bug.h> > -#include <linux/cpuidle.h> > > #include <asm/machdep.h> > #include <asm/firmware.h> > @@ -217,16 +216,6 @@ static int __init pnv_probe(void) > return 1; > } > > -void powernv_idle(void) > -{ > - /* Hook to cpuidle framework if available, else > - * call on default platform idle code > - */ > - if (cpuidle_idle_call()) { > - power7_idle(); > - } > -} > - > define_machine(powernv) { > .name = "PowerNV", > .probe = pnv_probe, > @@ -236,7 +225,7 @@ define_machine(powernv) { > .show_cpuinfo = pnv_show_cpuinfo, > .progress = pnv_progress, > .machine_shutdown = pnv_shutdown, > - .power_save = powernv_idle, > + .power_save = power7_idle, > .calibrate_decr = generic_calibrate_decr, > #ifdef CONFIG_KEXEC > .kexec_cpu_down = pnv_kexec_cpu_down, > Reviewed-by: Preeti U Murthy <preeti@linux.vnet.ibm.com>
Hi Daniel, On 02/06/2014 09:55 PM, Daniel Lezcano wrote: > Hi Nico, > > > On 6 February 2014 14:16, Nicolas Pitre <nicolas.pitre@linaro.org> wrote: > >> The core idle loop now takes care of it. >> >> Signed-off-by: Nicolas Pitre <nico@linaro.org> >> --- >> arch/powerpc/platforms/powernv/setup.c | 13 +------------ >> 1 file changed, 1 insertion(+), 12 deletions(-) >> >> diff --git a/arch/powerpc/platforms/powernv/setup.c >> b/arch/powerpc/platforms/powernv/setup.c >> index 21166f65c9..a932feb290 100644 >> --- a/arch/powerpc/platforms/powernv/setup.c >> +++ b/arch/powerpc/platforms/powernv/setup.c >> @@ -26,7 +26,6 @@ >> #include <linux/of_fdt.h> >> #include <linux/interrupt.h> >> #include <linux/bug.h> >> -#include <linux/cpuidle.h> >> >> #include <asm/machdep.h> >> #include <asm/firmware.h> >> @@ -217,16 +216,6 @@ static int __init pnv_probe(void) >> return 1; >> } >> >> -void powernv_idle(void) >> -{ >> - /* Hook to cpuidle framework if available, else >> - * call on default platform idle code >> - */ >> - if (cpuidle_idle_call()) { >> - power7_idle(); >> - } >> > > The cpuidle_idle_call is called from arch_cpu_idle in > arch/powerpc/kernel/idle.c between a ppc64_runlatch_off|on section. > Shouldn't the cpuidle-powernv driver call these functions when entering > idle ? Yes they should, I will send out a patch that does that ontop of this. There have been cpuidle driver cleanups for powernv and pseries in this merge window. While no change would be required in the pseries cpuidle driver as a result of Nicolas's cleanup, we would need to add the ppc64_runlatch_on and off functions before and after the entry into the powernv idle states. Thanks Regards Preeti U Murthy > > -- Daniel > > >> -} >> - >> define_machine(powernv) { >> .name = "PowerNV", >> .probe = pnv_probe, >> @@ -236,7 +225,7 @@ define_machine(powernv) { >> .show_cpuinfo = pnv_show_cpuinfo, >> .progress = pnv_progress, >> .machine_shutdown = pnv_shutdown, >> - .power_save = powernv_idle, >> + .power_save = power7_idle, >> .calibrate_decr = generic_calibrate_decr, >> #ifdef CONFIG_KEXEC >> .kexec_cpu_down = pnv_kexec_cpu_down, >> -- >> 1.8.4.108.g55ea5f6 >> >> >
On Thu, 6 Feb 2014, Preeti U Murthy wrote: > Hi Daniel, > > On 02/06/2014 09:55 PM, Daniel Lezcano wrote: > > Hi Nico, > > > > > > On 6 February 2014 14:16, Nicolas Pitre <nicolas.pitre@linaro.org> wrote: > > > >> The core idle loop now takes care of it. > >> > >> Signed-off-by: Nicolas Pitre <nico@linaro.org> > >> --- > >> arch/powerpc/platforms/powernv/setup.c | 13 +------------ > >> 1 file changed, 1 insertion(+), 12 deletions(-) > >> > >> diff --git a/arch/powerpc/platforms/powernv/setup.c > >> b/arch/powerpc/platforms/powernv/setup.c > >> index 21166f65c9..a932feb290 100644 > >> --- a/arch/powerpc/platforms/powernv/setup.c > >> +++ b/arch/powerpc/platforms/powernv/setup.c > >> @@ -26,7 +26,6 @@ > >> #include <linux/of_fdt.h> > >> #include <linux/interrupt.h> > >> #include <linux/bug.h> > >> -#include <linux/cpuidle.h> > >> > >> #include <asm/machdep.h> > >> #include <asm/firmware.h> > >> @@ -217,16 +216,6 @@ static int __init pnv_probe(void) > >> return 1; > >> } > >> > >> -void powernv_idle(void) > >> -{ > >> - /* Hook to cpuidle framework if available, else > >> - * call on default platform idle code > >> - */ > >> - if (cpuidle_idle_call()) { > >> - power7_idle(); > >> - } > >> > > > > The cpuidle_idle_call is called from arch_cpu_idle in > > arch/powerpc/kernel/idle.c between a ppc64_runlatch_off|on section. > > Shouldn't the cpuidle-powernv driver call these functions when entering > > idle ? > > Yes they should, I will send out a patch that does that ontop of this. > There have been cpuidle driver cleanups for powernv and pseries in this > merge window. While no change would be required in the pseries cpuidle > driver as a result of Nicolas's cleanup, we would need to add the > ppc64_runlatch_on and off functions before and after the entry into the > powernv idle states. What about creating arch_cpu_idle_enter() and arch_cpu_idle_exit() in arch/powerpc/kernel/idle.c and calling ppc64_runlatch_off() and ppc64_runlatch_on() respectively from there instead? Would that work? That would make the idle consolidation much easier afterwards. Nicolas
Hi Nicolas, On 02/07/2014 06:47 AM, Nicolas Pitre wrote: > On Thu, 6 Feb 2014, Preeti U Murthy wrote: > >> Hi Daniel, >> >> On 02/06/2014 09:55 PM, Daniel Lezcano wrote: >>> Hi Nico, >>> >>> >>> On 6 February 2014 14:16, Nicolas Pitre <nicolas.pitre@linaro.org> wrote: >>> >>>> The core idle loop now takes care of it. >>>> >>>> Signed-off-by: Nicolas Pitre <nico@linaro.org> >>>> --- >>>> arch/powerpc/platforms/powernv/setup.c | 13 +------------ >>>> 1 file changed, 1 insertion(+), 12 deletions(-) >>>> >>>> diff --git a/arch/powerpc/platforms/powernv/setup.c >>>> b/arch/powerpc/platforms/powernv/setup.c >>>> index 21166f65c9..a932feb290 100644 >>>> --- a/arch/powerpc/platforms/powernv/setup.c >>>> +++ b/arch/powerpc/platforms/powernv/setup.c >>>> @@ -26,7 +26,6 @@ >>>> #include <linux/of_fdt.h> >>>> #include <linux/interrupt.h> >>>> #include <linux/bug.h> >>>> -#include <linux/cpuidle.h> >>>> >>>> #include <asm/machdep.h> >>>> #include <asm/firmware.h> >>>> @@ -217,16 +216,6 @@ static int __init pnv_probe(void) >>>> return 1; >>>> } >>>> >>>> -void powernv_idle(void) >>>> -{ >>>> - /* Hook to cpuidle framework if available, else >>>> - * call on default platform idle code >>>> - */ >>>> - if (cpuidle_idle_call()) { >>>> - power7_idle(); >>>> - } >>>> >>> >>> The cpuidle_idle_call is called from arch_cpu_idle in >>> arch/powerpc/kernel/idle.c between a ppc64_runlatch_off|on section. >>> Shouldn't the cpuidle-powernv driver call these functions when entering >>> idle ? >> >> Yes they should, I will send out a patch that does that ontop of this. >> There have been cpuidle driver cleanups for powernv and pseries in this >> merge window. While no change would be required in the pseries cpuidle >> driver as a result of Nicolas's cleanup, we would need to add the >> ppc64_runlatch_on and off functions before and after the entry into the >> powernv idle states. > > What about creating arch_cpu_idle_enter() and arch_cpu_idle_exit() in > arch/powerpc/kernel/idle.c and calling ppc64_runlatch_off() and > ppc64_runlatch_on() respectively from there instead? Would that work? > That would make the idle consolidation much easier afterwards. I would not suggest doing this. The ppc64_runlatch_*() routines need to be called when we are sure that the cpu is about to enter or has exit an idle state. Moving the ppc64_runlatch_on() routine to arch_cpu_idle_enter() for instance is not a good idea because there are places where the cpu can decide not to enter any idle state before the call to cpuidle_idle_call() itself. In that case communicating prematurely that we are in an idle state would not be a good idea. So its best to add the ppc64_runlatch_* calls in the powernv cpuidle driver IMO. We could however create idle_loop_prologue/epilogue() variants inside it so that in addition to the runlatch routines we could potentially add more such similar routines that are powernv specific. If there are cases where there is work to be done prior to and post an entry into an idle state common to both pseries and powernv, we will probably put them in arch_cpu_idle_enter/exit(). But the runlatch routines are not suitable to be moved there as far as I can see. Thank you Regards Preeti U Murthy > > > Nicolas > _______________________________________________ > Linuxppc-dev mailing list > Linuxppc-dev@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/linuxppc-dev >
diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c index 21166f65c9..a932feb290 100644 --- a/arch/powerpc/platforms/powernv/setup.c +++ b/arch/powerpc/platforms/powernv/setup.c @@ -26,7 +26,6 @@ #include <linux/of_fdt.h> #include <linux/interrupt.h> #include <linux/bug.h> -#include <linux/cpuidle.h> #include <asm/machdep.h> #include <asm/firmware.h> @@ -217,16 +216,6 @@ static int __init pnv_probe(void) return 1; } -void powernv_idle(void) -{ - /* Hook to cpuidle framework if available, else - * call on default platform idle code - */ - if (cpuidle_idle_call()) { - power7_idle(); - } -} - define_machine(powernv) { .name = "PowerNV", .probe = pnv_probe, @@ -236,7 +225,7 @@ define_machine(powernv) { .show_cpuinfo = pnv_show_cpuinfo, .progress = pnv_progress, .machine_shutdown = pnv_shutdown, - .power_save = powernv_idle, + .power_save = power7_idle, .calibrate_decr = generic_calibrate_decr, #ifdef CONFIG_KEXEC .kexec_cpu_down = pnv_kexec_cpu_down,
The core idle loop now takes care of it. Signed-off-by: Nicolas Pitre <nico@linaro.org> --- arch/powerpc/platforms/powernv/setup.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-)