[lkml]   [2015]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
SubjectRe: [PATCH v3 2/3] ARM: rockchip: ensure CPU to enter WFI/WFE state

在 2015年06月06日 04:24, Doug Anderson 写道:
> Russell,
> On Fri, Jun 5, 2015 at 11:29 AM, Russell King - ARM Linux
> <> wrote:
>> 1) v7_coherency_exit() is specific to v7 CPUs and can't be used by
>> generic code.
> Oh, I see. So (I think) you're saying that perhaps the reason that
> Caesar needed his patch was that he needed the dying processor to
> execute v7_exit_coherency_flush(), NOT that he needed the dying
> processor to be in WFI/WFE. That actually makes a lot more sense to
> me! :) Thanks a lot for pointing that out, it's very helpful.
>> So, we're actually in a very sticky position over taking CPUs offline.
>> It seems to be something that the ARM architecture and kernel
>> architecture doesn't actually allow to be done safely. So much so,
>> that in a similar way to the original Keystone 2 physical address
>> switch, I'm tempted to make taking a CPU offline taint the kernel!
> Wow, that's going to suck. So if you want to suspend / resume you
> need to taint your kernel. So much for saving the planet by going
> into suspend... ...or are you thinking that it won't taint the kernel
> when the kernel takes CPUs offline for suspend/resume purposes? ...or
> are you thinking you've some solution that works for suspend/resume
> that doesn't work for the general cpu offlining problem? I'd be very
> interested to hear...
> I know I'm not a maintainer, but if I were and I knew that lots of
> smart people had thought about the problem of CPU offlining and they
> didn't have a solution and I could make my platform 99.99999999%
> reliable by allowing a very safe mdelay(1) where I had a pretty strong
> guarantee that the 1ms was enough time, I would probably accept that
> code...
> So since I'm not a maintainer and I certainly couldn't ack such code,
> I would certainly be happy to add my Reviewed-by to Caesar's patch if
> he changed it mention that he needed to make sure that
> v7_exit_coherency_flush() in rockchip_cpu_die() executed in time.

The dying processor to execute v7_exit_coherency_flush(),not that the
dying processor to be in WFI/WFE.

It's needed to enter WFI/WFE state from the ARM refer document when CPU


Here is my test: (won't to enter the WFI state)
@@ -331,8 +331,8 @@ static int rockchip_cpu_kill(unsigned int cpu)
static void rockchip_cpu_die(unsigned int cpu)
- while (1)
- cpu_do_idle();
+ while (1);
+ //cpu_do_idle();

echo 0 > /sys/module/printk/parameters/console_suspend
echo 1 > /sys/power/pm_print_times
echo mem > sys/power/state

You can play anything
or do some test for CPU up/down:
cd /sys/devices/system/cpu/
for i in $(seq 10000); do
echo "================= $i ============"
for j in $(seq 100); do
while [[ "$(cat cpu1/online)$(cat cpu2/online)$(cat cpu3/online)"
!= "000" ]]; do
echo 0 > cpu1/online
echo 0 > cpu2/online
echo 0 > cpu3/online
while [[ "$(cat cpu1/online)$(cat cpu2/online)$(cat cpu3/online)"
!= "111" ]]; do
echo 1 > cpu1/online
echo 1 > cpu2/online
echo 1 > cpu3/online
Sometimes,the system will be restart when do the about test.
I'm no sure what's happen, That maybe abnormal won't to enter the WFI
> -Doug

- Caesar

 \ /
  Last update: 2015-06-08 07:41    [W:0.068 / U:0.468 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site