Viresh Kumar
32e1ac30b6
cpufreq: Register drivers only after CPU devices have been registered
...
[ Upstream commit 46770be0cf94149ca48be87719bda1d951066644 ]
The cpufreq core heavily depends on the availability of the struct
device for CPUs and if they aren't available at the time cpufreq driver
is registered, we will never succeed in making cpufreq work.
This happens due to following sequence of events:
- cpufreq_register_driver()
- subsys_interface_register()
- return 0; //successful registration of driver
... at a later point of time
- register_cpu();
- device_register();
- bus_probe_device();
- sif->add_dev();
- cpufreq_add_dev();
- get_cpu_device(); //FAILS
- per_cpu(cpu_sys_devices, num) = &cpu->dev; //used by get_cpu_device()
- return 0; //CPU registered successfully
Because the per-cpu variable cpu_sys_devices is set only after the CPU
device is regsitered, cpufreq will never be able to get it when
cpufreq_add_dev() is called.
This patch avoids this failure by making sure device structure of at
least CPU0 is available when the cpufreq driver is registered, else
return -EPROBE_DEFER.
Reported-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Co-developed-by: Amit Kucheria <amit.kucheria@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Tested-by: Amit Kucheria <amit.kucheria@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-12-31 16:45:26 +01:00
..
acpi-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
2019-05-30 11:26:35 -07:00
amd_freq_sensitivity.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
arm_big_little.c
arm_big_little.h
armada-8k-cpufreq.c
cpufreq: ap806: Add NULL check after kcalloc
2019-07-22 11:12:15 +05:30
armada-37xx-cpufreq.c
cpufreq: armada-37xx: Remove set but not used variable 'freq'
2019-06-03 11:26:38 +05:30
bmips-cpufreq.c
cpufreq: Make cpufreq_generic_init() return void
2019-07-16 10:20:11 +02:00
brcmstb-avs-cpufreq.c
cpufreq: brcmstb-avs-cpufreq: Fix types for voltage/frequency
2019-06-04 09:31:41 +05:30
cppc_cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441
2019-06-05 17:37:17 +02:00
cpufreq-dt-platdev.c
Merge branch 'cpufreq/qcom-updates' into cpufreq/arm/linux-next
2019-09-03 07:55:22 +05:30
cpufreq-dt.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq-dt.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq-nforce2.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
cpufreq.c
cpufreq: Register drivers only after CPU devices have been registered
2019-12-31 16:45:26 +01:00
cpufreq_conservative.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq_governor.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq_governor.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq_governor_attr_set.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq_ondemand.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq_ondemand.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq_performance.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq_powersave.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq_stats.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
cpufreq_userspace.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
davinci-cpufreq.c
Merge branch 'pm-cpufreq'
2019-07-18 09:49:30 +02:00
e_powersaver.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
elanfreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
freq_table.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
gx-suspmod.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
highbank-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
ia64-acpi-cpufreq.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
imx-cpufreq-dt.c
cpufreq: imx-cpufreq-dt: Correct i.MX8MN's default speed grade value
2019-12-13 08:43:28 +01:00
imx6q-cpufreq.c
Merge branch 'pm-cpufreq'
2019-07-18 09:49:30 +02:00
intel_pstate.c
cpufreq: intel_pstate: Fix invalid EPB setting
2019-11-08 11:29:58 +01:00
Kconfig
treewide: Add SPDX license identifier - Makefile/Kconfig
2019-05-21 10:50:46 +02:00
Kconfig.arm
Merge branch 'cpufreq/qcom-updates' into cpufreq/arm/linux-next
2019-09-03 07:55:22 +05:30
Kconfig.powerpc
treewide: Add SPDX license identifier - Makefile/Kconfig
2019-05-21 10:50:46 +02:00
Kconfig.x86
treewide: Add SPDX license identifier - Makefile/Kconfig
2019-05-21 10:50:46 +02:00
kirkwood-cpufreq.c
cpufreq: Make cpufreq_generic_init() return void
2019-07-16 10:20:11 +02:00
longhaul.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
longhaul.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
longrun.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
loongson1-cpufreq.c
cpufreq: Make cpufreq_generic_init() return void
2019-07-16 10:20:11 +02:00
loongson2_cpufreq.c
cpufreq: Make cpufreq_generic_init() return void
2019-07-16 10:20:11 +02:00
Makefile
Merge branch 'cpufreq/qcom-updates' into cpufreq/arm/linux-next
2019-09-03 07:55:22 +05:30
maple-cpufreq.c
Merge branch 'pm-cpufreq'
2019-07-18 09:49:30 +02:00
mediatek-cpufreq.c
cpufreq: mediatek: Add support for mt8183
2019-08-22 11:31:04 +05:30
mvebu-cpufreq.c
omap-cpufreq.c
Merge branch 'pm-cpufreq'
2019-07-18 09:49:30 +02:00
p4-clockmod.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
pasemi-cpufreq.c
cpufreq/pasemi: fix use-after-free in pas_cpufreq_cpu_init()
2019-07-23 09:49:10 +02:00
pcc-cpufreq.c
cpufreq: pcc-cpufreq: Fail initialization if driver cannot be registered
2019-06-17 12:25:30 +02:00
pmac32-cpufreq.c
Merge branch 'pm-cpufreq'
2019-07-18 09:49:30 +02:00
pmac64-cpufreq.c
Merge branch 'pm-cpufreq'
2019-07-18 09:49:30 +02:00
powernow-k6.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
powernow-k7.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
powernow-k7.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
powernow-k8.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
powernow-k8.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 347
2019-06-05 17:37:08 +02:00
powernv-cpufreq.c
cpufreq: powernv: fix stack bloat and hard limit on number of CPUs
2019-12-17 19:56:26 +01:00
ppc_cbe_cpufreq.c
cpufreq: powerpc_cbe: Switch to QoS requests for freq limits
2019-08-26 10:02:01 +02:00
ppc_cbe_cpufreq.h
cpufreq: powerpc_cbe: Switch to QoS requests for freq limits
2019-08-26 10:02:01 +02:00
ppc_cbe_cpufreq_pervasive.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 153
2019-05-30 11:26:32 -07:00
ppc_cbe_cpufreq_pmi.c
cpufreq: Use per-policy frequency QoS
2019-10-21 02:05:21 +02:00
pxa2xx-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
2019-05-30 11:26:35 -07:00
pxa3xx-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
qcom-cpufreq-hw.c
cpufreq: qcom-hw: invoke frequency-invariance setter function
2019-08-22 11:31:04 +05:30
qcom-cpufreq-nvmem.c
cpufreq: qcom: Add support for qcs404 on nvmem driver
2019-09-03 07:55:00 +05:30
qoriq-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
raspberrypi-cpufreq.c
cpufreq: add driver for Raspberry Pi
2019-06-13 08:58:22 +05:30
s3c24xx-cpufreq-debugfs.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
s3c24xx-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
s3c64xx-cpufreq.c
Merge branch 'pm-cpufreq'
2019-07-18 09:49:30 +02:00
s3c2410-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
s3c2412-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
s3c2416-cpufreq.c
Merge branch 'pm-cpufreq'
2019-07-18 09:49:30 +02:00
s3c2440-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
s5pv210-cpufreq.c
Merge branch 'pm-cpufreq'
2019-07-18 09:49:30 +02:00
sa1100-cpufreq.c
cpufreq: Make cpufreq_generic_init() return void
2019-07-16 10:20:11 +02:00
sa1110-cpufreq.c
Merge branch 'pm-cpufreq'
2019-07-18 09:49:30 +02:00
sc520_freq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
2019-05-30 11:26:32 -07:00
scmi-cpufreq.c
scpi-cpufreq.c
sfi-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 235
2019-06-19 17:09:07 +02:00
sh-cpufreq.c
sparc-us2e-cpufreq.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
sparc-us3-cpufreq.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
spear-cpufreq.c
cpufreq: Make cpufreq_generic_init() return void
2019-07-16 10:20:11 +02:00
speedstep-centrino.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
speedstep-ich.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
speedstep-lib.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
speedstep-lib.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
speedstep-smi.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166
2019-05-30 11:26:39 -07:00
sti-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 312
2019-06-05 17:37:04 +02:00
sun50i-cpufreq-nvmem.c
cpufreq: sun50i: Fix CPU speed bin detection
2019-12-31 16:44:38 +01:00
tango-cpufreq.c
tegra20-cpufreq.c
cpufreq: Make cpufreq_generic_init() return void
2019-07-16 10:20:11 +02:00
tegra124-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282
2019-06-05 17:36:37 +02:00
tegra186-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 288
2019-06-05 17:36:37 +02:00
ti-cpufreq.c
cpufreq: ti-cpufreq: Mark expected switch fall-through
2019-07-30 08:10:45 +05:30
unicore2-cpufreq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
vexpress-spc-cpufreq.c