[PATCH v2 13/13] dmaengine: Use unique debugfs names
Linus Walleij <[email protected]>
| Newsgroups | org.kernel.vger.dmaengine,org.kernel.vger.phone-devel |
|---|---|
| Message-ID | <[email protected]> |
DMA40 registers multiple dma_device instances for the same platform device. The DMAengine debugfs code uses dev_name(dma_dev->dev) as the directory name, so the second and third registrations try to create the same directory and print duplicate-name warnings. Keep the existing device-name directory for the first registration, but use a dev_id-suffixed fallback when that name already exists. Signed-off-by: Linus Walleij <[email protected]> --- drivers/dma/dmaengine.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index 6ffd8bd82154..a1c388def67a 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c @@ -33,6 +33,7 @@ #include <linux/acpi.h> #include <linux/acpi_dma.h> +#include <linux/dcache.h> #include <linux/device.h> #include <linux/dma-mapping.h> #include <linux/dmaengine.h> @@ -70,8 +71,24 @@ static struct dentry *rootdir; static void dmaengine_debug_register(struct dma_device *dma_dev) { - dma_dev->dbg_dev_root = debugfs_create_dir(dev_name(dma_dev->dev), - rootdir); + const char *name = dev_name(dma_dev->dev); + struct dentry *dentry; + char *uniq; + + dentry = debugfs_lookup(name, rootdir); + if (dentry) { + dput(dentry); + + uniq = kasprintf(GFP_KERNEL, "%s.%d", name, dma_dev->dev_id); + if (!uniq) + return; + + dma_dev->dbg_dev_root = debugfs_create_dir(uniq, rootdir); + kfree(uniq); + } else { + dma_dev->dbg_dev_root = debugfs_create_dir(name, rootdir); + } + if (IS_ERR(dma_dev->dbg_dev_root)) dma_dev->dbg_dev_root = NULL; } -- 2.55.0