一点点读懂cpufreq(二)

本文详述了Linux内核中的cpufreq通知机制,包括CPUFREQ_TRANSITION_NOTIFIER和CPUFREQ_POLICY_NOTIFIER接口的注册与去注册,以及在频率和策略变化时如何回调模块进行处理。通过分析loongson1-cpufreq.c模块的实例,阐述了在频率变化后执行特定操作的逻辑。此外,详细探讨了cpufreq_notify_transition函数在频率转换过程中的作用,以及在策略变更时如何触发回调。

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

目录

1、注册接口:

2、去注册接口:

3、使用样例

4、软件处理

4.1 对cpufreq_transition_notifier_list的处理

4.2 对cpufreq_policy_notifier_list的处理


本章节主要介绍cpufreq中的通知链实现,在调频策略以及频率变化时来通知对该事件敏感的模块,各个模块可以通过注册和去注册接口来加入到通知链中。

1、注册接口:

/**

 * cpufreq_register_notifier - Register a notifier with cpufreq.

 * @nb: notifier function to register.

 * @list: CPUFREQ_TRANSITION_NOTIFIER or CPUFREQ_POLICY_NOTIFIER.

 * Add a notifier to one of two lists: either a list of notifiers that run on

 * clock rate changes (once before and once after every transition), or a list

 * of notifiers that ron on cpufreq policy changes.

 * This function may sleep and it has the same return values as

 * blocking_notifier_chain_register().

 */

int cpufreq_register_notifier(struct notifier_block *nb, unsigned int list)

{

              int ret;

              if (cpufreq_disabled())

                            return -EINVAL;

              switch (list) {

              case CPUFREQ_TRANSITION_NOTIFIER:

                            mutex_lock(&cpufreq_fast_switch_lock);

                            if (cpufreq_fast_switch_count > 0) {

                                          mutex_unlock(&cpufreq_fast_switch_lock);

                                          return -EBUSY;

                            }

                            ret = srcu_notifier_chain_register(

                                                        &cpufreq_transition_notifier_list, nb);

                            if (!ret)

                         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值