/*
* sugov governor 的初始化.
* sg_policy在init()中被赋值, 在start()中取出被使用. kernel中的小聪明 !
* 尤其是驱动中最常用.
* 啥都先铺垫好, 有备无患,临危不乱, 那么一切准备都是有意义的吗 ?
*/
static int sugov_init(struct cpufreq_policy *policy)
{
/*
* 下面会使用 sugov_policy_alloc()来分配.
* sugov_policy 封装了cpufreq_policy 建立起来了sugov_governor与cpufreq core的关联.
* 又是一个伎俩. 大家心里都有杆秤, 别这样搞了好不好 ?
*/
struct sugov_policy *sg_policy;
struct sugov_tunables *tunables;
int ret = 0;
if (policy->governor_data)
return -EBUSY;
policy->governor_data = sg_policy;
}
static int sugov_start(struct cpufreq_policy *policy)
{
/*
* sugov_init()中做的铺垫, 到这里直接拿出来利用.
*/
struct sugov_policy *sg_policy = policy->governor_data;
}