call to request_mem_region() fails

情到浓时终转凉″ 提交于 2019-11-29 12:30:00

@Dino,

How to disable the memory regions already allocated ?.

Solution: what i think is that you can disable UART driver from kernel (menuconfig), build the kernel image and check /proc/iomem, I guess UART4 related instances will be removed.

Note: If using device tree concept then need to disable UART4 node "@uart4" in device tree.

I would like to use it in my driver code with different name. Is it possible?

Solution: In your LKM request for the memory range using request_mem_region with your driver name.

BTW: Why the call to ioremap is not failing ?

Solution: ioremap api will not fail because api does not have check for ex:"driver name" or any other checks.

I don't believe it's possible to reuse the memory region by other driver. This would make first driver misbehaving. This means that in order to use this memory region by your driver, you should first disable the other driver.

Now it's possible that your ioremap() call won't return an error. It's also possible that it will appear to work perfectly fine. This is because AFAIK, the content of /proc/iomem does not come from ioremap() calls but from request_mem_region() calls. It's important to understand what both of them do:

  • You should first call request_mem_region to claim that your driver is going to use requested memory region (note that this won't do any memory mapping, it will only indicate your will in doing so). In case of your device, some driver already did this so it may use this region when needed. It's possible, however, that it didn't call ioremap() immediately after claiming the region but will do this on demand.

  • If above call succeeded, you may be sure that no other driver is going to use this region. This means you are free to call ioremap() and iounmap() on this region whenever you want.

Technically it's possible to do only 2nd thing and skip using request_mem_region but this way your driver would have to keep memory mapped all times just to indicate that you may use it in future. So you should be nice and always reserve the region first.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!