- 论坛徽章:
- 0
|
最近在看一个驱动的源码,里面有一段代码:
if (pci_request_selected_regions(pdev, ioc->bars,
MPT2SAS_DRIVER_NAME)) {
printk(MPT2SAS_WARN_FMT "pci_request_selected_regions: "
"failed\n", ioc->name);
r = -ENODEV;
goto out_fail;
}
比较疑惑的是这个pci_request_selected_regions起什么作用呢?设备用到的资源在硬件初始化已经分配好了,驱动还需要再申请一下么?
我试了一下,把这段代码注释掉,影响的只是/proc/iomem的内容,功能上没有影响。感觉只是驱动对这段资源做了个标记。
从
fdf00000-fdffffff : PCI Bus 0000:0d
fdf00000-fdf7ffff : 0000:0d:00.0
fdf80000-fdfbffff : 0000:0d:00.0
fdf80000-fdfbffff : mpt2sas
fdffc000-fdffffff : 0000:0d:00.0
fdffc000-fdffffff : mpt2sas
变成了
fdf00000-fdffffff : PCI Bus 0000:0d
fdf00000-fdf7ffff : 0000:0d:00.0
fdf80000-fdfbffff : 0000:0d:00.0
fdffc000-fdffffff : 0000:0d:00.0
翻了一下CU的历史帖子,没找到确切的说法,有个帖子提到是为了保护这段资源,不让别的进程访问,感觉不是很充分。
另外还有request_region这个函数,申请io端口用于驱动和硬件间通信。这个也应该是硬件初始化就确认的一段地址。
我觉得,这种io端口,如果没有和硬件联系起来,驱动申请了有什么用啊?如果硬件已经分配好了,驱动还用去request一下,做个标记么?
对这块不是很了解,希望有人指点一下。先谢过了。 |
|