您的位置:首页 > 其它

subsys_interface_register

2016-08-16 16:31 169 查看
这行code是啥意思呢? 

subsys_interface_register(&cpufreq_interface);

1576 static struct subsys_interface cpufreq_interface = {

1577         .name           = "cpufreq",

1578         .subsys         = &cpu_subsys,

1579         .add_dev        = cpufreq_add_dev,

1580         .remove_dev     = cpufreq_remove_dev,

1581 };

我们看看subsys_interface_register的实现。

1125 int subsys_interface_register(struct subsys_interface *sif)

1126 {

1127         struct bus_type *subsys;

1128         struct subsys_dev_iter iter;

1129         struct device *dev;

1130 

1131         if (!sif || !sif->subsys)

1132                 return -ENODEV;

1133 

1134         subsys = bus_get(sif->subsys);

1135         if (!subsys)

1136                 return -EINVAL;

1137 

1138         mutex_lock(&subsys->p->mutex);

1139         list_add_tail(&sif->node, &subsys->p->interfaces);

1140         if (sif->add_dev) {

1141                 subsys_dev_iter_init(&iter, subsys, NULL, NULL);

1142                 while ((dev = subsys_dev_iter_next(&iter)))

1143                         sif->add_dev(dev, sif);

1144                 subsys_dev_iter_exit(&iter);

1145         }

1146         mutex_unlock(&subsys->p->mutex);

1147 

1148         return 0;

1149 }

1134行subsys就等于1578行的cpu_sybsys.

1140行的sif->add_dev 就等1579行的cpufreq_add_dev,所以肯定不为NULL。

1142行会遍历cpu_sybsys,为每一个cpu调用cpufreq_add_dev 方法。也就是有几个cpu,cpufreq_add_dev 方法就没调用几次。

从这里可以看到每个cpu可以有不同的governer.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: