]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
cpufreq: Add defensive check during driver registration
authorZihuan Zhang <zhangzihuan@kylinos.cn>
Mon, 8 Sep 2025 08:57:38 +0000 (16:57 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 19 Sep 2025 21:11:44 +0000 (23:11 +0200)
Currently, cpufreq allows drivers to implement both ->target() and
->target_index() callbacks, but that can lead to ambiguous or incorrect
behavior.

For this reason, prevent cpufreq drivers implementing both ->target()
and ->target_index() at the same time from registering.

This check can help to catch driver implementation mistakes early and
improve overall robustness, without affecting existing valid drivers.

Signed-off-by: Zihuan Zhang <zhangzihuan@kylinos.cn>
Link: https://patch.msgid.link/20250908085738.31602-1-zhangzihuan@kylinos.cn
[ rjw: Subject adjustment and changelog rewrite ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/cpufreq.c

index 30e8e9b3c12fc000759e919e866fc8a54dd8b563..599a7af76b3db15fcf09e6b6de02f56994a43fa2 100644 (file)
@@ -2911,6 +2911,7 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
                return -EPROBE_DEFER;
 
        if (!driver_data || !driver_data->verify || !driver_data->init ||
+            (driver_data->target_index && driver_data->target) ||
             (!!driver_data->setpolicy == (driver_data->target_index || driver_data->target)) ||
             (!driver_data->get_intermediate != !driver_data->target_intermediate) ||
             (!driver_data->online != !driver_data->offline) ||