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.
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.
相关文章推荐
- DoRegisterDeviceInterfaceToHwnd 1066
- the diff of implement when ram interface is direct address mapping or is access through register
- AXI-Lite:Simper,non-brust control register style interface 添加寄存器类型接口IP核详细使用步骤说明
- register_pernet_subsys相关学习
- subsys_system_register 会在/sys/devices/system下面建立一个目录
- IoRegisterDeviceInterface例程
- IoCreateSymbolicLink与IoRegisterDeviceInterface
- register_pernet_subsys相关学习
- HTTP Status 404 - No result defined for action com.ssk.action.Register and result success
- java:[1,1] 需要class, interface或enum
- iOS: Device token and registerForRemoteNotificationTypes, didReceiveRemoteNotification
- PHP接口类interface的正确使用方法
- 【ObjC】@interface类名(categoryName)
- Maven项目:@Override is not allowed when implement interface method
- UIDiviceOrientation 和 UIInterfaceOrientation
- postcore_initcall(), arch_initcall(), subsys_initcall(), device_initcall() 调用顺序
- The Hardware/Software Interface Programming assignment——二进制炸弹
- PHP接口(interface)的特点
- abstract class和interface
- QTSServerInterface