unmap memory mapped with devm_ioremap_resource
Hello, I am extending xilinx-hls driver (https://github.com/Xilinx/linux-xlnx/blob/master/drivers/media/platform/xili...) to support of_overlay. In order to reflect in the driver changes being applied by the overlay to the device tree, I need to unmap first the memory mapped with devm_ioremap_resource. How to do it properly? I think it's uncommon, as normally kernel (devm_* functions) manages those resources itself with devres, so I can't find inspiration in other drivers. Regards, Adrian
Hi, I suppose you are looking for `devm_iounmap`. You can find example of usage in `drivers/fpga/dfl.c`: ... feature->ioaddr = devm_ioremap_resource(binfo->dev, &finfo->mmio_res); ... static void build_info_complete(struct build_feature_devs_info *binfo) { devm_iounmap(binfo->dev, binfo->ioaddr); devm_release_mem_region(binfo->dev, binfo->start, binfo->len); } Regards, Costa On Fri, 2 Dec 2022 at 19:25, Adrian Fiergolski <adrian.fiergolski@fastree3d.com> wrote:
Hello,
I am extending xilinx-hls driver (https://github.com/Xilinx/linux-xlnx/blob/master/drivers/media/platform/xili...) to support of_overlay.
In order to reflect in the driver changes being applied by the overlay to the device tree, I need to unmap first the memory mapped with devm_ioremap_resource. How to do it properly?
I think it's uncommon, as normally kernel (devm_* functions) manages those resources itself with devres, so I can't find inspiration in other drivers.
Regards, Adrian
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- Constantine Shulyupin
Hi Costa, Thank you for your reply. I saw 'devm_iounmap' , but, correct me if I am wrong, I think is not enough. devm_ioremap_resource calls __devm_ioremap_resource (link <https://elixir.bootlin.com/linux/v5.10.157/source/lib/devres.c#L117>) which calls eventually __devm_request_region (link <https://elixir.bootlin.com/linux/v5.10.157/source/kernel/resource.c#L1520>) and __devm_ioremap (link <https://elixir.bootlin.com/linux/v5.10.157/source/lib/devres.c#L25>). Those two will allocate 2 devres: devm_region_release and devm_ioremap_release. The proposed devm_iounmap (link <https://elixir.bootlin.com/linux/v5.10.157/source/lib/devres.c#L108>) seems to destroy only devm_ioremap_release devres. Regards, Adrian On 2.12.2022 19:01, Constantine Shulyupin wrote:
Hi,
I suppose you are looking for `devm_iounmap`. You can find example of usage in `drivers/fpga/dfl.c`:
... feature->ioaddr = devm_ioremap_resource(binfo->dev, &finfo->mmio_res); ...
static void build_info_complete(struct build_feature_devs_info *binfo) { devm_iounmap(binfo->dev, binfo->ioaddr); devm_release_mem_region(binfo->dev, binfo->start, binfo->len); }
Regards, Costa
On Fri, 2 Dec 2022 at 19:25, Adrian Fiergolski <adrian.fiergolski@fastree3d.com> wrote:
Hello,
I am extending xilinx-hls driver (https://github.com/Xilinx/linux-xlnx/blob/master/drivers/media/platform/xili...) to support of_overlay.
In order to reflect in the driver changes being applied by the overlay to the device tree, I need to unmap first the memory mapped with devm_ioremap_resource. How to do it properly?
I think it's uncommon, as normally kernel (devm_* functions) manages those resources itself with devres, so I can't find inspiration in other drivers.
Regards, Adrian
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Hi, Does the community have any other ideas? Or I am wrong, and devm_iounmap is enough? Regards, Adrian On 6.12.2022 22:23, Adrian Fiergolski wrote:
Hi Costa,
Thank you for your reply.
I saw 'devm_iounmap' , but, correct me if I am wrong, I think is not enough.
devm_ioremap_resource calls __devm_ioremap_resource (link <https://elixir.bootlin.com/linux/v5.10.157/source/lib/devres.c#L117>) which calls eventually __devm_request_region (link <https://elixir.bootlin.com/linux/v5.10.157/source/kernel/resource.c#L1520>) and __devm_ioremap (link <https://elixir.bootlin.com/linux/v5.10.157/source/lib/devres.c#L25>). Those two will allocate 2 devres: devm_region_release and devm_ioremap_release.
The proposed devm_iounmap (link <https://elixir.bootlin.com/linux/v5.10.157/source/lib/devres.c#L108>) seems to destroy only devm_ioremap_release devres.
Regards, Adrian
On 2.12.2022 19:01, Constantine Shulyupin wrote:
Hi,
I suppose you are looking for `devm_iounmap`. You can find example of usage in `drivers/fpga/dfl.c`:
... feature->ioaddr = devm_ioremap_resource(binfo->dev, &finfo->mmio_res); ...
static void build_info_complete(struct build_feature_devs_info *binfo) { devm_iounmap(binfo->dev, binfo->ioaddr); devm_release_mem_region(binfo->dev, binfo->start, binfo->len); }
Regards, Costa
On Fri, 2 Dec 2022 at 19:25, Adrian Fiergolski <adrian.fiergolski@fastree3d.com> wrote:
Hello,
I am extending xilinx-hls driver (https://github.com/Xilinx/linux-xlnx/blob/master/drivers/media/platform/xili...) to support of_overlay.
In order to reflect in the driver changes being applied by the overlay to the device tree, I need to unmap first the memory mapped with devm_ioremap_resource. How to do it properly?
I think it's uncommon, as normally kernel (devm_* functions) manages those resources itself with devres, so I can't find inspiration in other drivers.
Regards, Adrian
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
On Fri, Dec 9, 2022 at 9:14 AM Adrian Fiergolski <adrian.fiergolski@fastree3d.com> wrote:
Hi,
Does the community have any other ideas? Or I am wrong, and devm_iounmap is enough?
I dunno, but it says you asked ~4 hrs ago. I bet you could just try it and get an answer faster. Do feel free to report back.
Regards, Adrian
On 6.12.2022 22:23, Adrian Fiergolski wrote:
Hi Costa,
Thank you for your reply.
I saw 'devm_iounmap' , but, correct me if I am wrong, I think is not enough.
devm_ioremap_resource calls __devm_ioremap_resource (link) which calls eventually __devm_request_region (link) and __devm_ioremap (link). Those two will allocate 2 devres: devm_region_release and devm_ioremap_release.
The proposed devm_iounmap (link) seems to destroy only devm_ioremap_release devres.
Regards, Adrian
On 2.12.2022 19:01, Constantine Shulyupin wrote:
Hi,
I suppose you are looking for `devm_iounmap`. You can find example of usage in `drivers/fpga/dfl.c`:
... feature->ioaddr = devm_ioremap_resource(binfo->dev, &finfo->mmio_res); ...
static void build_info_complete(struct build_feature_devs_info *binfo) { devm_iounmap(binfo->dev, binfo->ioaddr); devm_release_mem_region(binfo->dev, binfo->start, binfo->len); }
Regards, Costa
On Fri, 2 Dec 2022 at 19:25, Adrian Fiergolski <adrian.fiergolski@fastree3d.com> wrote:
Hello,
I am extending xilinx-hls driver (https://github.com/Xilinx/linux-xlnx/blob/master/drivers/media/platform/xili...) to support of_overlay.
In order to reflect in the driver changes being applied by the overlay to the device tree, I need to unmap first the memory mapped with devm_ioremap_resource. How to do it properly?
I think it's uncommon, as normally kernel (devm_* functions) manages those resources itself with devres, so I can't find inspiration in other drivers.
Regards, Adrian
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
On Fri, 09 Dec 2022 12:58:20 -0700, jim.cromie@gmail.com said:
On Fri, Dec 9, 2022 at 9:14 AM Adrian Fiergolski <adrian.fiergolski@fastree3d.com> wrote:
Does the community have any other ideas? Or I am wrong, and devm_iounmap is enough?
I dunno, but it says you asked ~4 hrs ago. I bet you could just try it and get an answer faster. Do feel free to report back.
Note that it *is* possible for something to *look* like it works, but it leaves dangling pointers or other hidden corruption that takes a while to surface. I once had to troubleshoot a userspace bug that worked fine on one system but blew up on another with a different malloc() - some 6 million malloc calls after the bug hit. Fortunately, the vast majority of kernel functions will return an error code if anything at all fishy happened, so just checking return codes on *everything* is usually good enough...
Hi, I checked the kernel source code and, as I wrote, in my opinion, the proposed devm_iounmap doesn't seem to release all resources allocated with devm_ioremap_resource. Thus, I don't see a point in testing it, and I am still looking for the proper solution. Jim, the original question is more than a week old. Regards, Adrian On 9.12.2022 at 21:35, Valdis Klētnieks wrote:
On Fri, 09 Dec 2022 12:58:20 -0700, jim.cromie@gmail.com said:
On Fri, Dec 9, 2022 at 9:14 AM Adrian Fiergolski <adrian.fiergolski@fastree3d.com> wrote:
Does the community have any other ideas? Or I am wrong, and devm_iounmap is enough? I dunno, but it says you asked ~4 hrs ago. I bet you could just try it and get an answer faster. Do feel free to report back. Note that it *is* possible for something to *look* like it works, but it leaves dangling pointers or other hidden corruption that takes a while to surface. I once had to troubleshoot a userspace bug that worked fine on one system but blew up on another with a different malloc() - some 6 million malloc calls after the bug hit.
Fortunately, the vast majority of kernel functions will return an error code if anything at all fishy happened, so just checking return codes on *everything* is usually good enough...
It looks like the proper solution is to use two functions: devm_iounmap and devm_release_mem_region. There are a lot of examples in the kernel. Regards, Costa On Sat, 10 Dec 2022 at 00:52, Adrian Fiergolski <adrian.fiergolski@fastree3d.com> wrote:
Hi,
I checked the kernel source code and, as I wrote, in my opinion, the proposed devm_iounmap doesn't seem to release all resources allocated with devm_ioremap_resource. Thus, I don't see a point in testing it, and I am still looking for the proper solution.
Jim, the original question is more than a week old.
Regards, Adrian
On 9.12.2022 at 21:35, Valdis Klētnieks wrote:
On Fri, 09 Dec 2022 12:58:20 -0700, jim.cromie@gmail.com said:
On Fri, Dec 9, 2022 at 9:14 AM Adrian Fiergolski <adrian.fiergolski@fastree3d.com> wrote:
Does the community have any other ideas? Or I am wrong, and devm_iounmap is enough? I dunno, but it says you asked ~4 hrs ago. I bet you could just try it and get an answer faster. Do feel free to report back. Note that it *is* possible for something to *look* like it works, but it leaves dangling pointers or other hidden corruption that takes a while to surface. I once had to troubleshoot a userspace bug that worked fine on one system but blew up on another with a different malloc() - some 6 million malloc calls after the bug hit.
Fortunately, the vast majority of kernel functions will return an error code if anything at all fishy happened, so just checking return codes on *everything* is usually good enough...
-- Constantine Shulyupin
participants (4)
-
Adrian Fiergolski -
Constantine Shulyupin -
jim.cromie@gmail.com -
Valdis Klētnieks