Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 367dc4aa authored by Dirk Brandewie's avatar Dirk Brandewie Committed by Rafael J. Wysocki
Browse files

cpufreq: Add stop CPU callback to cpufreq_driver interface



This callback allows the driver to do clean up before the CPU is
completely down and its state cannot be modified.  This is used
by the intel_pstate driver to reduce the requested P state prior to
the core going away.  This is required because the requested P state
of the offline core is used to select the package P state. This
effectively sets the floor package P state to the requested P state on
the offline core.

Signed-off-by: default avatarDirk Brandewie <dirk.j.brandewie@intel.com>
[rjw: Minor modifications]
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent bda9f552
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -61,7 +61,13 @@ target_index - See below on the differences.


And optionally
And optionally


cpufreq_driver.exit -		A pointer to a per-CPU cleanup function.
cpufreq_driver.exit -		A pointer to a per-CPU cleanup
				function called during CPU_POST_DEAD
				phase of cpu hotplug process.

cpufreq_driver.stop_cpu -	A pointer to a per-CPU stop function
				called during CPU_DOWN_PREPARE phase of
				cpu hotplug process.


cpufreq_driver.resume -		A pointer to a per-CPU resume function
cpufreq_driver.resume -		A pointer to a per-CPU resume function
				which is called with interrupts disabled
				which is called with interrupts disabled
+2 −0
Original line number Original line Diff line number Diff line
@@ -1337,6 +1337,8 @@ static int __cpufreq_remove_dev_prepare(struct device *dev,
				pr_debug("%s: policy Kobject moved to cpu: %d from: %d\n",
				pr_debug("%s: policy Kobject moved to cpu: %d from: %d\n",
					 __func__, new_cpu, cpu);
					 __func__, new_cpu, cpu);
		}
		}
	} else if (cpufreq_driver->stop_cpu && cpufreq_driver->setpolicy) {
		cpufreq_driver->stop_cpu(policy);
	}
	}


	return 0;
	return 0;
+1 −0
Original line number Original line Diff line number Diff line
@@ -227,6 +227,7 @@ struct cpufreq_driver {
	int	(*bios_limit)	(int cpu, unsigned int *limit);
	int	(*bios_limit)	(int cpu, unsigned int *limit);


	int	(*exit)		(struct cpufreq_policy *policy);
	int	(*exit)		(struct cpufreq_policy *policy);
	void	(*stop_cpu)	(struct cpufreq_policy *policy);
	int	(*suspend)	(struct cpufreq_policy *policy);
	int	(*suspend)	(struct cpufreq_policy *policy);
	int	(*resume)	(struct cpufreq_policy *policy);
	int	(*resume)	(struct cpufreq_policy *policy);
	struct freq_attr	**attr;
	struct freq_attr	**attr;