Hello Viresh,
Test confirmed what I am concerned. Patch 1 is working but patch 2 didn't working in hotplug case. (tested on t4240 platform with 3 cluster and 8 cpus in each cluster, kernel version is 3.12).
Log is as follows: root@t4240rdb:~# cd /sys/devices/system/ root@t4240rdb:/sys/devices/system# ls clockevents clocksource cpu edac root@t4240rdb:/sys/devices/system# cd cpu/ root@t4240rdb:/sys/devices/system/cpu# ls cpu0 cpu1 cpu10 cpu11 cpu12 cpu13 cpu14 cpu15 cpu16 cpu17 cpu18 cpu19 cpu2 cpu20 cpu21 cpu22 cpu23 cpu3 cpu4cpu5 cpu6 cpu7 cpu8 cpu9 kernel_max offline online possible present probe release uevent root@t4240rdb:/sys/devices/system/cpu# cat cpu8/ altivec_idle altivec_idle_wait_time cache/ cpufreq/ online physical_id pir pw20_state pw20_wait_time smt_snooze_delay subsystem/ topology/ uevent root@t4240rdb:/sys/devices/system/cpu# cat cpu8/cpufreq/affected_cpus 8 9 10 11 12 13 14 15 root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu8/online Cannot set affinity for irq 467 root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu9/online root@t4240rdb:/sys/devices/system/cpu# cat cpu10/cpufreq/affected_cpus 10 11 12 13 14 15 root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu10/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu11/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu12/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu13/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu14/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu15/online root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu9/online smp_85xx_kick_cpu: Can not start CPU #9. Start CPU #8 first. smp: failed starting cpu 9 (rc -2) -sh: echo: write error: No such file or directory root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu10/online root@t4240rdb:/sys/devices/system/cpu# cat cpu10/cpufreq/affected_cpus 10 root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu11/online sysfs: cannot create duplicate filename '/devices/system/cpu/cpu10/cpufreq' ------------[ cut here ]------------ WARNING: at fs/sysfs/dir.c:526 Modules linked in: CPU: 18 PID: 2658 Comm: sh Not tainted 3.12.19-rt30-00018-g7eac4c0-dirty #2 task: c00000015fa0b440 ti: c00000007a54c000 task.ti: c00000007a54c000 NIP: c00000000018ea34 LR: c00000000018ea30 CTR: c000000000304330 REGS: c00000007a54f340 TRAP: 0700 Not tainted (3.12.19-rt30-00018-g7eac4c0-dirty) MSR: 0000000080029000 <CE,EE,ME> CR: 44222444 XER: 20000000 SOFTE: 1
GPR00: c00000000018ea30 c00000007a54f5c0 c000000000b4d1a0 000000000000004b GPR04: 0000000044222444 c000000009620e70 0000000000000008 0000000000000008 GPR08: 0000000000000000 0000000000000001 80000800803b8500 0000000000000000 GPR12: 0000000024222442 c00000000fffc700 0000000000000000 00000000100e0000 GPR16: 00000000100daea4 00000000100e0000 c0000000009738b8 c000000179a29e58 GPR20: c000000000a42680 c000000000c0d1a0 c000000000b57c20 c000000000b57600 GPR24: 0000000000000000 c000000000a789e0 0000000000000001 0000000000000000 GPR28: c00000017545c000 c00000007a54f6c0 c000000179962278 ffffffffffffffef NIP [c00000000018ea34] .sysfs_add_one+0xd0/0xec LR [c00000000018ea30] .sysfs_add_one+0xcc/0xec Call Trace: [c00000007a54f5c0] [c00000000018ea30] .sysfs_add_one+0xcc/0xec (unreliable) [c00000007a54f650] [c00000000018faf8] .sysfs_do_create_link_sd+0xfc/0x2bc [c00000007a54f700] [c00000000056468c] .__cpufreq_add_dev.isra.24+0x728/0x768 [c00000007a54f7e0] [c000000000564758] .cpufreq_cpu_callback+0x84/0x108 [c00000007a54f860] [c000000000067218] .notifier_call_chain+0x80/0xe8 [c00000007a54f900] [c00000000003be20] .__cpu_notify+0x34/0x78 [c00000007a54f970] [c00000000003c5cc] .cpu_up+0x194/0x1e4 [c00000007a54fa20] [c0000000005f6318] .cpu_subsys_online+0x24/0x4c [c00000007a54fab0] [c0000000003173dc] .device_online+0xa4/0x104 [c00000007a54fb40] [c0000000003174c4] .online_store+0x88/0x90 [c00000007a54fbd0] [c0000000003143d0] .dev_attr_store+0x30/0x4c [c00000007a54fc40] [c00000000018c98c] .sysfs_write_file+0xe8/0x1ac [c00000007a54fcf0] [c00000000011324c] .vfs_write+0xe8/0x21c [c00000007a54fd90] [c000000000113858] .SyS_write+0x58/0xcc [c00000007a54fe30] [c000000000000598] syscall_exit+0x0/0x8c Instruction dump: 4810e775 60000000 e89e0010 7f83e378 38a01000 4810e761 60000000 7f84e378 3c62ffde 38630e60 485b3755 60000000 <0fe00000> 7f83e378 4bf7d43d 60000000 ---[ end trace 275aa88102f60f48 ]--- root@t4240rdb:/sys/devices/system/cpu#
the original driver is OK, the log is: t4240rdb login: root root@t4240rdb:~# root@t4240rdb:~# root@t4240rdb:~# root@t4240rdb:~# cd /sys/devices/system/cpu/ root@t4240rdb:/sys/devices/system/cpu# cat cpu8/cpufreq/affected_cpus 8 9 10 11 12 13 14 15 root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu8/online Cannot set affinity for irq 467 root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu9/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu10/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu11/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu12/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu13/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu14/online root@t4240rdb:/sys/devices/system/cpu# echo 0 > cpu15/online root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu14/online root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu15/online root@t4240rdb:/sys/devices/system/cpu# cat cpu14/cpufreq/affected_cpus 14 15 root@t4240rdb:/sys/devices/system/cpu# cat cpu15/cpufreq/affected_cpus 14 15 root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu12/online root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu13/online root@t4240rdb:/sys/devices/system/cpu# cat cpu15/cpufreq/affected_cpus 12 13 14 15 root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu10/online root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu11/online root@t4240rdb:/sys/devices/system/cpu# cat cpu15/cpufreq/affected_cpus 10 11 12 13 14 15 root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu8/online root@t4240rdb:/sys/devices/system/cpu# echo 1 > cpu9/online root@t4240rdb:/sys/devices/system/cpu# cat cpu15/cpufreq/affected_cpus 8 9 10 11 12 13 14 15 root@t4240rdb:/sys/devices/system/cpu# cat cpu9/cpufreq/affected_cpus 8 9 10 11 12 13 14 15 root@t4240rdb:/sys/devices/system/cpu# root@t4240rdb:/sys/devices/system/cpu# uname -a Linux t4240rdb 3.12.19-rt30-00018-g7eac4c0-dirty #4 SMP Wed Sep 3 14:56:49 CST 2014 ppc64 GNU/Linux root@t4240rdb:/sys/devices/system/cpu#
Thanks, Yuantian
-----Original Message----- From: Viresh Kumar [mailto:viresh.kumar@linaro.org] Sent: Tuesday, September 02, 2014 3:10 PM To: Tang Yuantian-B29983 Cc: Rafael Wysocki; linaro-kernel@lists.linaro.org; linux-pm@vger.kernel.org; Zhang Hongbo-B45939; Li Yang-Leo-R58472 Subject: Re: [PATCH 2/2] cpufreq: ppc-corenet: remove per-cpu variable 'cpu_mask'
On 2 September 2014 12:32, Yuantian Tang Yuantian.Tang@freescale.com wrote:
I am saying your patch 2 probably is wrong, not patch 1.
Okay, it looked initially that both are screwed up :)
Consider following case: On T4240 platform, we have 3 cluster with 8 cpu in each cluster. We offline 4 5 6 7 cpu and then online them back.
i.e. last four CPUs of first cluster..
Cpu 4's policy->cpus is 0, 1, 2, 3, 4 Cpu 5's policy->cpus is 0, 1, 2, 3, 4, 5.
How? And how is this patch going to touch policy->cpus? CPU 0-7 should be sharing a single 'struct cpufreq_policy' and so policy->cpus should be same for all..