| From 157f4cd073844d8d8e0de00573b64ae5e42ec8b5 Mon Sep 17 00:00:00 2001 |
| From: Vladimir Oltean <vladimir.oltean@nxp.com> |
| Date: Mon, 1 Jun 2020 12:58:26 +0300 |
| Subject: [PATCH] devres: keep both device name and resource name in pretty |
| name |
| |
| commit 35bd8c07db2ce8fd2834ef866240613a4ef982e7 upstream. |
| |
| Sometimes debugging a device is easiest using devmem on its register |
| map, and that can be seen with /proc/iomem. But some device drivers have |
| many memory regions. Take for example a networking switch. Its memory |
| map used to look like this in /proc/iomem: |
| |
| 1fc000000-1fc3fffff : pcie@1f0000000 |
| 1fc000000-1fc3fffff : 0000:00:00.5 |
| 1fc010000-1fc01ffff : sys |
| 1fc030000-1fc03ffff : rew |
| 1fc060000-1fc0603ff : s2 |
| 1fc070000-1fc0701ff : devcpu_gcb |
| 1fc080000-1fc0800ff : qs |
| 1fc090000-1fc0900cb : ptp |
| 1fc100000-1fc10ffff : port0 |
| 1fc110000-1fc11ffff : port1 |
| 1fc120000-1fc12ffff : port2 |
| 1fc130000-1fc13ffff : port3 |
| 1fc140000-1fc14ffff : port4 |
| 1fc150000-1fc15ffff : port5 |
| 1fc200000-1fc21ffff : qsys |
| 1fc280000-1fc28ffff : ana |
| |
| But after the patch in Fixes: was applied, the information is now |
| presented in a much more opaque way: |
| |
| 1fc000000-1fc3fffff : pcie@1f0000000 |
| 1fc000000-1fc3fffff : 0000:00:00.5 |
| 1fc010000-1fc01ffff : 0000:00:00.5 |
| 1fc030000-1fc03ffff : 0000:00:00.5 |
| 1fc060000-1fc0603ff : 0000:00:00.5 |
| 1fc070000-1fc0701ff : 0000:00:00.5 |
| 1fc080000-1fc0800ff : 0000:00:00.5 |
| 1fc090000-1fc0900cb : 0000:00:00.5 |
| 1fc100000-1fc10ffff : 0000:00:00.5 |
| 1fc110000-1fc11ffff : 0000:00:00.5 |
| 1fc120000-1fc12ffff : 0000:00:00.5 |
| 1fc130000-1fc13ffff : 0000:00:00.5 |
| 1fc140000-1fc14ffff : 0000:00:00.5 |
| 1fc150000-1fc15ffff : 0000:00:00.5 |
| 1fc200000-1fc21ffff : 0000:00:00.5 |
| 1fc280000-1fc28ffff : 0000:00:00.5 |
| |
| That patch made a fair comment that /proc/iomem might be confusing when |
| it shows resources without an associated device, but we can do better |
| than just hide the resource name altogether. Namely, we can print the |
| device name _and_ the resource name. Like this: |
| |
| 1fc000000-1fc3fffff : pcie@1f0000000 |
| 1fc000000-1fc3fffff : 0000:00:00.5 |
| 1fc010000-1fc01ffff : 0000:00:00.5 sys |
| 1fc030000-1fc03ffff : 0000:00:00.5 rew |
| 1fc060000-1fc0603ff : 0000:00:00.5 s2 |
| 1fc070000-1fc0701ff : 0000:00:00.5 devcpu_gcb |
| 1fc080000-1fc0800ff : 0000:00:00.5 qs |
| 1fc090000-1fc0900cb : 0000:00:00.5 ptp |
| 1fc100000-1fc10ffff : 0000:00:00.5 port0 |
| 1fc110000-1fc11ffff : 0000:00:00.5 port1 |
| 1fc120000-1fc12ffff : 0000:00:00.5 port2 |
| 1fc130000-1fc13ffff : 0000:00:00.5 port3 |
| 1fc140000-1fc14ffff : 0000:00:00.5 port4 |
| 1fc150000-1fc15ffff : 0000:00:00.5 port5 |
| 1fc200000-1fc21ffff : 0000:00:00.5 qsys |
| 1fc280000-1fc28ffff : 0000:00:00.5 ana |
| |
| Fixes: 8d84b18f5678 ("devres: always use dev_name() in devm_ioremap_resource()") |
| Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> |
| Link: https://lore.kernel.org/r/20200601095826.1757621-1-olteanv@gmail.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/lib/devres.c b/lib/devres.c |
| index 17624d35e82d..77c80ca9e485 100644 |
| --- a/lib/devres.c |
| +++ b/lib/devres.c |
| @@ -155,6 +155,7 @@ void __iomem *devm_ioremap_resource(struct device *dev, |
| { |
| resource_size_t size; |
| void __iomem *dest_ptr; |
| + char *pretty_name; |
| |
| BUG_ON(!dev); |
| |
| @@ -165,7 +166,15 @@ void __iomem *devm_ioremap_resource(struct device *dev, |
| |
| size = resource_size(res); |
| |
| - if (!devm_request_mem_region(dev, res->start, size, dev_name(dev))) { |
| + if (res->name) |
| + pretty_name = devm_kasprintf(dev, GFP_KERNEL, "%s %s", |
| + dev_name(dev), res->name); |
| + else |
| + pretty_name = devm_kstrdup(dev, dev_name(dev), GFP_KERNEL); |
| + if (!pretty_name) |
| + return IOMEM_ERR_PTR(-ENOMEM); |
| + |
| + if (!devm_request_mem_region(dev, res->start, size, pretty_name)) { |
| dev_err(dev, "can't request region for resource %pR\n", res); |
| return IOMEM_ERR_PTR(-EBUSY); |
| } |
| -- |
| 2.27.0 |
| |