cpufreq 模式切换 --- Linux kernel

文章详细探讨了cpufreq_set_policy函数在CPU频率管理中的作用,包括其在cpufreqframework中的地位,与cpuhotplug和cpuidle的关系,以及在设置和验证策略时的流程。特别提到了该函数在初始化policy时被调用,并通过PMQoS框架获取频率限制。此外,还指出了函数的验证过程,确保CPU速度设置在允许范围内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视 code 如诗词,勿要做无所谓的堆砌 .

在这里插入图片描述

/*
 *    1. 我们先看一下该函数的领导梯队是怎么样的.
 *    2. 该函数在cpufreq framework中起到的作用.
 *    3. 实际的验证过程.
 *    4. 该函数的不足指出.
 *    
 *    ok. 该函数是static的, 它的直接caller就在本文件中且就一个. cpufreq_online.
 *    既然涉及到online、offline 那么就与cpu hotplug扯上关系了.
 *    cpufreq、cpu hotplug、cpu idle 共同组成了低功耗机制.
 *    
 *    1. 注册cpufreq_driver、cpu online时这两个时机会调用该函数.
 *       具体来说就是在初始化policy的时候来执行的.
 *       调用流程很明显, 从cpufreq_list上找到同名的governor, 然后传递给该函数.
 */
static int cpufreq_set_policy(struct cpufreq_policy *policy,
			      struct cpufreq_governor *new_gov,
			      unsigned int new_pol)
{
	struct cpufreq_policy_data new_data;
	struct cpufreq_governor *old_gov;
	int ret;

	memcpy(&new_data.cpuinfo, &policy->cpuinfo, sizeof(policy->cpuinfo));
	new_data.freq_table = policy->freq_table;
	new_data.cpu = policy->cpu;
	/*
	 * PM QoS framework collects all the requests from users and provide us
	 * the final aggregated value here.
	 */
	new_data.min = freq_qos_read_value(&policy->constraints, FREQ_QOS_MIN);
	new_data.max = freq_qos_read_value(&policy->constraints, FREQ_QOS_MAX);

	pr_debug("setting new policy for CPU %u: %u - %u kHz\n",
		 new_data.cpu, new_data.min, new_data.max);

	/*
	 * Verify that the CPU speed can be set within these limits and make sure
	 * that min <= max.
	 */
	ret = cpufreq_driver->verify(&new_data);  
	if (ret)
		return ret;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值