Re: [PATCH 17/70] cpufreq: interactive: take idle notifications only when active

From: kbuild test robot
Date: Tue Oct 27 2015 - 16:58:27 EST


Hi Sam,

[auto build test ERROR on pm/linux-next -- if it's inappropriate base, please suggest rules for selecting the more suitable base]

url: https://github.com/0day-ci/linux/commits/B-lint-Czobor/cpufreq-interactive-New-interactive-governor/20151028-020715
config: sparc64-allyesconfig (attached as .config)
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=sparc64

All errors (new ones prefixed by >>):

drivers/cpufreq/cpufreq_interactive.c: In function 'store_hispeed_freq':
drivers/cpufreq/cpufreq_interactive.c:637:2: error: implicit declaration of function 'strict_strtoull' [-Werror=implicit-function-declaration]
ret = strict_strtoull(buf, 0, &val);
^
drivers/cpufreq/cpufreq_interactive.c: In function 'store_go_hispeed_load':
drivers/cpufreq/cpufreq_interactive.c:660:2: error: implicit declaration of function 'strict_strtoul' [-Werror=implicit-function-declaration]
ret = strict_strtoul(buf, 0, &val);
^
drivers/cpufreq/cpufreq_interactive.c: In function 'cpufreq_interactive_idle_notifier':
drivers/cpufreq/cpufreq_interactive.c:827:7: error: 'IDLE_START' undeclared (first use in this function)
case IDLE_START:
^
drivers/cpufreq/cpufreq_interactive.c:827:7: note: each undeclared identifier is reported only once for each function it appears in
drivers/cpufreq/cpufreq_interactive.c:830:7: error: 'IDLE_END' undeclared (first use in this function)
case IDLE_END:
^
drivers/cpufreq/cpufreq_interactive.c: In function 'cpufreq_governor_interactive':
drivers/cpufreq/cpufreq_interactive.c:895:3: error: implicit declaration of function 'idle_notifier_register' [-Werror=implicit-function-declaration]
idle_notifier_register(&cpufreq_interactive_idle_nb);
^
>> drivers/cpufreq/cpufreq_interactive.c:918:3: error: implicit declaration of function 'idle_notifier_unregister' [-Werror=implicit-function-declaration]
idle_notifier_unregister(&cpufreq_interactive_idle_nb);
^
cc1: some warnings being treated as errors

vim +/idle_notifier_unregister +918 drivers/cpufreq/cpufreq_interactive.c

821
822 static int cpufreq_interactive_idle_notifier(struct notifier_block *nb,
823 unsigned long val,
824 void *data)
825 {
826 switch (val) {
> 827 case IDLE_START:
828 cpufreq_interactive_idle_start();
829 break;
830 case IDLE_END:
831 cpufreq_interactive_idle_end();
832 break;
833 }
834
835 return 0;
836 }
837
838 static struct notifier_block cpufreq_interactive_idle_nb = {
839 .notifier_call = cpufreq_interactive_idle_notifier,
840 };
841
842 static int cpufreq_governor_interactive(struct cpufreq_policy *policy,
843 unsigned int event)
844 {
845 int rc;
846 unsigned int j;
847 struct cpufreq_interactive_cpuinfo *pcpu;
848 struct cpufreq_frequency_table *freq_table;
849
850 switch (event) {
851 case CPUFREQ_GOV_START:
852 if (!cpu_online(policy->cpu))
853 return -EINVAL;
854
855 freq_table =
856 cpufreq_frequency_get_table(policy->cpu);
857
858 for_each_cpu(j, policy->cpus) {
859 pcpu = &per_cpu(cpuinfo, j);
860 pcpu->policy = policy;
861 pcpu->target_freq = policy->cur;
862 pcpu->freq_table = freq_table;
863 pcpu->target_set_time_in_idle =
864 get_cpu_idle_time_us(j,
865 &pcpu->target_set_time);
866 pcpu->floor_freq = pcpu->target_freq;
867 pcpu->floor_validate_time =
868 pcpu->target_set_time;
869 pcpu->hispeed_validate_time =
870 pcpu->target_set_time;
871 pcpu->governor_enabled = 1;
872 smp_wmb();
873 }
874
875 if (!hispeed_freq)
876 hispeed_freq = policy->max;
877
878 /*
879 * Do not register the idle hook and create sysfs
880 * entries if we have already done so.
881 */
882 if (atomic_inc_return(&active_count) > 1)
883 return 0;
884
885 rc = sysfs_create_group(cpufreq_global_kobject,
886 &interactive_attr_group);
887 if (rc)
888 return rc;
889
890 rc = input_register_handler(&cpufreq_interactive_input_handler);
891 if (rc)
892 pr_warn("%s: failed to register input handler\n",
893 __func__);
894
895 idle_notifier_register(&cpufreq_interactive_idle_nb);
896 break;
897
898 case CPUFREQ_GOV_STOP:
899 for_each_cpu(j, policy->cpus) {
900 pcpu = &per_cpu(cpuinfo, j);
901 pcpu->governor_enabled = 0;
902 smp_wmb();
903 del_timer_sync(&pcpu->cpu_timer);
904
905 /*
906 * Reset idle exit time since we may cancel the timer
907 * before it can run after the last idle exit time,
908 * to avoid tripping the check in idle exit for a timer
909 * that is trying to run.
910 */
911 pcpu->idle_exit_time = 0;
912 }
913
914 flush_work(&freq_scale_down_work);
915 if (atomic_dec_return(&active_count) > 0)
916 return 0;
917
> 918 idle_notifier_unregister(&cpufreq_interactive_idle_nb);
919 input_unregister_handler(&cpufreq_interactive_input_handler);
920 sysfs_remove_group(cpufreq_global_kobject,
921 &interactive_attr_group);

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: Binary data